做了一个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加入过滤器剔除
但是这样就变成每次直接跳转成功
这是因为
重点!!!!
我用的方法是请求转发,所以网址不改变,所以被过滤器剔除了。
所以将方法改为重定向
问题解决,完美