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页面。代码如下:
两条语句的区别可参考:/article/8917780.html
2、Java中与jsp传值例子:
Java中:“
jsp页面中用“
3、在做Servlet类时,若直接在浏览器中实现访问某个Servlet类时,这个 Servlet类必须实现doGet()方法。
4、本次的写出的只是简单的例子,若真要用到项目当中过滤非法文字,还有待改进(本例子只实现对每个请求都调用封装好的过滤方法来过滤文字,若请求多且频繁,过滤过程十分麻烦。很多项目都是要求通过使用Servlet过滤器对一次性所有的请求进行非法过滤的,本例子远未达到)。
三、相关代码
1、WordFilter.jsp
2、web.xml中配置WordFilter
3、message.jsp
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>
相关文章推荐
- iOS—— 秒学远程推送
- c++ primer第五版(中文)习题答案 第十章第六节-特定容器算法
- C语言的编译过程、安装gcc编译器以及设置环境变量
- Scala2.11.7学习笔记(九)文件操作
- android 数据库 SQLiteExpertPers的简单使用
- ocp-520
- ArrayBlockingQueue和LinkedBlockingQueue分析
- Java中可变参数
- ocp-519
- ocp-518
- ocp-517
- linux 常用配置记录
- ocp-516
- Linux文件权限详解
- ocp-515
- ocp-514
- 0-1背包问题
- Java记录 -41- IDE开发工具
- ORA- 12012 : err or on aut o execu te of job ORACLE_OCM. MGMT_CONFIG_JOB_2_1 ORA-29280: inval
- ocp-513