天天看點

fitter 過濾器,髒話過濾。評論延遲問題

做了一個filter過濾器,每次評論,将值存入session,然後跳轉頁面過過濾器,判斷是否髒話,但是每次評論都延遲了,就是說這次評論,評出來上一次的評論内容。

錯誤代碼如下

<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2020/11/2
  Time: 15:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>成功</h1>
<form action="word" method="post">
    <p>不能說  日   (日是髒話)</p><br/>

    發表評論<input type="text" name="word"><br/>

    <input type="submit" value="發表">
</form>
</body>
</html>

           
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class AdminFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String requestURI = httpServletRequest.getRequestURI();
        HttpSession session = httpServletRequest.getSession();
        Object user = session.getAttribute("user");
        Object userword = session.getAttribute("userword");
        servletRequest.setCharacterEncoding("utf-8");

        //髒話辨識
        if (userword != null)) {
            if ("日".equals(userword.toString())) {
                System.out.println("髒話辨識啟動");
//                httpServletRequest.getSession().setAttribute("userword",null);
                servletRequest.getRequestDispatcher("/wordfail.jsp").forward(servletRequest, servletResponse);
            } else {
//                httpServletRequest.getSession().setAttribute("userword",null);
                servletRequest.getRequestDispatcher("/wordsuccess.jsp").forward(servletRequest, servletResponse);
            }
        }
        //是否登入過濾
        if (requestURI.endsWith("/") || user != null || requestURI.endsWith("/index.jsp") || requestURI.endsWith("/login")) {
            System.out.println("11111111");

            filterChain.doFilter(servletRequest, servletResponse);
        } else {

            servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest, servletResponse);
        }

    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }


}

           
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class word extends HttpServlet {
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


            String userword=req.getParameter("word");



        req.getSession().setAttribute("userword",userword);
        req.getRequestDispatcher("/wordsuccess.jsp").forward(req,resp);
//    resp.sendRedirect("index.jsp");
    }
}

           

這是因為,過濾器為排除word類頁面網址,這樣每次評論完點發表,送出給/word都會再次進入過濾器,又做一次判斷發表。

是以将/word加入過濾器剔除

但是這樣就變成每次直接跳轉成功

這是因為

重點!!!!

我用的方法是請求轉發,是以網址不改變,是以被過濾器剔除了。

是以将方法改為重定向

問題解決,完美