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

来源:互联网 发布:中国移动优化工作 编辑:程序博客网 时间:2024/05/22 12:07

一、 步骤
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");

两条语句的区别可参考:http://blog.csdn.net/xiangsuixinsheng/article/details/6594776
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>
0 0
原创粉丝点击