您的位置:首页 > 其它

Servlet学习笔记--用Filter实现过滤非法文字

2015-10-19 22:35 429 查看
一、 步骤

1、创建名为WordFilter类,实现Filter接口。

2、WordFilter类:实现Filter接口中的init()方法、doFilter()方法(在此获取页面提交的内容)、destroy()方法。

3、WordFilter类:在类中编写filter()方法,对提交的内容逐一过滤。

4、在web.xml中配置过滤器。

5、创建message.jsp页面,显示过滤器效果。

二、体会及收获

1、在java中可用代码控制跳转到相关的jsp页面。代码如下:

request.getRequestDispatcher("message.jsp").forward(request, response);
//或者:response.sendRedirect("message.jsp");


两条语句的区别可参考:/article/8917780.html

2、Java中与jsp传值例子:

Java中:“
request.getParameter("title")


jsp页面中用“
<input type="text" name="title" />


3、在做Servlet类时,若直接在浏览器中实现访问某个Servlet类时,这个 Servlet类必须实现doGet()方法。

4、本次的写出的只是简单的例子,若真要用到项目当中过滤非法文字,还有待改进(本例子只实现对每个请求都调用封装好的过滤方法来过滤文字,若请求多且频繁,过滤过程十分麻烦。很多项目都是要求通过使用Servlet过滤器对一次性所有的请求进行非法过滤的,本例子远未达到)。

三、相关代码

1、WordFilter.jsp

package com.code;

import java.io.IOException;

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.HttpServletRequestWrapper;

//非法文字过滤器
public class WordFilter implements Filter {
private String words[];// 非法字符数组,也可以这种形式:List<String> unString;

@Override
public void init(FilterConfig filterConfig) throws ServletException {// 实现Filter接口的初始化init()方法
words = new String[] { "滚蛋", "混蛋", "funk" };// 初始化非法数组
}

@Override
public void destroy() {
this.words = null;
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");// 设置request的编码
response.setContentType("text/html;charset=utf-8");// 设置response的编码。若换成response.setContentType("utf-8"),则从Servlet中传到jsp的中文会乱码
String t = request.getParameter("title");//获取jsp提交的参数“title”的值
String c = request.getParameter("content");//获取jsp提交的参数“content”的值
request.setAttribute("title", filter(t));//用filter()过滤标题,并放回到request中
request.setAttribute("content", filter(c));
chain.doFilter(request, response);
}

public String filter(String param) {// 此方法通过循环非法字符,对提交的内容逐一过滤,将非法字符代替为“* * *”
try {
if (words != null && words.length > 0) {// 判断非法文字字符是否被初始化
for (int i = 0; i < words.length; i++) {// 循环替换非法字符
if (param.indexOf(words[i]) != -1) {// 判断是否包含非法字符
param = param.replaceAll(words[i], "* * *");// 替换非法文字
}
}
}
} catch (Exception e) {
e.printStackTrace();
}

return param;
}
}


2、web.xml中配置WordFilter

<filter>
<filter-name>WordFilter</filter-name>
<filter-class>com.code.WordFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WordFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


3、message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setCharacterEncoding("utf-8");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<%
String title = (String)request.getAttribute("title");
String content = (String)request.getAttribute("content");
if(title != null && !title.isEmpty()){
out.println("<p align='center'>"+"title : "+title+"</p>");
}
if(content != null && !content.isEmpty()){
out.println("<p align='center'>"+"content : "+content+"</p>");
}
%>
<body>

<form method="post" onsubmit="return message(this);">
<table align="center">
<tr>
<td>title</td>
<td><input type="text" name="title" /></td>
</tr>
<tr>
<td>content</td>
<td><input type="text" name="content" /></td>
</tr>
<tr>
<td><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: