Spring+Servlet

转载 2013年12月03日 13:53:08
  1. 在实际开发中我们需要用到Spring和Servlet这样的组合(比如写一个小项目啥的)下面我来整理一下我我的整合:  

第一步:在web.xml中注册Spring的监听器

这时我们在Web项目中添加Spring的第一步(当然肯定要添加Spring所需要的Jar包啦)

  1. <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.       
  8.     <!-- Spring -->  
  9.     <context-param>  
  10.         <param-name>contextConfigLocation</param-name>  
  11.         <param-value>  
  12.             /WEB-INF/classes/applicationContext.xml  
  13.         </param-value>  
  14.     </context-param>  
  15.     <listener>  
  16.         <listener-class>  
  17.             org.springframework.web.context.ContextLoaderListener  
  18.         </listener-class>  
  19.     </listener>  
  20.    
  21.   </servlet-mapping>  
  22.       
  23.    <welcome-file-list>  
  24.      <welcome-file>index.jsp</welcome-file>  
  25.    </welcome-file-list>  
  26. </web-app></span>  

第二步:编写一个管理Servlet的类

这个类主要是将Servlet和Spring中的Bean结合起来,方便Spring对Servlet进行管理,起到一个中转的作用

  1. package com.xwl.estore.servlet;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.GenericServlet;  
  6. import javax.servlet.Servlet;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10.   
  11. import org.springframework.web.context.WebApplicationContext;  
  12. import org.springframework.web.context.support.WebApplicationContextUtils;  
  13.   
  14. @SuppressWarnings("serial")  
  15. /** 
  16.  * 我们自己实现的一个代理类用于将Servlet转为Spring管理的Servlet Bean 
  17.  */  
  18. public class ServletToBeanProxy extends GenericServlet {  
  19.   
  20.     private String targetBean;//当前客户端请求的Servlet名字  
  21.     private Servlet proxy;//代理Servlet  
  22.       
  23.     @Override  
  24.     public void init() throws ServletException {  
  25.         super.init();  
  26.         WebApplicationContext wac =   
  27.             WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); //初始化Spring容器  
  28.         this.targetBean = getServletName();  
  29.         this.proxy = (Servlet) wac.getBean(targetBean);//调用ServletBean  
  30.         proxy.init(getServletConfig());//调用初始化方法将ServletConfig传给Bean  
  31.     }  
  32.   
  33.     @Override  
  34.     public void service(ServletRequest arg0, ServletResponse arg1)  
  35.             throws ServletException, IOException {  
  36.         proxy.service(arg0, arg1);//在service方法中调用bean的service方法,servlet会根据客户的请求去调用相应的请求方法(Get/Post)  
  37.     }  
  38. }  

第二步:在web.xml中注册Servlet

注意这里的Servlet是有规范的一定要遵循

 1、<servlet-name>的名字必须是Spring容器中ServletBean的id

 2、<servlet-class>必须是上面写的代理类的全路径com.xwl.estore.servlet.ServletToBeanProxy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.       
  8.     <!-- Spring -->  
  9.     <context-param>  
  10.         <param-name>contextConfigLocation</param-name>  
  11.         <param-value>  
  12.             /WEB-INF/classes/applicationContext.xml  
  13.         </param-value>  
  14.     </context-param>  
  15.     <listener>  
  16.         <listener-class>  
  17.             org.springframework.web.context.ContextLoaderListener  
  18.         </listener-class>  
  19.     </listener>  
  20.       
  21.     <!-- Servlet -->  
  22.   <servlet>  
  23.     <servlet-name>helloServlet</servlet-name>  
  24.     <servlet-class>com.xwl.estore.servlet.ServletToBeanProxy</servlet-class>  
  25.   </servlet>  
  26.   
  27.   <servlet-mapping>  
  28.     <servlet-name>helloServlet</servlet-name>  
  29.     <url-pattern>/HelloServlet</url-pattern>  
  30.   </servlet-mapping>  
  31.       
  32.    <welcome-file-list>  
  33.      <welcome-file>index.jsp</welcome-file>  
  34.    </welcome-file-list>  
  35. </web-app>  

第三步:编写ServletBean(这也是一个Servlet要继承HttpServlet)

  1. package com.xwl.estore.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.annotation.Resource;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.springframework.context.annotation.Scope;  
  13. import org.springframework.stereotype.Controller;  
  14.   
  15. import com.xwl.estore.service.UserService;  
  16.   
  17. @SuppressWarnings("serial")  
  18. @Controller  
  19. @Scope("prototype")  
  20. public class HelloServlet extends HttpServlet {  
  21.   
  22.     private UserService userService;  
  23.       
  24.     @Resource  
  25.     public void setUserService(UserService userService) {  
  26.         this.userService = userService;  
  27.     }  
  28.   
  29.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  30.             throws ServletException, IOException {  
  31.         System.out.println("Get");  
  32.         PrintWriter out = response.getWriter();  
  33.         out.println(userService.sayHello("Hello,Spring.Servlet"));    
  34.     }  
  35.   
  36.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  37.             throws ServletException, IOException {  
  38.         System.out.println("Post");  
  39.         PrintWriter out = response.getWriter();  
  40.         out.println(userService.sayHello("Hello,Spring.Servlet"));        
  41.     }  
  42.   
  43. }  

第四步:编写Spring配置文件(applicationContext.xml)

  1. <span style="font-size:16px;">这里我用的是annotation的方式</span>  
  1. <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="  
  7.     http://www.springframework.org/schema/beans   
  8.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  9.     http://www.springframework.org/schema/context   
  10.     http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  11.     http://www.springframework.org/schema/tx   
  12.     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
  13.     http://www.springframework.org/schema/aop   
  14.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd     
  15.     ">  
  16.    <context:annotation-config></context:annotation-config>  
  17.    <context:component-scan base-package="com.xwl.estore"></context:component-scan>  
  18.   
  19. </beans></span>  
第五步:进行测试

为了测试我编写了一个Service类(一个接口和一个实现)

下面是Service接口

  1. package com.xwl.estore.service;  
  2.   
  3. public interface UserService {  
  4.   
  5.     public String sayHello(String hello);  
  6. }  
下面是Service接口的实现

  1. package com.xwl.estore.service.impl;  
  2.   
  3. import org.springframework.stereotype.Service;  
  4.   
  5. import com.xwl.estore.service.UserService;  
  6.   
  7. @Service  
  8. public class UserServiceImpl implements UserService {  
  9.   
  10.     public String sayHello(String hello) {  
  11.         return hello;  
  12.     }  
  13. }  
在浏览器中输入Url http://localhost:8080/EStore/HelloServlet 进行访问结果如下:

Hello,Spring.Servlet


说明:Spring整合了Servlet之后我们就可以整合Hibernate,JDBC,和事务管理等,这里只是搭建搭建一个HelloWorld。

相关文章推荐

structs+spring+servlet+Thread

  • 2015年07月24日 14:48
  • 13.88MB
  • 下载

servlet、spring、Struts示例代码

  • 2015年10月26日 22:37
  • 12.28MB
  • 下载

一个和spring整合的依赖注入的servlet,子类可自动装配依赖Bean

工作中,有时候可能会直接使用到servlet,这样,和spring整合起来,就有点麻烦,还要写个spring的代理,比较麻烦,下面这个servlet,就不需要了。如果继承了这个servlet,那么,他...
  • skmbw
  • skmbw
  • 2014年04月08日 17:34
  • 1927

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

web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他们是按照一个什么顺序加载呢? 加载顺序会影响对spring bean 的调用。 ...
  • azhegps
  • azhegps
  • 2016年06月05日 12:52
  • 732

Servlet,JSP和Spring MVC 初学指南源码

  • 2017年11月04日 11:58
  • 66.24MB
  • 下载

【Spring框架】<mvc:default-servlet-handler/>的作用

http://www.cnblogs.com/dflmg/p/6393416.html(原文转载)

Servlet,JSP和Spring MVC 初学指南源码

  • 2016年12月23日 12:29
  • 7.64MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring+Servlet
举报原因:
原因补充:

(最多只允许输入30个字)