在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建。如果要在servlet中使用spring容器管理业务对象,通常需要使用WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext())来获得WebApplicationContext,然后调用WebApplicationContext.getBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,并且在servlet代码中硬编码了应用对象的bean名字。为了能在servlet中感知spring中bean,可采用如下步骤来实现:
1- 将servlet作为bean定义在context.xml文件中,和要应用的bean定义放在一起;
2- 实现一个代理servlet,该servlet用WebApplicationContext来获得在context.xml中定义的servlet的对象,并将任务委托给context.xml中定义的servlet
3- 在web.xml中用ContextLoaderListener来初始化spring 的context,同时在代理servlet的定义中用初始化参数来定义context.xml中servlet的bean名字。
4- 在web.xml中定义代理servlet的mapping.
利用这种方式就将servlet和业务对象的依赖关系用spring 来进行管理,并且不用在servlet中硬编码要引用的对象名字。
例子代码如下:
(1)代理servlet:
=======================================================================
package chen;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
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() {
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.proxy = (Servlet)wac.getBean(targetBean);
}
}
=================================================================================
(2)web.xml中配置
<context-param>
<param-name>contextConfigLoaction</param-name>
<param-value>/WEB-INF/context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>ProxyBean</servlet-name>
<servlet-class>chen.ServletToBeanProxy</servlet-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>servletBean</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ProxyBean</servlet-name>
<url-pattern>/ProxyBean</url-pattern>
</servlet-mapping>
(3) 完成实际任务的servlet定义,该servlet会引用另一个Book的对象
======================= ServletBean.java=======================
package chen;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet implementation class for Servlet: ServletBean
*
*/
public class ServletBean extends javax.servlet.GenericServlet implements javax.servlet.Servlet {
private Book book;
public ServletBean() {
super();
}
public void init() throws ServletException {
super.init();
}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
book.showInfo();
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}
================================Book.java==============================
package chen;
public class Book {
private String isbn;
private String name;
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void showInfo() {
System.out.println("book info...");
}
}
(4) context.xml配置
<beans>
<bean id="book" id="servletBean" <property name="book">
<ref bean="book"/>
</property>
</bean>
</beans>
注意,在web.xml中并不出现ServletBean的说明,取而代之的是ServletToBeanProxy的说明,并用初始化参数targetBean来定义要代理的Servlet在context.xml中的名字。
当在浏览器中输入http://localhost/webcontext/ProxyBean时 ,spring将会创建ServletBean一个实例,其引用的Book实例也会被创建。
对Filter,springframework1.2以后自带了org.springframework.web.filter.DelegatingFilterProxy 来实现Filter和业务对象之间的代理,不需要自行开发了
分享到:
相关推荐
这篇文章将深入探讨`SimpleServletHandlerAdapter`的工作原理及其在Spring管理Servlet中的作用。 首先,`SimpleServletHandlerAdapter`是`HandlerAdapter`接口的一个实现,该接口是Spring MVC的核心组件之一,用于...
将Spring与Servlet整合,可以充分利用两者的优点,构建高效、可维护的Web应用程序。 **Spring整合Servlet的基本步骤:** 1. **引入依赖**:在项目中,你需要包含Spring的相关库,以及Servlet API的jar包。如果你...
2. **Spring的Servlet监听器**:如ContextLoaderListener,用于初始化Spring的ApplicationContext,加载配置文件并管理bean。 3. **HandlerMapping**:负责将请求映射到相应的处理器,Spring MVC提供了多种映射策略...
### Spring管理Filter与Servlet详解 在现代Web应用开发中,Spring框架因其强大的依赖注入和面向切面编程功能而被广泛采用。特别是在Java EE环境中,如何有效地整合Spring与Servlet、Filter等核心组件,对于构建高...
在Java Web开发中,Spring框架和Servlet技术是两个至关重要的组件。Spring是一个全面的后端应用框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地简化了Java应用程序的开发。而...
在IT领域,Spring框架和Servlet技术是Web开发中的重要组成部分,尤其对于初学者而言,"spring+servlet 入门hello_world"是一个极好的起点。这个实例将帮助你理解这两个技术的基础概念以及它们如何协同工作来构建一个...
Spring通过依赖注入(DI)帮助我们管理Servlet中的对象。只需在`beans.xml`中声明这些对象,然后在Servlet中声明对应的成员变量并使用`@Autowired`注解,Spring容器会在初始化Servlet时自动将对象注入,避免了手动...
在"jsf+spring+servlet"的组合中,Spring可能被用作服务层,管理数据库访问、业务逻辑和事务控制。 Servlet在JSF和Spring之间起到了连接作用。虽然JSF本身就可以处理HTTP请求,但Servlet可以在需要更底层控制或者...
在本项目中,Spring作为一个服务提供者,帮助管理组件间的依赖关系,同时通过AOP实现事务管理和日志记录等功能。 Servlet是Java EE平台中的标准接口,用于处理HTTP请求。在Spring Security 3.1的背景下,Servlet...
然后,使用MyBatis配置SQL语句,Spring管理Bean,Servlet编写控制器;接着,编写前端界面,与后端交互;最后,进行单元测试和集成测试,确保系统稳定可靠,部署到服务器上。 通过结合MyBatis、Spring和Servlet这三...
Spring通过IoC(Inversion of Control,控制反转)容器管理对象的生命周期和依赖关系,这使得代码更加松耦合,易于测试和维护。此外,Spring MVC是Spring框架的一部分,它为Web应用提供了一种组织代码的方式,允许...
Spring MVC可以与Servlet一起工作,处理HTTP请求,Spring的ApplicationContext可以管理Hibernate的SessionFactory,使得数据库操作更加便捷。 【整合过程】在实际开发中,通常会使用Spring的DispatcherServlet作为...
3. **资源利用率**:Spring MVC利用IoC容器管理Bean,可减少内存占用,而原生Servlet可能创建更多的临时对象。 4. **扩展性和可维护性**:Spring MVC提供了更好的模块化和解耦,使得添加新功能、调整逻辑、单元测试...
6. **Aspect-Oriented Programming (AOP)**:Spring MVC充分利用了Spring的AOP支持,可以方便地进行切面编程,如事务管理、日志记录等。 7. **MVC注解**:3.0版本开始,Spring MVC大力推广使用注解进行配置,如@...
本文将详细解析"spring和servlet的登录页面模板"这一主题,探讨如何利用HTML作为前端界面,Spring的安全管理以及Servlet的请求处理来实现一个完整的登录功能。 首先,HTML(超文本标记语言)是构建网页的基础,它...
Struts作为MVC框架处理用户请求,JSP作为视图展示结果,Servlet在底层提供HTTP请求的处理,Hibernate负责数据持久化,而Spring则扮演容器角色,管理和协调各个组件的交互。这种架构提高了代码的可维护性和可扩展性,...
本篇文章将深入探讨Spring MVC的核心组件,并重点关注"org.springframework.web.servlet-2.5.6.SEC01.jar"这个特定版本的安全更新。 Spring MVC是Spring框架的一部分,主要负责处理HTTP请求,提供模型-视图-控制器...
基于Spring和Mybatis和servlet的人员信息管理系统源码+数据库.zip基于Spring和Mybatis和servlet的人员信息管理系统源码+数据库.zip基于Spring和Mybatis和servlet的人员信息管理系统源码+数据库.zip基于Spring和...
在Spring Boot中,Servlet的使用变得非常简便,因为Spring Boot内置了Servlet容器,如Tomcat或Jetty,这些容器会自动处理Servlet的注册和管理。本文将详细介绍如何在Spring Boot中添加自定义Servlet。 首先,Spring...
【航空订票系统】是一个基于Web的开发项目,利用了多种技术栈,包括JSP、Java、SQL Server、Spring、Servlet以及Struts框架。这个项目旨在提供一个完整的在线机票预订平台,用户可以浏览航班信息、查询航班、预订...