需要完成一个比较晓得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也变得容易了,直接按照一般规则注入就行了
分享到:
相关推荐
- **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...
以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即ApplicationContext,它是管理Bean的核心组件。它负责读取配置文件(如XML或Java配置),创建并初始化Bean,以及维护它们...
在Spring MVC中,控制器接收用户请求,调用业务逻辑(通常由Spring Bean处理),并返回一个模型,该模型随后被渲染为视图。Spring MVC还提供了强大的数据绑定、表单验证和异常处理功能。 在学习Servlet、JSP和...
在Servlet与Spring整合时,首先我们需要创建一个Spring配置文件(如`beans.xml`),在这个文件中定义bean的配置。然后在Web应用的`web.xml`中,通过`ContextLoaderListener`配置Spring上下文,使得在应用启动时...
在`applicationContext.xml`配置文件中,将Filter或Servlet作为bean定义,使其成为Spring管理的一部分。例如: ```xml <bean id="springFilter" class="com.netqin.filter.SpringFilter"> <value>...
下面将介绍四种获取 Spring 里注册 Bean 的方法。 方法一:继承 BaseDispatchAction 这种方法常用于 Struts 框架中。我们可以继承 BaseDispatchAction 类,通过重写其方法来获取 Bean 对象。首先,我们需要在类中...
本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 首先,原生Servlet是Java EE规范的一部分,它提供了一个基础的接口,用于接收和响应HTTP请求...
在本项目"maven+servlet+jsp+bean的demo"中,我们将会探索JavaWeb开发的基本元素,包括Maven构建工具、Servlet、JSP(JavaServer Pages)以及Bean。这个小示例演示了如何在IntelliJ IDEA中创建一个完整的Maven工程,...
3. **创建Spring配置**:在指定的`contextConfigLocation`(例如`spring-servlet.xml`)中,定义Spring的bean,包括控制器、服务层、数据访问层等。 4. **编写Servlet Controller**:在Spring MVC中,Controller...
2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring提供AOP支持,允许开发者定义方法拦截器和切面,实现如日志记录、事务管理等横切关注点。 3. **模型-视图-控制器(Model-View-Controller, MVC)*...
完成后,结果通过Model返回给Controller,Controller再将其封装为视图模型,最后由Spring MVC的ViewResolver解析并展示给用户。 【学习重点】对于初学者来说,理解Servlet的请求响应机制,Hibernate的实体类和映射...
上述代码中,通过`ContextLoaderListener`加载了一个名为`applicationContext.xml`的配置文件,该文件包含了所有Spring Bean的定义。这意味着所有Bean会在应用程序启动时被初始化。 #### 加载顺序总结 根据上述...
1. **Spring配置文件**:通常命名为`applicationContext.xml`,这是Spring的配置中心,定义了bean的创建、装配以及依赖关系。 2. **Servlet配置**:在`web.xml`文件中,你需要配置Spring DispatcherServlet,它是...
在Spring的配置文件中,你需要定义一个`Servlet`实例,然后将其作为一个bean注册到Spring容器中。接着,你需要创建一个`SimpleServletHandlerAdapter`的bean,并通过`handler`属性指定刚刚注册的Servlet。这样,...
1. Spring容器:理解Bean的定义、依赖注入以及自动扫描。 2. Controller:创建Controller类,处理HTTP请求,并通过ModelAndView返回响应。 3. 视图解析:配置视图解析器,如InternalResourceViewResolver,将逻辑...
根据提供的文件信息,我们可以总结出以下关于Spring框架中获取Bean的几种方法的相关知识点: ### Spring框架简介 Spring框架是一款开源的轻量级Java EE应用程序开发框架,它通过提供一系列强大的功能来简化Java...
在 Web 应用中,Spring 通常作为 Servlet 容器的一部分工作,例如 Tomcat 或 Jetty,通过 XML 配置文件或注解来定义 Bean 的配置。然而,在非 Web 的 Java 应用程序,如桌面应用或服务,我们同样可以利用 Spring 的 ...
标签 "java" 暗示了本示例与 Java 编程语言密切相关,"springBean" 指的是 Spring 框架中的依赖注入特性,它允许我们通过配置文件或注解声明 Bean 的实例化和依赖关系。Spring Bean 可以是任何 Java 对象,它们被 ...
本文将详细介绍如何通过Servlet和Java Bean技术实现对MySQL数据库的基本操作。为了更好地理解本实例的操作流程,我们首先需要搭建一个合适的开发环境。在本示例中,我们将使用以下配置: - **JDK版本**:JDK 5.0 - ...
Spring框架的核心是Bean的定义和装配,今天我们将详细介绍Spring中的Bean定义和装配。 一、Bean的定义 在Spring中,Bean是指一个Java对象,它可以是任何类型的对象,如POJO、EJB、Servlet等。Bean可以通过XML文件...