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

本文介绍了一种基于Java的非法文字过滤器实现方法,包括创建过滤器类、配置web.xml以及在页面上展示过滤效果的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 步骤
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.youkuaiyun.com/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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值