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

来源:互联网 发布:网络诈骗 编辑:程序博客网 时间:2024/06/06 01:20

工作中,有时候可能会直接使用到servlet,这样,和spring整合起来,就有点麻烦,还要写个spring的代理,比较麻烦,下面这个servlet,就不需要了。如果继承了这个servlet,那么,他的子类就会具有自动装配的功能了。代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.io.IOException;  
  2.   
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.springframework.beans.factory.config.AutowireCapableBeanFactory;  
  9. import org.springframework.web.context.WebApplicationContext;  
  10. import org.springframework.web.context.support.WebApplicationContextUtils;  
  11.   
  12. public abstract class AutowiredHttpServlet extends HttpServlet {  
  13.   
  14.     private static final long serialVersionUID = -2000909174467653847L;  
  15.   
  16.     public void init() throws ServletException {  
  17.         super.init();  
  18.         WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());  
  19.         AutowireCapableBeanFactory factory = ctx.getAutowireCapableBeanFactory();  
  20.         factory.autowireBean(this);  
  21.     }  
  22.       
  23.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{  
  24.         servlet(request, response);  
  25.     }  
  26.       
  27.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{  
  28.         servlet(request, response);  
  29.     }  
  30.       
  31.     /** 
  32.      * 子类实现该方法,进行Servlet Post和Get请求服务。 
  33.      * @param request HttpServletRequest实例 
  34.      * @param response HttpServletResponse实例 
  35.      * @throws IOException 
  36.      * @throws ServletException 
  37.      * @author yinlei 
  38.      * date 2011-8-9 下午7:15:41 
  39.      */  
  40.     public abstract void servlet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;  
  41.       
  42.     /** 
  43.      * 直接输出json。 
  44.      */  
  45.     public void renderJson(HttpServletResponse response, String json) {  
  46.         response(response, json, "application/json;charset=UTF-8");  
  47.     }  
  48.   
  49.     /** 
  50.      * 直接输出纯HTML。 
  51.      */  
  52.     public void renderHtml(HttpServletResponse response, String text) {  
  53.         response(response, text, "text/html;charset=UTF-8");  
  54.     }  
  55.   
  56.     /** 
  57.      * 直接输出纯字符串。 
  58.      */  
  59.     public void renderText(HttpServletResponse response, String text) {  
  60.         response(response, text, "text/plain;charset=UTF-8");  
  61.     }  
  62.       
  63.     public void response(HttpServletResponse response, String text, String contentType) {  
  64.         try {  
  65.             response.setContentType(contentType);  
  66.             response.getWriter().write(text);  
  67.         } catch (IOException e) {  
  68.               
  69.         }  
  70.     }  
  71. }  

这样以来,他的子类,可以直接像struts2和spring mvc一样,直接将service bean都注入进来了。例如:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class DemandServlet extends AutowiredHttpServlet {  
  2.     private static final long serialVersionUID = 1L;  
  3.     private static final Logger logger = LoggerFactory.getLogger(DemandServlet.class);  
  4.       
  5.     @Autowired  
  6.     private SupplyDemandService supplyDemandService;  
  7.     @Autowired  
  8.     private UserMemberService userMemberService;  
  9.       
  10.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  11.         servlet(request, response);  
  12.     }  
  13.       
  14.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  15.         servlet(request, response);  
  16.     }  
  17.       
  18.     @Override  
  19.     public void servlet(HttpServletRequest request, HttpServletResponse response)  
  20.             throws IOException, ServletException {  
  21.         String type = request.getParameter("type");  
  22.         String userId = request.getParameter("userId");  
  23.         if (type == null || type.equals("init")) {// 去发布,需要验证用户的信息  
  24.             //去发布求购,验证用户信息是否完整  
  25.             Member member = userMemberService.get(userId);  
  26.               
  27.             if (member == null || member.getSopenid() == null) {// 验证没有通过,让用户完善信息  
  28.                   
  29.                 request.getRequestDispatcher("weixin/binding.jsp").forward(request, response);  
  30.             } else {// 已经验证通过,跳转到发布页面  
  31.                   
  32.                 request.getRequestDispatcher("weixin/demand.jsp").forward(request, response);  
  33.             }  
  34.               
  35.         } else if (type.equals("publish")) {// 发布  
  36.             //绑定数据  
  37.             SupplyDemandInf demand = binder(request);  
  38.             supplyDemandService.saveOrUpdate(demand);  
  39.               
  40.             request.getRequestDispatcher("weixin/demandPublishSuccess.jsp").forward(request, response);  
  41.         }  
  42.           
  43.     }  
  44. }  

0 0
原创粉丝点击