本文参与思维科技论文征集,正在阅读的朋友欢迎加入。前言HttpServletService方法提供的doGet()和doPost()方法只能根据请求方法进行分发。假设我们现在有多个服务(添加、删除、查询……),每个服务都要对应一个Servlet(AddServlet、DeleteServlet、SelectServlet),管理起来很不方便。我们希望用一个Servlet和一个实体来处理它的业务。比如BrandServlet处理Brand相关的业务(增删改查),UserServlet处理User相关的业务。下面是我们的解决方案。有两种方案。一:访问时携带参数,然后通过request.getParameter获取参数,通过if判断分发,如:访问链接为http://localhost/BrandServlet?method=add,然后通过request.getParameter("方法")获取add参数,然后通过if判断,调用add()方法。方案二:重写HttpServlet的Service方法,自定义分发规则,直接通过访问路径进行业务处理自定义BaseServlet新建BaseServlet是第二种方法,继承HttpServlet,重写Service方法包com.ruochen.web.servlet;导入javax.servlet.ServletException;导入javax.servlet.http.HttpServlet;导入javax.servlet.http.HttpServletRequest;导入javax.servlet.http.HttpServletResponse;导入java.io.IOException;导入java.lang.reflect.Method;/***根据请求最后的路径替换HttpServlet并分发方法*/publicclassBaseServletextendsHttpServlet{//请求最多的后面的路径用于方法分发@Overrideprotectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//1.获取请求路径"/brand-case/brand/selectAll"Stringuri=req.getRequestURI();//2.获取最后一个路径,方法名intindex=uri.lastIndexOf("/");StringmethodName=uri.substring(index+1);//selectAll//3.Execute方法//3.1获取BrandServlet/UserServlet字节码对象Class//谁调用我(this所在的方法),我(this)代表谁//System.out.println(this);//BrandServlet类cls=this.getClass();//3.2获取方法方法对象,执行方法try{Methodmethod=cls.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);method.invoke(this,req,resp);}catch(Exceptione){e.printStackTrace();}}}然后我们写一个UserServlet来测试它。UserServlet可以直接继承BaseServlet类并封装com.ruochen.web.servlet;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;@WebServlet("/user/*")publicclassUserServletextendsBaseServlet{publicvoidselectAll(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{System.out.println("userselectAll...");请求,HttpServletResponse响应)抛出ServletException,IOException{System.out.println(“用户添加...”);}}在浏览器中访问/user/selectAll,可以看到控制台输出了userselectAll...在浏览器中访问/user/add,可以看到控制台输出了useradd...这样我们就可以分发了根据访问路径
