不要异步使用HttpServletRequest

  1. 为了做链接点击上报,后端简单了实现了一个接口

      @GetMapping("redirect")
      public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String url = request.getParameter("url");
        // 模拟某些业务逻辑开始
        String userId = request.getParameter("user_id");
        System.out.println(userId);
        // 模拟某些业务逻辑结束
        response.sendRedirect(url);
      }
  2. 后来发现如果业务逻辑处理太慢,影响跳转,用户体验不好,于是把业务逻辑改成异步

      @GetMapping("redirect")
      public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String url = request.getParameter("url");
        new Thread(() -> {
          // 模拟某些业务逻辑开始
          String userId = request.getParameter("user_id");
          System.out.println(userId);
          // 模拟某些业务逻辑结束
        }).start();
        response.sendRedirect(url);
      }
  3. 发现在处理业务逻辑时,会偶尔出现取不到参数的情况,原来HttpServletRequest在请求结束后会回收复用....

你可能感兴趣的:(servlet,java,前端)