`
he_lux
  • 浏览: 104122 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

在servlet中使用Spring的容器功能

阅读更多
如果想要在自己所定义的Servlet类别中使用Spring的容器功能,可以使用 org.springframework.web.context.ContextLoaderListener,例如在web.xml中使用<listener>标签加以定义:
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

ContextLoaderListener预设会读取applicationContext.xml,您可以指定自己定义的文件,只要在<context-param>中指定"contextConfigLocation"参数,例如:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/beans-config.xml,
        /WEB-INF/demo-service.xml
    </param-value>
</context-param>

接着您可以在自定义的Servlet中使用 org.springframework.web.context.support.WebApplicationContextUtils,从 ServletContext中取得org.springframework.web.context.WebApplicationContext,例如: 
WebApplicationContext ctx = 
    WebApplicationContextUtils.
        getRequiredWebApplicationContext(
                         this.getServletContext());

WebApplicationContext实体化了ApplicationContext配置文件,是Spring专为Servlet的Web应用程式设计的 ApplicationContext实作类别,在取得WebApplicationContext之后,您可以利用它来取得Bean定义档中定义的 Bean实例,例如:
Date date = (Date) ctx.getBean("dateBean");

在不支援Listener设定的容器上(例如Servlet 2.2以更早的版本),您可以使用org.springframework.web.context.ContextLoaderServlet来取代上面的ContextLoaderListener的设定,例如:
<servlet>
    <servlet-name>contextLoader</servlet-name>
    <servlet-class>
      org.springframework.web.context.ContextLoaderServlet
    </servlet-class>   
    <load-on-startup>1</load-on-startup>
</servlet>

综合以上的叙述,撰写一个简单的范例来示范完整的组态方式,假设您撰写了一个简单的Servlet程式,作用为提供简单的报时功能,如下所示:
TimeServlet.java
package onlyfun.caterpillar;
 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
 
public class TimeServlet extends HttpServlet { 
    public void doGet(HttpServletRequest req, 
                    HttpServletResponse res) 
                  throws ServletException, IOException { 
        WebApplicationContext ctx = 
                WebApplicationContextUtils.
                    getRequiredWebApplicationContext(
                        this.getServletContext());
        
        PrintWriter out = res.getWriter(); 
        out.println(ctx.getBean("dateBean")); 
    } 
}

这个Servlet中使用了WebApplicationContext来尝试取得dateBean,您可以在web.xml中定义ContextLoaderListener与Bean定义档的位置,例如:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    → http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>    

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans-config.xml</param-value>
    </context-param>     
    
    <listener>
        <listener-class>
         org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    
    <servlet>
        <servlet-name>time</servlet-name>
        <servlet-class>
            onlyfun.caterpillar.TimeServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>time</servlet-name>
        <url-pattern>/time.do</url-pattern>
    </servlet-mapping>      
</web-app>

在<context-param>的"contextConfigLocation"属性中,设定了Bean定义档的位置与名称,Bean定义档的内容如下所示:
beans-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC 
 "-//SPRING/DTD BEAN/EN" 
 "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans>   
    <bean id="dateBean" class="java.util.Date" singleton="false"/>
</beans>

您可以连接至TimeServlet,结果会显示连接上的时间。
分享到:
评论

相关推荐

    servlet与spring整合例子

    只需在`beans.xml`中声明这些对象,然后在Servlet中声明对应的成员变量并使用`@Autowired`注解,Spring容器会在初始化Servlet时自动将对象注入,避免了手动创建对象和管理对象生命周期的繁琐工作。 4. **Spring MVC...

    jsp servlet struts hibernate spring

    Struts作为MVC框架处理用户请求,JSP作为视图展示结果,Servlet在底层提供HTTP请求的处理,Hibernate负责数据持久化,而Spring则扮演容器角色,管理和协调各个组件的交互。这种架构提高了代码的可维护性和可扩展性,...

    在Servlet直接获取Spring框架中的Bean.docx

    当我们在Servlet环境中工作时,有时需要在Servlet中直接访问由Spring管理的Bean,以便利用Spring提供的服务和功能。以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即...

    原生Servlet与Spring Controller性能比较--Servlet项目

    在Java Web开发中,Servlet和Spring MVC(主要通过Controller)是两种常见的请求处理机制。本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 ...

    Spring 管理filter 和servlet

    开发者无需在Filter或Servlet内部硬编码bean名称,而是通过Spring容器自动注入所需的依赖,大大提升了代码的整洁度和复用性。此外,Spring提供的Filter和Servlet代理类,进一步简化了集成过程,使开发者可以专注于...

    Spring Boot 中的Servlet简单使用

    在Spring Boot中,Servlet的使用变得非常简便,因为Spring Boot内置了Servlet容器,如Tomcat或Jetty,这些容器会自动处理Servlet的注册和管理。本文将详细介绍如何在Spring Boot中添加自定义Servlet。 首先,Spring...

    spring+servlet所用jar

    在Java Web开发中,Spring框架和Servlet技术是两个至关重要的组件。Spring是一个全面的后端应用框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地简化了Java应用程序的开发。而...

    SpringBoot之配置嵌入式Servlet容器.pdf

    例如,要注册一个Servlet组件,首先需要编写一个继承自HttpServlet的Servlet实现类,然后创建一个ServletRegistrationBean的Bean,将Servlet实例包装后添加到Spring Boot的Bean容器中,并且可以设置Servlet的加载...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    在`web.xml`中配置Listener时,其加载顺序通常发生在所有其他组件之前,因为它们经常用于初始化应用程序环境或配置Spring容器。 **示例代码:** ```xml org.springframework.web.context....

    spring管理servlet的利器--SimpleServletHandlerAdapter

    在Spring的配置文件中,你需要定义一个`Servlet`实例,然后将其作为一个bean注册到Spring容器中。接着,你需要创建一个`SimpleServletHandlerAdapter`的bean,并通过`handler`属性指定刚刚注册的Servlet。这样,...

    原生Servlet与Spring Controller性能比较--Controller项目

    1. **初始化性能**:Servlet需要在服务器启动时加载并初始化,而Spring MVC通过Spring容器管理Controller实例,一般使用懒加载,因此在应用启动时,Spring Controller的性能可能优于Servlet。 2. **请求处理速度**...

    Servlet+JSP和Spring+MVC初学指南 书籍配套源码

    1. Spring容器:理解Bean的定义、依赖注入以及自动扫描。 2. Controller:创建Controller类,处理HTTP请求,并通过ModelAndView返回响应。 3. 视图解析:配置视图解析器,如InternalResourceViewResolver,将逻辑...

    JSP 开发之servlet中调用注入spring管理的dao

    具体到我们的场景,如果DAO对象被Spring管理,而Servlet不在Spring容器中,那么我们就需要在Servlet初始化的时候从Spring容器中获取DAO对象。 具体操作步骤如下: 1. 在Servlet中定义一个私有成员变量作为DAO对象...

    servlet定时器功能完整版已测试过

    5. **部署与测试**:将项目打包成WAR文件,部署到Servlet容器中,通过访问指定URL触发Servlet,验证定时任务是否按预期工作。 在实际应用中,为了提高代码的可维护性和灵活性,可以考虑使用Spring框架的`@Scheduled...

    Spring3.1.3 Ioc在Web容器中的建立

    标题 "Spring3.1.3 Ioc在Web容器中的建立" 涉及的是Spring框架的一个关键特性——依赖注入(Dependency Injection,简称DI),以及如何在Web应用环境中配置和使用它。Spring是Java开发中最流行的轻量级框架之一,...

    spring ioc容器部署实现

    其次,在业务逻辑中使用JdbcTemplate进行数据库操作。 6. **编写测试用例** 编写单元测试或集成测试用例,确保应用程序按预期工作。 7. **部署应用程序** 最后,打包应用程序并在目标服务器上部署。如果是Web...

    Spring和SpringMVC父子容器关系

    这意味着,我们可以方便地在SpringMVC的Controller中注入服务层的bean,无需关心它们是在哪个容器中定义的。 总结来说,Spring和SpringMVC的父子容器关系使得我们能够清晰地划分应用的各个组件,提供了一种灵活的...

    Spring源代码解析(二):IoC容器在Web容器中的启动.doc

    总的来说,Spring在Web容器中的启动过程涉及到`WebApplicationContext`的创建、配置文件的解析、bean定义的加载和bean的实例化。通过这种方式,Spring能够紧密地集成到Web环境中,提供全面的依赖注入和控制反转功能...

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`&lt;context-param&gt;`和`...

    JSP+Servlet实现简易购物车功能

    学习和实践这个项目,开发者可以深入理解JSP和Servlet如何协同工作,以及如何在实际场景中运用它们来构建功能性的Web应用。同时,这也是迈向更复杂的Java Web开发,如Spring MVC、Struts等框架的第一步。

Global site tag (gtag.js) - Google Analytics