Spring之Servlet配置篇
来源:互联网 发布:淘宝店铺什么等级最高 编辑:程序博客网 时间:2024/06/14 02:49
在讲之前,我们先来看看spring配置文件中为Servlet注入到底能不能成功。首先,写一个随服务器启动的Servlet,Servlet中定义一个类变量,并定义set方法。随便在set方法中向控制台输出些东西,然后在doGet,doPost或service方法中调用该类对象的一个方法。配置好配置文件,启动服务器。仔细观察控制台,我们发现Servlet启动过程中已经执行了set方法,说明改servlet已经被成功注入。我们再打开浏览器访问下这个Servlet,发现服务器报了空指针异常。大体意思是说你在doGet或doPost或service方法中调用的那个变量是空。为什么会这样?其实也不难理解,我们使用spring的目的就是为了让spring为我们来提供一个已经被注入好的一个实例。而servlet是不同的,servlet是有生命周期的,而这个并不归属spring管理,而是由web容器管理的。那么当servlet刚刚创建的时候,spring可以为servlet注入,当你访问的时候,由于servlet是单实例多线程的,所以,servlet信息被重置,刚刚被注入的对象又为null了。 那么该怎么处理这个问题呢?其实也不难,只要我在获得Serlet的时候,用从Spring获得,而不是由web容器获得就可以了。要想获得Spring中管理的bean肯定要获得ApplicationContext对象,前面说过,在web开发中要获得ApplicationContext对象需要获得ServletContext,所以,需要有一个Servlet,而这个Servlet所要做的就是获得Spring中定义的那个Servlet。而Servlet最终还是要归web容器管理的,所以要归还给web容器,简单的讲就是在定义的这个Servlet中所有方法都用从Spring定义中的获得的那个Servlet去处理就可以了。所以,这个Servlet我们可以写成:public class ServletToBeanProxy extends GenericServlet {private String targetBean;private Servlet proxy;public void init() throws ServletException { System.out.println("proxy init"); this.targetBean = getInitParameter("targetBean"); getServletBean(); proxy.init(getServletConfig());}public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { proxy.service(req, res);}private void getServletBean() { // ---------- Linstner版 ------------ // WebApplicationContext wac = // WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); // this.proxy = (Servlet) wac.getBean(targetBean); //------------ Servlet版 ------------ ApplicationContext context = WebApplicationContextUtils .getRequiredWebApplicationContext(this.getServletContext()); this.proxy = (Servlet) context.getBean(targetBean); //通过ServletContext获得 // ApplicationContext context = (ApplicationContext) this // .getServletContext() // .getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);}} web.xml可以做如下配置: ProxyBean com.up72.servlet.ServletToBeanProxy targetBean actionServlet 1 ProxyBean *.do 其中init-param中的targetBean就是你在Spring中配置的那个Servlet。 其他的J2EE API的注入网上都有配置方法,有兴趣的可以去查找。我就不列举了。之所以讲Servlet是因为在MVC中Servlet充当了控制器的角色,是MVC的关键和核心。在Servlet往往需要大量注入service层的一些类,然后在类中调用。虽然,配置好Listener或是Servlet以后,你可以通过ServletContext的getAttribute获得Application对象,然后调用getBean()方法获得你所需要的bean,不过,这样就写死了。违背了软件开发的可修改原则。备注:如果你只需要Spring的注入功能,那么你只需要两个jar包就可以了。spring.jar和commons-logging.jar。
- Spring之Servlet配置篇
- Spring配置之springmvc-servlet.xml
- Spring MVC +Mybatis + Maven 配置之Spring-Servlet配置
- servlet中取到Spring配置
- Spring配置Servlet
- spring-servlet.xml配置
- Spring Boot Servlet配置
- spring boot学习8之Servlet/Filter/Listener配置
- Servlet之手动配置Servlet
- Servlet, Spring, hibernate基本配置
- spring与servlet环境配置
- 【Spring】SpringMVC Servlet 配置示例
- servlet与spring配置心得
- Spring boot配置自定义Servlet
- spring mvc学习(二)之spring-servlet.xml和applicationContext.xml配置
- spring 3.0 spring-servlet.xml配置
- spring 3.0 spring-servlet.xml配置 .
- spring web.xml之servlet
- 在Linux上安装EBS需要mount其它磁盘要注意的问题
- Lua脚本层面调用外部DLL
- Delphi 记录类型- 结构指针
- 股票操作记录 2010.12.24
- 互联网/移动互联网小团队创业 第二集 汪华
- Spring之Servlet配置篇
- WPF样式(Style)与模板(Template)
- Tomcat startup.bat文件配置
- 使用em
- #pragma pack(n) 对齐用法详解
- 互联网小团队创业 第三集 创业准备易犯的错误 汪华
- 互联网小团队创业 第四集 做产品 要有爱
- (转)如何写robots.txt?
- 利用Dom4J的SAXReader解析大文件