BaseServlet,让一个Servlet可以同时处理多个请求

发布时间:2017-3-26 13:29:59 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"BaseServlet,让一个Servlet可以同时处理多个请求",主要涉及到BaseServlet,让一个Servlet可以同时处理多个请求方面的内容,对于BaseServlet,让一个Servlet可以同时处理多个请求感兴趣的同学可以参考一下。

普通的Servlet一个Servlet只能处理一个请求,可以仿Struts1中的DispatchAction让一个Servlet处理多个请求。 做法是: 让普通处理请求的Servlet继承父类的BaseServlet,然后让父类单独继承HttpServlet.然后再在处理请求的servlet中定义自己的处理请求的方法,但方法中必须包HttpServletRequest, HttpServletResponse对象参数(方法名可以随意)。 如: public void login(HttpServletRequest request,HttpServletResponse response) throws ServletException , IOException { .... } servlet的生命周期是: 调用构造方法实例化该servlet----------调用有参的init()方法(会默认调用无参的init()方法)---------将请求交给无Http协议的service()方法----------将请求交给有Http协议的service()方法--------根据提交数据的方式的不同(post/get等)调用相应的doGet()/doPost()方法---------当重新加载此servlet实例(当servlet中的内容发生改变时,就会自动加载重新部署)时调用destory()方法  或者重新发生请求时又会重新调用对应的doGet()/doPost()方法。 根据servlet的生命周期,加上继承的关系,处理请求的serlvet会先调用父类BaseServlet的init()方法,再调用service()方法。 然后我们只需重写父类BaseServlet中的service()方法,在service方法中根据参数名的不同利用反射机制调用请求servlet中的不同方法。 package com.xuzengqiang.tour.common.web.servlet; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.xuzengqiang.tour.common.utils.StringUtils; import com.xuzengqiang.tour.common.web.framework.BeanFactory; import com.xuzengqiang.tour.service.user.UserService; @SuppressWarnings("all") public class BaseServlet extends HttpServlet { @Override public void init() throws ServletException { //可以做一些初始化的工作 } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取参数方法名 String action = request.getParameter("action"); try { if (StringUtils.isNotBlank(action)) { //通过参数名获取对应请求servlet中的方法 Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this, request, response); } else { // 否则默认查所有 unspecified(request, response); } } catch (Exception e) { e.printStackTrace(); } } private void unspecified(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Method method = this.getClass().getDeclaredMethod("list", HttpServletRequest.class, HttpServletResponse.class); method.invoke(this, request, response); } catch (Exception e) { e.printStackTrace(); } } }

上一篇:
下一篇:趋势科技年度巨献 《2020》反黑大片

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款