`
littie1987
  • 浏览: 133876 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

在Spring中配置servlet

阅读更多

在servlet的编程中,如果想用到Spring的注入功能,其实很简单:

看个例子程序:

package en.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;

import en.dao.UserDao;

public class UserLogin extends HttpServlet {

	private UserDao dao;
	
	public UserDao getDao() {
		return dao;
	}

	public void setDao(UserDao dao) {
		System.out.println("Injection seccess!");
		this.dao = dao;
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		request.setCharacterEncoding("utf-8");
		String path="/userLogin.jsp";
		//WebApplicationContext context = (WebApplicationContext)request.getSession().getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
		//dao = (UserDao)context.getBean("userDao");
		dao.save();
		request.getRequestDispatcher(path).forward(request, response);
	}

}

 可以发现,该servlet引用了一个持久层的类UserDao,而这个类,我们不想直接实例化,而是由Spring进行注入。那么问题是如何在servlet中调用Spring的框架实现该注入呢?当然一种比较笨拙的办法就是直接获取。也就是上述代码中被注释的那一段。然而很明显这不是最佳的解决方案,因为这样做就相当于将代码写死了。而实际上我们可以用一个代理的servlet来完成这一个功能。看代码:

package en.filter;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ServletToBeanProxy extends HttpServlet {

	private String targetBean;
	private Servlet proxy;

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		proxy.service(req, res);
	}
	public void init()throws ServletException{
		System.out.println("inti...");
		targetBean = this.getInitParameter("targetBean");
		System.out.println(targetBean);
		getServletBean();
		proxy.init(getServletConfig());
		
	}
	private void getServletBean() {
		WebApplicationContext wac =
		WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
		this.proxy = (Servlet)wac.getBean(targetBean);
	}

}

 

下面是该servlet的web.xml配置:

 <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletToBeanProxy</servlet-name>
    <servlet-class>en.filter.ServletToBeanProxy</servlet-class>
    <init-param>
    	<param-name>targetBean</param-name>
    	<param-value>userLoginServlet</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>UserLogin</servlet-name>
    <url-pattern>/UserLogin</url-pattern>
</servlet-mapping>

 首先,我们来理清一下代码的执行顺序。当我们在客户端输入网址:http://localhost:8080/ProjectName/UserLogin的时候,服务器就会去调用这个代理的servlet。然而这个代理的servlet到底做了什么呢?可以分几步来描述:一:获得init参数,这个参数就是实际要访问的servlet,他会在Spring的配置文件中定义。二:通过WebApplicationContext去Spring容器中得到目标servlet,当然名字就是init参数中配置的名字。三:将获得的servlet强制转换为Servlet,然后执行目标servlet。OK,这样就完成了注入。

      那么,如果我们有另外一个业务的servlet怎么办呢?是不是还要在写一个ServletToBeanProxy 似地代理类呢?当然是不用的。我们只需要修改web.xml就行了。需要修改的地方只有init参数和url-parrten两处。代理类的代码是完全一样的,可以重用。这样,在servlet中就能感知到Spring的注入了。  而要注意的是,目标servlet是不需要在web.xml当中配置的。

 

分享到:
评论

相关推荐

    Spring整合Servlet练习

    3. **创建Spring配置**:在指定的`contextConfigLocation`(例如`spring-servlet.xml`)中,定义Spring的bean,包括控制器、服务层、数据访问层等。 4. **编写Servlet Controller**:在Spring MVC中,Controller...

    spring+servlet所用jar

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

    spring 与 servlet整合

    在Java Web开发中,Spring框架和Servlet是两个重要的组件,它们在构建现代应用程序时起着核心作用。Spring是一个全面的企业级应用框架,提供了依赖注入、面向切面编程、数据访问、事务管理等功能,而Servlet是Java ...

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

    在`web.xml`中配置Servlet时,其加载顺序通常发生在Filter之后,这是因为Filter主要用于对请求进行预处理。 **示例代码:** ```xml &lt;servlet&gt; &lt;servlet-name&gt;LoginServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;...

    Spring 管理filter 和servlet

    在`applicationContext.xml`配置文件中,将Filter或Servlet作为bean定义,使其成为Spring管理的一部分。例如: ```xml &lt;value&gt;SpringFilter ``` 这里,`com.netqin.filter.SpringFilter`应当是实现了...

    servlet与spring整合例子

    我们可以在Spring配置文件中定义数据源和DAO Bean,然后在Servlet中通过依赖注入获取这些DAO对象,执行数据库操作。 7. **Spring Security** 如果涉及到权限控制,Spring Security可以很方便地与Spring MVC整合,...

    spring+servlet 入门hello_world

    1. **Spring配置文件**:通常命名为`applicationContext.xml`,这是Spring的配置中心,定义了bean的创建、装配以及依赖关系。 2. **Servlet配置**:在`web.xml`文件中,你需要配置Spring DispatcherServlet,它是...

    spring MVC配置详解

    在 web.xml 文件中配置 ContextLoaderListener 和 contextConfigLocation,以便加载 Spring 的配置文件。 ```xml &lt;!-- Spring 配置 --&gt; org.springframework.web.context.ContextLoaderListener ...

    Spring Boot 中的Servlet简单使用

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

    Spring动态加载配置文件

    接下来,一旦检测到Spring配置文件发生变化,我们需要重新加载配置文件。这可以通过Spring的`ApplicationContext`的`refresh()`方法来实现。`refresh()`会重新初始化Bean工厂,读取新的配置信息,并更新所有Bean的...

    org.springframework.web.servlet-3.0.0.M4.jar

    在org.springframework.web.servlet-3.0.0.M4.jar中,除了核心组件之外,还包括了Spring的许可证信息,这通常存储在springframework-license.txt文件中,对于开源软件,许可证是确保合规使用的重要依据。 总之,...

    SPRING MVC配置过程

    spring-servlet.xml 文件名是根据上面 web.xml 中 &lt;servlet-name&gt; 标签的值生成的,例如,如果 &lt;servlet-name&gt; 为 springMVC,那么对应的文件名为 springMVC-servlet.xml。 &lt;beans xmlns="http://www.spring...

    spring boot 开发 servlet filters listeners

    在 Spring Boot 中使用 Servlet、Filter 和 Listener 可以让开发者更加灵活地控制应用的行为,特别是在处理跨多个请求的公共逻辑时尤其有用。通过本篇文章的学习,相信你已经掌握了如何在 Spring Boot 应用中使用...

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

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

    Spring MVC 配置请求的默认处理器.rar

    在Spring MVC框架中,配置请求的默认处理器是构建Web应用程序的关键步骤。这个过程涉及到设置DispatcherServlet,它作为Spring MVC的核心组件,负责调度HTTP请求到相应的控制器。以下将详细阐述Spring MVC配置请求的...

    Spring配置文件集合

    在本压缩包中,我们找到了一系列与Spring相关的配置文件,这些文件在构建JavaWeb应用时起着至关重要的作用。 1. `jdbc.properties`: 这个文件通常用于存储数据库连接的相关信息,如URL、用户名、密码等。它是Spring...

    Spring Tool Suite 搭建tomcat配置调试环境

    通过上述步骤,我们成功地在Spring Tool Suite中配置了Tomcat服务器,创建了一个简单的Web项目,并进行了调试。这对于Spring开发者来说是一个基本但至关重要的工作流程,确保了开发环境的顺畅运行。在实际开发中,...

    spring管理servlet的利器--SimpleServletHandlerAdapter

    这篇文章将深入探讨`SimpleServletHandlerAdapter`的工作原理及其在Spring管理Servlet中的作用。 首先,`SimpleServletHandlerAdapter`是`HandlerAdapter`接口的一个实现,该接口是Spring MVC的核心组件之一,用于...

    servlet+hibernate+spring实现添删改查

    【标题】"servlet+hibernate+spring实现添删改查"是一个常见的Web开发教程主题,它涵盖了Java后端开发中的三个核心框架:Servlet、Hibernate和Spring。这个主题主要针对初学者,旨在帮助他们理解如何整合这三个技术...

    Spring环境配置

    这里的配置意味着在Web应用启动时会加载指定的Spring配置文件。 #### 四、Spring应用配置文件详解 除了`web.xml`之外,还需要创建一个或多个Spring配置文件来定义应用程序的具体配置。以下是一个典型的Spring配置...

Global site tag (gtag.js) - Google Analytics