`
2277259257
  • 浏览: 515154 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet +Spring-----2

 
阅读更多

在servlet中注入spring容器中的bean

 

在使用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" class="chen.Book"/>
 <bean id="servletBean" class="chen.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和业务对象之间的代理,不需要自行开发了

 

分享到:
评论

相关推荐

    springmvc4.1+spring4.1+mybatis3.2+spring-security3.2的maven环境搭建

    在"baseArch"这个文件夹中,可能包含了项目的基本架构,包括pom.xml文件、Spring配置文件(如applicationContext.xml、spring-servlet.xml)、MyBatis的Mapper接口和XML配置、Spring Security的配置文件,以及可能的...

    Jsp+servlet+spring+struts-API用户手册.zip

    在IT行业中,Web开发是至关重要的领域,而`JSP`、`Servlet`、`Spring`和`Struts`是构建高效、可扩展的企业级应用的基石。这些技术结合使用,能够实现强大的前后端交互,提供高效的数据处理和用户体验。 首先,`JSP ...

    javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

    实验一之后,实验二和实验三进一步介绍了JSF(JavaServer Faces)+JPA(Java Persistence API)以及Struts+Spring+Hibernate框架。这些高级框架简化了数据访问和业务逻辑的处理,JSF提供了一种声明式UI开发方式,JPA...

    java开发的家居电子商城Jsp+Servlet+Druid+JDBC-Template+JQuery+Js +EL/JSTL

    JavaWeb家居电子商城管理系统,没有spring框架,纯servlet,线上家居电子商城系统,主要实现了用户注册,登录、浏览,查看家居商品信息,购物车,订单,支付,查看通知以及管理员对用户信息的管理,订单管理,商品...

    《Java Web开发技术大全--JSP+Servlet+Struts 2+Hibernate+Spring+AJAX》.(李宁).[PDF].&ckook;

    《Java Web开发技术大全--JSP+Servlet+Struts 2+Hibernate+Spring+AJAX》.(李宁).[PDF].&ckook;

    spring4+springmvc+mybatis3+redis2.8+spring-session框架搭建

    2. **Spring MVC**: Spring MVC 是Spring框架的一部分,专为构建Web应用程序而设计。它遵循模型-视图-控制器(MVC)架构模式,使开发人员能够分离业务逻辑、数据模型和用户界面。Spring MVC 提供了强大的数据绑定...

    spring-boot 集成hibernate

    4. **连接池监控**: Druid提供了丰富的监控功能,可以在运行时查看连接池状态、SQL执行情况等,通过配置`spring.datasource.druid.web-stat-filter`和`spring.datasource.druid.stat-view-servlet`实现。 综上所述...

    基于 jsp + servlet + jquery + easy-ui + ajax 的学生成绩管理系统.zip

    【标题】中的“基于jsp + servlet + jquery + easy-ui + ajax 的学生成绩管理系统”揭示...通过分析和参与这个项目,可以深入了解JSP、Servlet、jQuery、Easy-UI和Ajax的协同工作,以及Spring Boot在实际项目中的应用。

    java web整合开发王者归来光盘代码-第七章 servlet章节 (JSP+Servlet+Struts+Hibernate+Spring)

    在这个特定的案例中,我们关注的是第七章关于Servlet的内容,结合了JSP(JavaServer Pages)、Servlet、Struts、Hibernate以及Spring这五种技术。以下是这些技术的相关知识点: 1. **Servlet**:Servlet是Java平台...

    Spring框架(spring-framework-5.2.6.RELEASE)的jar包

    Web-Servlet模块是Spring MVC的基石,提供了模型-视图-控制器(Model-View-Controller)架构,使得开发Web应用程序更为简单。Web模块则提供了基础的Web上下文,适合非MVC的Web应用程序。 4. **AOP**:AOP模块提供了...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    此外,它还提供了对Servlet、Filter和Listener的集成,使得Spring能够与任何Servlet容器(如Tomcat、Jetty)无缝协作。WebSocket API的集成则允许开发者创建实时双向通信的应用。 Spring Web MVC模块(spring-web...

    基于Servlet+Spring+Mybatis的客户关系管理系统.zip

    【基于Servlet+Spring+Mybatis的客户关系管理系统】 在IT领域,客户关系管理(CRM)系统是企业管理和优化与客户关系的重要工具。本项目“基于Servlet+Spring+Mybatis的客户关系管理系统”是一个典型的Java Web应用...

    spring-security-web源码所需jar包

    2. **spring-beans-3.1.2.RELEASE.jar**:包含Spring处理bean定义和依赖注入的核心类,使得Spring Security可以动态地管理其组件。 3. **spring-web-3.1.2.RELEASE.jar**:提供了处理HTTP请求和响应的能力,以及...

    spring-framework-master

    3. **Web模块**:包含Web和Web-Servlet模块,为基于Servlet的Web应用提供了基础支持,如DispatcherServlet、ModelAndView等。 4. **AOP(面向切面编程)模块**:提供了面向切面的编程实现,允许开发者定义“切面”...

    spring-webmvc5.3.6 jar包.rar

    org.springframework.web.servlet.DispatcherServlet ) spring-webmvc 是 Spring MVC 的一个实现。spriing-webmvc 依赖于 spring-web如果直接使用spring-webmvc,就会隐式地添加 spring-web。不必显示添加 spring-...

    信息办公学生课绩管理系统 jsp + servlet + javaBean + sql-server-scm.zip

    Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    2. **spring-context-3.2.0.RELEASE.jar**:上下文模块扩展了`spring-core`,引入了ApplicationContext接口,提供了一种管理和配置bean、事件传播、国际化和资源访问的环境。它还支持AOP(面向切面编程)和JMX(Java...

    spring-framework-1.0-with-dependencies.zip

    2. **spring-context**:扩展了spring-beans,引入了ApplicationContext接口,提供了一种更高级的容器,可以处理国际化、事件传播、资源加载等功能。 3. **spring-aop**:提供了AOP功能,包括定义切入点、通知、...

    spring框架4.3.10+commons-logging-1.2的jar包

    2. **spring-core-4.3.10.RELEASE.jar**:这个包包含了Spring框架的基本功能,如依赖注入、资源加载和通用的工具类。它是其他所有Spring模块的基础,提供了核心的IoC(控制反转)和DI(依赖注入)机制。 3. **...

Global site tag (gtag.js) - Google Analytics