1 ServletContext和ServletActionContext,ActionContext有什么区别
servletContext提供了标准的Servlet运行环境,其实就是一些servlet和web 容器进行通信的方法。
ServletActionContext 其实是ActionContext的子类,其功能脱胎于ActionContext,对ActionContext的方法做了一定的包装,提供了更简便直观的方法。
ActionContext来源于Struts2,ActionContext就是为了弥补strtus2 action跳出标准servlet框架而造成的和WEB环境失去联系的缺陷。
2 struts和springmvc都可以获得servletContext
2.1 struts获得servletContext:
ServletActionContext.getServletContext()
2.2 springmvc获得servletContext(应该属于spring获得)方式一:
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();
方式二:
public void aa( HttpServletRequest request ){
ServletContext servletContext=request.getSession().getServletContext();
}
2.3 servletContext获得WebApplicationContext
方式一:
WebApplicationContext webApplicationContext =
(WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
方式二:
WebApplicationContext webApplicationContext
=WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
其中 方式二:
servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext();
举例:
import org.springframework.web.context.support.WebApplicationContextUtils;
public void aa( HttpServletRequest request ){
// 方式一
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
// 方式二
WebApplicationContext webApplicationContext = (WebApplicationContext)request.getSession().getServletContext()
.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
}
ServletActionContext.getServletContext().getRealPath("/文件名")
4 springmvc常用,在spring容器中 获得request
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 页面请求路径
String URL = request.getRequestURL().toString();
5 在struts中应用,转自http://blog.csdn.net/hxj135812/article/details/50127811
package cn.itcast.oa.web.listener;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import cn.itcast.oa.domain.Privilege;
import cn.itcast.oa.service.IPrivilegeService;
import cn.itcast.oa.service.impl.PrivilegeServiceImpl;
/**
* OA项目初始化监听器
* @author V-HUXJ
*
*/
public class OAInitListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
System.out.println("OA初始化的监听器执行了。。。");
// 获取spring工厂对象
WebApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(sce.getServletContext());
// 从spring工厂中获取一个PrivilegeService对象
IPrivilegeService priService = (IPrivilegeService) context
.getBean("privilegeServiceImpl");
// 使用Service对象查询权限菜单数据
List priTopList = priService.findTopList();
sce.getServletContext().setAttribute("priTopList", priTopList);
//查询系统中所有的权限对应的url
List urls = priService.findAllUrls();
sce.getServletContext().setAttribute("urls", urls);
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}
取
List urls = (List) ServletActionContext
.getServletContext().getAttribute("urls");
// 判断当请求的url是否需要校验
if (urls.contains(url)) {// 进行权限校验
boolean b = user.checkPrivilegeByUrl(url);
if (b) {// 如果校验通过,放行
String invoke = invocation.invoke();// 放行
return invoke;
} else {// 如果校验失败,跳转到没有权限的提示页面
return "noPrivilegeUI";
}
6 如何取得Spring管理的bean (请用第3种方法)转自:http://elf8848.iteye.com/blog/875830
1、servlet方式加载时,
【web.xml】
Xml代码 收藏代码
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:/springMVC.xml
1
spring容器放在ServletContext中的key是org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC
注意后面的springMVC,是你的servlet-name配置的值,注意适时修改。
ServletContext sc=略
WebApplicationContext attr = (WebApplicationContext)sc.getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC");
2、listener方式加载时:
【web.xml】
【jsp/servlet】可以这样取得
3、通用的方法来了,神器啊,前的 1、2两种方法并不通用,可以抛弃了。
在配置文件中加入:
转载标明链接:http://blog.csdn.net/wabiaozia/article/details/51578014
我博客所有文章目录:http://blog.csdn.net/wabiaozia?viewmode=contents
本文参考:spring3.x和http://www.blogjava.net/Todd/archive/2010/04/22/295112.html , http://guomingzhang2008.iteye.com/blog/1739294