使一个 Servlet 能接收并处理多个请求

前言

当浏览器发送⼀次请求到服务器时,Servlet容器会根据请求的url-pattern找到对应的Servlet类,执⾏对应的doPost或doGet⽅法,最后将响 应信息返回给浏览器。这种情况下,⼀个具体的Servlet类只能处理对应的web.xml中配置的url-pattern请求,⼀个Servlet类,⼀对配置信息。如果业务扩展,需要三个Servlet来处理请求,就需要再加上两个具体的Servlet类,两对配置信息,一方面每新增一个接口都需要增加大量的代码,另一方面同一个Model的不同操作方法非常分散; 针对上面提到的问题,我们能不能实现⼀个Servlet处理多个请求呢?如SpringMVC的Controller。

Servlet 的抽取

使一个 servlet 能接收并处理多个请求

  1. 前端访问的时候, 在请求参数中添加 method 属性, 其中值是将要访问的方法
  2. 在 BaseServlet 中利用反射机制, 根据 method 的值, 调用对应的方法
public class BaseServlet extends HttpServlet {

 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  
  req.setCharacterEncoding("UTF-8");
  
  try {
   //1、获得请求的method的名称
   String methodName = req.getParameter("method");
   //2、获得当前被访问的对象的字节码对象
   Class clazz = this.getClass();//ProductServlet.class ---- UserServlet.class
   //3、获得当前字节码对象的中的指定方法
   Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
   //4、执行相应功能方法
   method.invoke(this, req,resp);
   
  } catch (Exception e) {
   e.printStackTrace();
  }
  
 }
}
  1. 抽取完成后, 业务 Servlet 的书写方式变成:

    public class PrdocutServlet extends BaseServlet {

     //删除一个商品
     public void delProFromCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 删除一个商品的逻辑
     }

     //根据商品的类别获得商品的列表
     public void productList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 逻辑代码
     }

    }
    1. 继承 BaseServlet
    2. 实现业务方法


原文始发于微信公众号(灰气球):使一个 Servlet 能接收并处理多个请求

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/41872.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!