在spring中,凡是实现ServletContextAware接口的类,都可以取得ServletContext。实现如下:
1
2
3
4
|
private ServletContext application;
public void setServletContext(ServletContext servletContext) {
this .application = servletContext;
} |
那么Spring是在什么时候把ServletContext放置进去的呢?通过对Spring的学习,终于明白了。
在web项目中,Spring容器的加载是通过XmlWebApplicationContext进行的。
它的父类AbstractRefreshableWebApplicationContext,在postProcessBeanFactory方法中进行了如下操作(postProcessBeanFactory方法被AbstractApplicationContext的refresh方法调用)
1
2
3
4
5
|
beanFactory.addBeanPostProcessor( new ServletContextAwareProcessor( this .servletContext, this .servletConfig));
beanFactory.ignoreDependencyInterface(ServletContextAware. class );
beanFactory.ignoreDependencyInterface(ServletConfigAware. class );
WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this .servletContext);
WebApplicationContextUtils.registerEnvironmentBeans(beanFactory, this .servletContext, this .servletConfig);
|
代码的第一句就是添加了一个ServletContextAwareProcessor。
该类的postProcessBeforeInitialization方法如下:
1
2
3
4
5
6
7
8
9
|
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if ( this .servletContext != null && bean instanceof ServletContextAware) {
((ServletContextAware) bean).setServletContext( this .servletContext);
}
if ( this .servletConfig != null && bean instanceof ServletConfigAware) {
((ServletConfigAware) bean).setServletConfig( this .servletConfig);
}
return bean;
} |
而所有的BeanPostProcessor都将在AbstractAutowireCapableBeanFactory类的initializeBean方法中,通过调用applyBeanPostProcessorsBeforeInitialization方法完成所有实现BeanPostProcessor接口的postProcessBeforeInitialization的调用。
XmlWebApplicationContext使用的BeanFactory是DefaultListableBeanFactory。
DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory,因此可以完成上述操作。
如此完成了只要实现了ServletContextAware接口的,都可以获取ServletContext。
XML文件中通过bean标签初始化,可以初始化相应数据:
<bean id="initBean" class="com.*.init.initBean"/>
相关推荐
org.springframework.web.context.ServletContextAware.class org.springframework.web.context.WebApplicationContext.class org.springframework.web.context.request.AbstractRequestAttributes.class org.spring...
2. **Filter**: 同样,可以在Filter的init()方法中获取ApplicationContext,或者通过ServletContextAware接口,将Spring上下文注册到ServletContext,然后在doFilter()方法中使用。 3. **Listener**: 在监听器的...
`WebMvcAutoConfiguration`类中包含一个内部静态类`WebMvcAutoConfigurationAdapter`,实现了`WebMvcConfigurer`接口,这是Spring MVC用于自定义MVC行为的接口。`WebMvcAutoConfigurationAdapter`还实现了`...
这个"spring-mvc jar包大全"包含了所有你需要在 Java EE 环境下进行 Web 开发时,使用 Spring MVC 所需的库文件。下面将详细解释这些 jar 包及其在 Spring MVC 开发中的作用。 1. **spring-webmvc.jar**:这是 ...
Spring 配置扫描多个包问题解析 Spring 框架中,配置扫描多个包是非常常见的需求,特别是在大型项目中,为了方便管理和维护...通过本文,我们可以更好地理解 Spring 框架中的配置扫描机制,并更好地应用于实际项目中。
SSH框架部分常见面试题.pdf 本文将对 SSH 框架部分常见面试题进行详细的解释...面向过程的编程是编程的基本方式,面向对象的编程是使用对象来编程,面向接口的编程是使用接口来编程,面向切面的编程是使用切面来编程。
All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....
例如,在Spring中配置DWR时,可以创建一个实现了`ServletContextAware`接口的类,并在该类中注入DWR相关的bean。这样,DWR就能够通过Spring管理其bean,并且在需要时能够访问到Spring上下文中的其他bean。 #### 五...
这些方法可以在 Action 中使用,以访问 Servlet API。 Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。开发人员可以根据实际情况选择合适...
然而,需要注意的是,随着技术的发展,Struts2现在可能已经过时,许多现代Web应用倾向于使用Spring Boot等更现代的框架来处理文件上传。尽管如此,理解Struts2的文件上传机制仍然对理解MVC框架的工作原理和文件上传...
3. 在struts.xml文件中使用标签修改配置参数。 在比较Struts 1和Struts 2框架时,我们可以发现底层实现机制的不同:Struts 1采用JSP和Servlet实现,而Struts 2采用Interceptor实现。在业务逻辑Action方面,Struts 1...
- 在result的配置中使用OGNL表达式 #### 案例描述 - **登录页面实现:** 成功登录后跳转到主页面,失败则留在登录页面并提示错误信息。 - **技术细节:** 实现该案例时需要注意Action的配置、Session的使用、参数...
例如,在下面的代码中,ActionTest7 类实现了 ServletRequestAware、ServletResponseAware 和 ServletContextAware 接口,通过这些接口,可以访问 request、response 和 application 对象。 ```java public class ...
此外,Action还可以实现ServletContextAware、ServletRequestAware和ServletResponseAware接口来直接获得Servlet容器中的对象。 Action的高级特性包括动态方法调用,这是Struts2的一个强大功能,允许一个Action处理...
后端Action类通常会定义为`ActionSupport`的子类,并实现`ServletContextAware`接口以便获取`ServletContext`对象,用于获取文件的存储路径。Action类的主要代码如下: ```java public class SingleUploadAction ...
- 在Action类中实现`Preparable`接口。 - 重写`prepare()`方法,在该方法中进行数据准备或其他预处理操作。 - 示例代码: ```java public class XxxAction extends ActionSupport implements Preparable { @...
8. **Dispatcher Servlet**:在Spring MVC等框架中,`DispatcherServlet`作为前端控制器,负责分发请求到相应的处理器,实现了MVC模式。 9. **JSP(JavaServer Pages)与Servlet的关系**:JSP是动态网页技术,它的...
可以让Action类实现`ServletRequestAware`、`ServletResponseAware`和`ServletContextAware`接口,Struts框架会在运行时自动注入对应的对象: ```java public class HelloWorldAction implements ...