BaseServlet思想(Struts2的思想), BaseServlet,让一个Servlet可以同时处理多个请求

普通的Servlet一个Servlet只能处理一个请求,可以仿Struts1中的DispatchAction让一个Servlet处理多个请求。

做法是:

让普通处理请求的Servlet继承父类的BaseServlet,然后让父类单独继承HttpServlet.然后再在处理请求的servlet中定义自己的处理请求的方法,但方法中必须包HttpServletRequest,

HttpServletResponse对象参数(方法名可以随意)。

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();  
            }  
        }  
      
    }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值