struts和springmvc相关获取ServletContext()方式

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);
		
}

3 在struts中获得服务器下文件路径:

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】

  
  contextConfigLocation  
  /WEB-INF/applicationContext  
  
  
  
  org.springframework.web.context.ContextLoaderListener  
  

 【jsp/servlet】可以这样取得

Java代码   收藏代码
  1. ServletContext context = getServletContext();  
  2. WebApplicationContext applicationContext  = WebApplicationContextUtils .getWebApplicationContext(context);   
 

3、通用的方法来了,神器啊,前的  1、2两种方法并不通用,可以抛弃了。
在配置文件中加入:

Xml代码   收藏代码
  1.   
  2. <bean class="com.xxxxx.SpringContextHolder" lazy-init="false" />  
 
Java代码   收藏代码
  1. import org.springframework.context.ApplicationContext;  
  2. import org.springframework.context.ApplicationContextAware;  
  3. /** 
  4.  * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. 
  5.  *  
  6.  */  
  7. public class SpringContextHolder implements ApplicationContextAware {  
  8. private static ApplicationContext applicationContext;  
  9.   
  10. /** 
  11. * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. 
  12. */  
  13. public void setApplicationContext(ApplicationContext applicationContext) {  
  14. SpringContextHolder.applicationContext = applicationContext; // NOSONAR  
  15. }  
  16.   
  17. /** 
  18. * 取得存储在静态变量中的ApplicationContext. 
  19. */  
  20. public static ApplicationContext getApplicationContext() {  
  21. checkApplicationContext();  
  22. return applicationContext;  
  23. }  
  24.   
  25. /** 
  26. * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 
  27. */  
  28. @SuppressWarnings("unchecked")  
  29. public static  T getBean(String name) {  
  30. checkApplicationContext();  
  31. return (T) applicationContext.getBean(name);  
  32. }  
  33.   
  34. /** 
  35. * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 
  36. */  
  37. @SuppressWarnings("unchecked")  
  38. public static  T getBean(Class clazz) {  
  39. checkApplicationContext();  
  40. return (T) applicationContext.getBeansOfType(clazz);  
  41. }  
  42.   
  43. /** 
  44. * 清除applicationContext静态变量. 
  45. */  
  46. public static void cleanApplicationContext() {  
  47. applicationContext = null;  
  48. }  
  49.   
  50. private static void checkApplicationContext() {  
  51. if (applicationContext == null) {  
  52. throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");  
  53. }  
  54. }  
  55. }  




转载标明链接: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


你可能感兴趣的:(java·未分类)