sjk1996 2019-04-12 11:09 采纳率: 0%
浏览 448

java过滤器问题, 求大佬指点

我在用过滤器实现一个网页防篡改系统:

我在过滤器中对网页实现了修改, 然后把请求交给 servlet 返回网页, 但是第一次返回的 jsp 网页还是修改之前的网页, 需要再次刷新浏览器才能显示修改后的网页。

我应该如何做到第一次返回的网页就是修改后的网页??

过滤器代码:

//摘要值不相等, 说明网页被修改, 需恢复 
System.out.println("=====恢复中"); 
//恢复网页, 就是把修改后的网页文件删除, 再把备份文件复制到网页目录 
WebpageUtil.retrievePage(url); chain.doFilter(request, response)

servlet 代码:

request.getRequestDispatcher("/WEB-INF/views/page2.jsp").forward(request, response);

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 21:16
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在你的过滤器中,你可以使用ServletContext来获取和设置一些状态信息。在这个例子中,你可以检查当前的页面是否已经被修改,并且如果被修改了,就重定向到一个新的URL(或者执行其他操作)。然后,当你从Servlet调用你的过滤器时,你应该将新的页面作为参数传递给它。这样,每次你请求这个页面时,它都会重新加载并显示最新的内容。

    以下是一个简单的示例:

    1. 在过滤器类中,你可以添加如下方法以检查页面是否已被修改:

      private boolean isPageModified(HttpServletRequest request) {
          // 获取页面的URL
          String url = request.getRequestURL().toString();
      
          // 如果URL与原始URL相同,则表示没有修改
          if (url.equals(pageUrl)) {
              return false;
          }
      
          // 否则,页面被修改了
          return true;
      }
      
    2. 在过滤器中,当收到请求时,首先检查是否有已修改的页面。如果没有,那么就直接处理正常的请求。如果有,那么就返回一个新的页面,而不是修改原来的页面。

    3. 在Servlet中,你需要在转发之前调用过滤器的方法,以确保页面已经更新:

      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          super.doPost(request, response);
      
          // 检查页面是否已被修改
          if (!isPageModified(request)) {
              // 页面没有被修改,所以正常处理请求
              // ...
          } else {
              // 页面已被修改,所以返回新页面
              request.setAttribute("newPage", "/path/to/new_page.jsp");
              forwardToNewPage(request, response);
          }
      }
      
    4. 在过滤器中,当收到请求时,首先检查是否有已修改的页面。如果没有,那么就直接处理正常的请求。如果有,那么就返回一个新的页面,而不是修改原来的页面。

    5. 在Servlet中,你需要在转发之前调用过滤器的方法,以确保页面已经更新:

      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          super.doPost(request, response);
      
          // 检查页面是否已被修改
          if (!isPageModified(request)) {
              // 页面没有被修改,所以正常处理请求
              // ...
          } else {
              // 页面已被修改,所以返回新页面
              request.setAttribute("newPage", "/path/to/new_page.jsp");
              forwardToNewPage(request, response);
          }
      }
      
    6. 在过滤器中,当收到请求时,首先检查是否有已修改的页面。如果没有,那么就直接处理正常的请求。如果有,那么就返回一个新的页面,而不是修改原来的页面。

    7. 在Servlet中,你需要在转发之前调用过滤器的方法,以确保页面已经更新:

      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          super.doPost(request, response);
      
          // 检查页面是否已被修改
          if (!isPageModified(request)) {
              // 页面没有被修改,所以正常处理请求
              // ...
          } else {
              // 页面已被修改,所以返回新页面
              request.setAttribute("newPage", "/path/to/new_page.jsp");
              forwardToNewPage(request, response);
          }
      }
      
    8. 在过滤器中,当收到请求时,首先检查是否有已修改的页面。如果没有,那么就直接处理正常的请求。如果有,那么就返回一个新的页面,而不是修改原来的页面。

    9. 在Servlet中,你需要在转发之前调用过滤器的方法,以确保页面已经更新:

      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          super.doPost(request, response);
      
          // 检查页面是否已被修改
          if (!isPageModified(request)) {
              // 页面没有被修改,所以正常处理请求
              // ...
          } else {
              // 页面已被修改,所以返回新页面
              request.setAttribute("newPage", "/path/to/new_page.jsp");
              forwardToNewPage(request, response);
          }
      }
      
    10. 在过滤器中,当收到请求时,首先检查是否有已修改的页面。如果没有,那么就直接处理正常的请求。如果有,那么就返回一个新的页面,而不是修改原来的页面。

    11. 在Servlet中,你需要在转发之前调用过滤器的方法,以确保页面已经更新:

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        super.doPost(request, response);
    
        // 检查页面是否已被修改
        if (!isPageModified(request)) {
            // 页面没有被修改,所以正常处理请求
            // ...
        } else {
            // 页面已被修改,所以返回新页面
            request.setAttribute("newPage", "/path/to/new_page.jsp");
            forwardToNewPage(request, response);
        }
    }
    

    这应该解决了你的问题,让你的页面可以在首次请求时显示修改后的版本。

    评论

报告相同问题?