完整代码
时间: 2023-07-02 17:19:59 浏览: 44
以下是一个完整的Servlet脏话过滤器示例,包括了过滤器和Servlet的代码:
DirtyWordsFilter.java
```java
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;
@WebFilter(filterName = "DirtyWordsFilter", urlPatterns = {"/*"})
public class DirtyWordsFilter implements Filter {
private static final String[] DIRTY_WORDS = {"xxx", "yyy", "zzz"};
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
if (requestURI != null && !requestURI.endsWith(".css") && !requestURI.endsWith(".js")) { // 排除静态资源
String message = httpRequest.getParameter("message");
if (message != null) {
for (String dirtyWord : DIRTY_WORDS) {
message = message.replaceAll(dirtyWord, "***");
}
request.setAttribute("message", message); // 将过滤后的消息存入request中
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
```
FilterTestServlet.java
```java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "FilterTestServlet", urlPatterns = {"/test"})
public class FilterTestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取过滤器过滤后的消息
String filteredMessage = (String) request.getAttribute("message");
if (filteredMessage != null) {
// 将过滤后的消息返回到页面上显示
out.write("<html><body>");
out.write("<h1>过滤后的消息:</h1>");
out.write("<p>" + filteredMessage + "</p>");
out.write("</body></html>");
} else {
// 如果没有过滤后的消息,则返回一个输入框和一个提交按钮
out.write("<html><body>");
out.write("<form method='post'>");
out.write("<input type='text' name='message' />");
out.write("<input type='submit' value='提交' />");
out.write("</form>");
out.write("</body></html>");
}
}
}
```
在以上示例中,当用户访问/test路径时,FilterTestServlet会响应一个页面,页面上包含一个输入框和一个提交按钮。当用户提交消息时,DirtyWordsFilter会拦截请求并过滤消息,然后将过滤后的消息存入request中。最后,FilterTestServlet会获取过滤器过滤后的消息,并将其返回到页面上显示。