您的位置:首页 > 其它

过滤器---过滤敏感词汇和长度

2017-05-25 11:45 387 查看
先过滤敏感词汇  再过滤评论长度  双过滤器的使用



结果如下:评论中不允许出现敏感词汇!

代码如下:

comm.jsp

<%@ page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>
<html>
<head>
<meta charset="utf-8" />
<title>过滤敏感词汇</title>
<style type="text/css">
textarea{
width:140px;
height:55px;
vertical-align:middle;
}
</style>
</head>
<body>
<form action="answer.do" method="post">
<fieldset>
<legend>评论</legend>
请输入评论:<textarea name="comm">

</textarea><br>
<input type="submit" value="发表评论"/>
</fieldset>
</form>
</body>
</html>

主程序:
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MainServlet extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//获取请求路径
String path = req.getServletPath();
if("/comm.do".equals(path)){
comm(req,res);
}else if("/answer.do".equals(path)){
answer(req,res);
}
}

protected void comm(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
req.getRequestDispatcher("comm.jsp").forward(req, res);
}

protected void answer(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//接收请求参数
req.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
String comm = req.getParameter("comm").trim();
PrintWriter out = res.getWriter();
out.println("内容为:"+comm);
out.close();
}
}


两个过滤器:
package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CommFilter1 implements javax.servlet.Filter {

private String words;
public void destroy() {

}

//只过滤/answer.do请求
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String s = request.getServletPath();
if(!"/answer.do".equals(s)){
chain.doFilter(request, response);
return;
}

//获取请求参数
String comm = request.getParameter("comm");
if(comm != null && comm.indexOf(words)!= -1){//有敏感词汇
PrintWriter out = response.getWriter();
out.println("评论中不允许出现敏感词汇!");
out.close();
return;
}
chain.doFilter(req, res);
}

public void init(FilterConfig cfg) throws ServletException {
words = cfg.getInitParameter("words");
}

}

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CommFilter2 implements Filter {

private Integer commLength;
public void destroy() {

}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String s = request.getServletPath();
//只过滤/answer.do请求
if(!"/answer.do".equals(s)){
chain.doFilter(request, response);
return;
}
//获取请求参数
String comm = request.getParameter("comm");
if(comm != null && comm.length()>commLength){
PrintWriter out = response.getWriter();
out.println("评论内容过长 !");
out.close();
return;
}
chain.doFilter(request, response);
}

public void init(FilterConfig cfg) throws ServletException {
commLength = Integer.parseInt(cfg.getInitParameter("commLength"));
}

}


配置文件:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>jsp5</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>main</servlet-name>
<servlet-class>web.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- 敏感词汇过滤 -->
<filter>
<filter-name>filter1</filter-name>
<filter-class>web.CommFilter1</filter-class>
<init-param>
<param-name>words</param-name>
<param-value>你妈妈</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

<!-- 评论文字长度过滤 -->
<filter>
<filter-name>filter2</filter-name>
<filter-class>web.CommFilter2</filter-class>
<init-param>
<param-name>commLength</param-name>
<param-value>20</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: