如果想要在自己所定义的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,结果会显示连接上的时间。
分享到:
相关推荐
只需在`beans.xml`中声明这些对象,然后在Servlet中声明对应的成员变量并使用`@Autowired`注解,Spring容器会在初始化Servlet时自动将对象注入,避免了手动创建对象和管理对象生命周期的繁琐工作。 4. **Spring MVC...
Struts作为MVC框架处理用户请求,JSP作为视图展示结果,Servlet在底层提供HTTP请求的处理,Hibernate负责数据持久化,而Spring则扮演容器角色,管理和协调各个组件的交互。这种架构提高了代码的可维护性和可扩展性,...
当我们在Servlet环境中工作时,有时需要在Servlet中直接访问由Spring管理的Bean,以便利用Spring提供的服务和功能。以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即...
在Java Web开发中,Servlet和Spring MVC(主要通过Controller)是两种常见的请求处理机制。本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 ...
开发者无需在Filter或Servlet内部硬编码bean名称,而是通过Spring容器自动注入所需的依赖,大大提升了代码的整洁度和复用性。此外,Spring提供的Filter和Servlet代理类,进一步简化了集成过程,使开发者可以专注于...
在Spring Boot中,Servlet的使用变得非常简便,因为Spring Boot内置了Servlet容器,如Tomcat或Jetty,这些容器会自动处理Servlet的注册和管理。本文将详细介绍如何在Spring Boot中添加自定义Servlet。 首先,Spring...
在Java Web开发中,Spring框架和Servlet技术是两个至关重要的组件。Spring是一个全面的后端应用框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地简化了Java应用程序的开发。而...
例如,要注册一个Servlet组件,首先需要编写一个继承自HttpServlet的Servlet实现类,然后创建一个ServletRegistrationBean的Bean,将Servlet实例包装后添加到Spring Boot的Bean容器中,并且可以设置Servlet的加载...
在`web.xml`中配置Listener时,其加载顺序通常发生在所有其他组件之前,因为它们经常用于初始化应用程序环境或配置Spring容器。 **示例代码:** ```xml org.springframework.web.context....
在Spring的配置文件中,你需要定义一个`Servlet`实例,然后将其作为一个bean注册到Spring容器中。接着,你需要创建一个`SimpleServletHandlerAdapter`的bean,并通过`handler`属性指定刚刚注册的Servlet。这样,...
1. **初始化性能**:Servlet需要在服务器启动时加载并初始化,而Spring MVC通过Spring容器管理Controller实例,一般使用懒加载,因此在应用启动时,Spring Controller的性能可能优于Servlet。 2. **请求处理速度**...
1. Spring容器:理解Bean的定义、依赖注入以及自动扫描。 2. Controller:创建Controller类,处理HTTP请求,并通过ModelAndView返回响应。 3. 视图解析:配置视图解析器,如InternalResourceViewResolver,将逻辑...
具体到我们的场景,如果DAO对象被Spring管理,而Servlet不在Spring容器中,那么我们就需要在Servlet初始化的时候从Spring容器中获取DAO对象。 具体操作步骤如下: 1. 在Servlet中定义一个私有成员变量作为DAO对象...
5. **部署与测试**:将项目打包成WAR文件,部署到Servlet容器中,通过访问指定URL触发Servlet,验证定时任务是否按预期工作。 在实际应用中,为了提高代码的可维护性和灵活性,可以考虑使用Spring框架的`@Scheduled...
标题 "Spring3.1.3 Ioc在Web容器中的建立" 涉及的是Spring框架的一个关键特性——依赖注入(Dependency Injection,简称DI),以及如何在Web应用环境中配置和使用它。Spring是Java开发中最流行的轻量级框架之一,...
其次,在业务逻辑中使用JdbcTemplate进行数据库操作。 6. **编写测试用例** 编写单元测试或集成测试用例,确保应用程序按预期工作。 7. **部署应用程序** 最后,打包应用程序并在目标服务器上部署。如果是Web...
这意味着,我们可以方便地在SpringMVC的Controller中注入服务层的bean,无需关心它们是在哪个容器中定义的。 总结来说,Spring和SpringMVC的父子容器关系使得我们能够清晰地划分应用的各个组件,提供了一种灵活的...
总的来说,Spring在Web容器中的启动过程涉及到`WebApplicationContext`的创建、配置文件的解析、bean定义的加载和bean的实例化。通过这种方式,Spring能够紧密地集成到Web环境中,提供全面的依赖注入和控制反转功能...
在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`<context-param>`和`...
学习和实践这个项目,开发者可以深入理解JSP和Servlet如何协同工作,以及如何在实际场景中运用它们来构建功能性的Web应用。同时,这也是迈向更复杂的Java Web开发,如Spring MVC、Struts等框架的第一步。