1、在Web环境下获取ServletContext
- 利用ContextLoader
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();
- 使用RequestContextUtils
ServletContext context=RequestContextUtils.getWebApplicationContext(request).getServletContext();
- 利用HttpServletRequest
ServletContext context = req.getServletContext();
2、在Web环境下获取ApplicationContext,请参考资料地址
- 利用WebApplicationConteaxtUtils
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
-
实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象; Spring初始化时,会通过该方法将ApplicationContext对象注入
3、ServletContext和Application的异同
-
相同点
其实servletContext和application 是一样的,就相当于一个类创建了两个不同名称的变量;在servlet中ServletContext就是application对象
-
不同
两者的区别就是application用在jsp中,servletContext用在servlet中。application和pagerequestsession 都是JSP中的内置对象,在后台用ServletContext存储的属性数据可以用application对象获得
4、Spring框架中的*Aware接口
- ServletContextAware接口
private ServletContext application;
@Override
public void setServletContext(ServletContext servletContext) {
this.application = servletContext;
}
- ApplicationContextAware接口
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
5、Spring中Aware接口的使用,如:当某个Controller需要已登录用户的信息时,可以自己实现UserAware
/*
*1、自定义接口,如命名为UserAware
*/
public interface UserAware {
public void setUser(User user);
}
/**
*2、在Struts2中操作拦截器时,如果用户已登录,并且判断某个Controller实现了*UserAware接口,则把已登录的用户注入
*/
public String intercept(ActionInvocation invocation) throws Exception {
BaseAction action = (BaseAction) arg0.getAction();
if(action instanceof LoginAction || action instanceof RegAction){
return invocation.invoke();
}
else{
User user = (User)invocation.getInvocationContext().getSession().get("user");
if(user == null){
//去登陆
return "login" ;
}
else{
//放行
if(action instanceof UserAware){
//注入user给action
((UserAware)action).setUser(user);
}
return invocation.invoke();
}
}
}