`
laowang1984
  • 浏览: 17204 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

将servlet定义为springBean的方法

 
阅读更多

需要完成一个比较晓得web服务端提供给外部系统调用,又不想用比较复杂web层框架(struts),只是采用servlet即可,不过每定义一个servlet都需要在web.xml里面写入配置,不方便管理,并且servlet和spring的交互感觉不是那么的河蟹……

 

这里自己想到了一个办法,将所有的http请求都转发到springBean里面,只需要定义一个servlet即可:

 

 

首先需要定义一个接口叫servlet处理 器

import java.io.IOException;

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


public interface HttpHandler {

	/**
	 * 处理 http请求
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void requestHandler(HttpServletRequest request, HttpServletResponse response) throws ServletException,
			IOException;

}

 

 

 

 

servlet  class

 

 

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

import org.apache.log4j.Logger;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ServletDispacher extends HttpServlet {

	private static final long serialVersionUID = -4397593743538525329L;
	private Map<String, HttpHandler> handlers = new HashMap<String, HttpHandler>();
	Logger log = Logger.getLogger(this.getClass());

	@SuppressWarnings("unchecked")
	@Override
	public void init(ServletConfig config) throws ServletException {
		ServletContext context = config.getServletContext();
		WebApplicationContext appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
		handlers = appContext.getBeansOfType(HttpHandler.class);
		for (HttpHandler handler : handlers.values()) {
			if (handler instanceof ServletBean) {
				ServletBean bean = (ServletBean) handler;
				bean.init(appContext);
			}
		}
		super.init(config);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
			IOException {
		String beanName = request.getPathInfo();
		HttpHandler handler = handlers.get(beanName);
		if (handler == null) {
			String wrongInfo = "cant't find servlet bean name " + beanName;
			log.error(wrongInfo);
			throw new RuntimeException(wrongInfo);
		}
		if (handler instanceof ServletBean) {
			ServletBean bean = (ServletBean) handler;
			bean.printLog(request);
		}
		handler.requestHandler(request, response);
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
}

 

servlet 在web.xml的配置:

 

	<servlet>
		<servlet-name>remote</servlet-name>
		<servlet-class>com.cqcis.ecsc.app.servlet.ServletDispacher</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>remote</servlet-name>
		<url-pattern>/remote/*</url-pattern>
	</servlet-mapping>

 

 

servletBean(这个是我自己定义的名字)的java代码

 

 

package com.cqcis.ecsc.app.servlet;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;

public class ServletBean implements HttpHandler {
	
@SuppressWarnings("unchecked")
	public void requestHandler(HttpServletRequest request, HttpServletResponse response) throws ServletException,
			IOException {


// 这里和普通的servlet一样的写

	}
}

 

 

最后把servletBean 配置为springBean

 

 

	<bean name="/testDatabase" class="com.cqcis.ecsc.app.bank.TestServ" ></bean>

 

最后我们可以根据路径/remote/testDatabase 来访问我们定义的servletBean

 

 

 

这样带来两点好处

1.再也不需要关心web.xml里面定义大量servlet的问题了,我们只需要在spring配置文件里面定义新的bean就可以打到新增servlet的目的

2 servlet里面引用普通springBean也变得容易了,直接按照一般规则注入就行了

分享到:
评论

相关推荐

    Java中Spring获取bean方法小结

    - **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...

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

    以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即ApplicationContext,它是管理Bean的核心组件。它负责读取配置文件(如XML或Java配置),创建并初始化Bean,以及维护它们...

    Servlet JSP Spring MVC初学指南(alin书签).pdf

    在Spring MVC中,控制器接收用户请求,调用业务逻辑(通常由Spring Bean处理),并返回一个模型,该模型随后被渲染为视图。Spring MVC还提供了强大的数据绑定、表单验证和异常处理功能。 在学习Servlet、JSP和...

    servlet与spring整合例子

    在Servlet与Spring整合时,首先我们需要创建一个Spring配置文件(如`beans.xml`),在这个文件中定义bean的配置。然后在Web应用的`web.xml`中,通过`ContextLoaderListener`配置Spring上下文,使得在应用启动时...

    Spring 管理filter 和servlet

    在`applicationContext.xml`配置文件中,将Filter或Servlet作为bean定义,使其成为Spring管理的一部分。例如: ```xml &lt;bean id="springFilter" class="com.netqin.filter.SpringFilter"&gt; &lt;value&gt;...

    获得spring里注册Bean的四种方法

    下面将介绍四种获取 Spring 里注册 Bean 的方法。 方法一:继承 BaseDispatchAction 这种方法常用于 Struts 框架中。我们可以继承 BaseDispatchAction 类,通过重写其方法来获取 Bean 对象。首先,我们需要在类中...

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

    本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 首先,原生Servlet是Java EE规范的一部分,它提供了一个基础的接口,用于接收和响应HTTP请求...

    maven+servlet+jsp+bean的demo

    在本项目"maven+servlet+jsp+bean的demo"中,我们将会探索JavaWeb开发的基本元素,包括Maven构建工具、Servlet、JSP(JavaServer Pages)以及Bean。这个小示例演示了如何在IntelliJ IDEA中创建一个完整的Maven工程,...

    Spring整合Servlet练习

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

    spring 与 servlet整合

    2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring提供AOP支持,允许开发者定义方法拦截器和切面,实现如日志记录、事务管理等横切关注点。 3. **模型-视图-控制器(Model-View-Controller, MVC)*...

    servlet+hibernate+spring实现添删改查

    完成后,结果通过Model返回给Controller,Controller再将其封装为视图模型,最后由Spring MVC的ViewResolver解析并展示给用户。 【学习重点】对于初学者来说,理解Servlet的请求响应机制,Hibernate的实体类和映射...

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

    上述代码中,通过`ContextLoaderListener`加载了一个名为`applicationContext.xml`的配置文件,该文件包含了所有Spring Bean的定义。这意味着所有Bean会在应用程序启动时被初始化。 #### 加载顺序总结 根据上述...

    spring+servlet 入门hello_world

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

    spring管理servlet的利器--SimpleServletHandlerAdapter

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

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

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

    几种spring获取bean的方法.txt

    根据提供的文件信息,我们可以总结出以下关于Spring框架中获取Bean的几种方法的相关知识点: ### Spring框架简介 Spring框架是一款开源的轻量级Java EE应用程序开发框架,它通过提供一系列强大的功能来简化Java...

    spring依赖注入bean

    在 Web 应用中,Spring 通常作为 Servlet 容器的一部分工作,例如 Tomcat 或 Jetty,通过 XML 配置文件或注解来定义 Bean 的配置。然而,在非 Web 的 Java 应用程序,如桌面应用或服务,我们同样可以利用 Spring 的 ...

    springMVC示例

    标签 "java" 暗示了本示例与 Java 编程语言密切相关,"springBean" 指的是 Spring 框架中的依赖注入特性,它允许我们通过配置文件或注解声明 Bean 的实例化和依赖关系。Spring Bean 可以是任何 Java 对象,它们被 ...

    使用servlet和Java Bean访问MySQL的简单实例

    本文将详细介绍如何通过Servlet和Java Bean技术实现对MySQL数据库的基本操作。为了更好地理解本实例的操作流程,我们首先需要搭建一个合适的开发环境。在本示例中,我们将使用以下配置: - **JDK版本**:JDK 5.0 - ...

    spring定义和装配bean详解

    Spring框架的核心是Bean的定义和装配,今天我们将详细介绍Spring中的Bean定义和装配。 一、Bean的定义 在Spring中,Bean是指一个Java对象,它可以是任何类型的对象,如POJO、EJB、Servlet等。Bean可以通过XML文件...

Global site tag (gtag.js) - Google Analytics