关于java:BaseServlet-servlet的优化

46次阅读

共计 1936 个字符,预计需要花费 5 分钟才能阅读完成。

BaseServlet ——servlet 的优化

servlet 作用

​ 艰深来讲 servlet 专门用来接管客户端的申请,专门接管客户端的申请数据,而后调用底层 service 解决数据并生成后果

传统的书写 servlet 的办法

​ 从图片中看到,咱们只是有两个类,一个用户类,一个工作类,而性能很是简略,登录注册、增加批改查问工作,而 servlet 的就曾经是五个了,所以当前咱们一个性能一个 servlet,那就会十分冗余,并且用户和工作的 servlet 写在了一起,不好分别什么是什么,加大了前期保护的难度。

优化思路

MVC 三层架构

​ 那咱们能不能设计一个容易治理的办法,便于对立治理呢?

​ 参照咱们 MVC 三层架构中的 service 和 dao 层

​ 咱们来试着和他们一样,一个具体的类用一个对应的 dao 或 service 类来治理。咱们便设计了 BaseServlet。是不是感觉清晰了很多了呢。

​ 而后每一个模块中的性能都形象为一个办法。(图为 UserServlet 中的办法)

​ 而后咱们前端的申请门路这样写

servlet 运行过程

​ 客户端发送申请——init 初始化 servlet——调用 service 办法,自动识别 post 或是 get 申请办法。咱们下面设计了每一个性能都作为一个办法,那咱们要怎么去自动识别是哪一个办法呢?咱们想到了反射。那咱们来联合 service 办法和反射,去革新,让他自动识别是哪一个办法。

优化过程

  1. 原先咱们是间接类继承 HttpServlet,当初咱们多了一层 BaseServlet,那咱们原来的类就要继承 BaseServlet,而后 BaseServlet 去继承 HttpServlet,而后重写外面的 service 办法。
/*BaseSevlet 继承 HttpServlet*/
public class BaseServlet extends HttpServlet {
 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) {
        //1. 先获取申请门路
        String requestUrl = req.getRequestURI();

        //2. 获取申请门路的最初的办法名称(详见上文 url 图片)int index = requestUrl.lastIndexOf('/');
        String methodName = requestUrl.substring(index + 1);

        //3. 获取调用对象的字节码文件
        Class<? extends BaseServlet> clazz = this.getClass();
        try {
            //4. 通过办法名,获取类中的办法。Method method = clazz.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
            //5. 执行办法
            method.invoke(this, req,resp);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();
        }
    }
}
  1. 原来的类继承 BaseServlet
/**
 * @program: BaseServlet
 * @description:
 * @author: stop.yc
 * @create: 2022-04-13 15:42
 **/

//user 下的,* 代表任意
@WebServlet("/user/*")
public class UserServlet extends BaseServlet{

    /**
    * @Description: 登录 servlet
    * @Param: [req, resp]
    * @return: void
    * @Author: stop.yc
    * @Date: 2022/4/13
    */
    public void login(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1. 获取前端数据 (post) 申请体
        BufferedReader reader = req.getReader();
        String userStr = reader.readLine();
          
        //2......
    }
}
  1. 前端申请写法
// 仅是 url 的举例,具体其余代码按照你的代码。axios({
    method: "post",
    url: "http://localhost:8080/qg-engineering-management-system/user/login",
    data: _this.user,
}).then(function (resp) {//。。。}

正文完
 0