南昌大学实验报告
学生姓名: 张 志 煋 学 号: 7101011001 专业班级: 网工121班 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 2015-4-29 实验成绩:
一、实验项目名称
Filter过滤器习题项目
二、实验目的
掌握过滤器的基本原理,熟悉它的功能
三、实验基本原理
本实验主要运用Filter过滤器,在实际开发中,过滤器可以用来多用户进行统一的身份判断、IP访问限制,用户发送请求的字符编码转换、对请求和响应进行加密和解密、记录用户登陆日志等。
四、实验步骤
1、运行My Eclipse,打开已经部署好的的TEST项目;
2、新建一个com.sanqing.filter包,包中编写一个CharFilter.java的过滤器,可过滤
字符“晕”;
3、编写一个CharForm.jsp的文件,供用户输入任意文字;
4、编写一个SendFailure.jsp.jsp的文件;处理用户输入非法字符”晕”的情况。 5、编写一个ShowContent.jsp的文件;显示用户正常输入的字符。 6、新建一个TestCharacter的web工程,部署。
7、新建一个com.sanqing.filter包,包中编写一个CharacterFilter,java的过滤器,实
现字符编码的统一设置;
8、编写一个CharacterForm.jsp的文件,供用户输入任意文字;
9、编写一个ShowContent.jsp的文件;经过滤器的字符编码转换后显示用户输入的
字符。
10、启动Tomcat服务器,打开浏览器,在地址栏中输入对应的URL:测试并观察
结果。
五、实验数据及处理结果
1. com.sanqing.filter.CharFilter.java的程序代码如下:
package com.sanqing.filter;
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;
public class CharFilter implements Filter{ }
//初始化方法
public void init(FilterConfig filterConfig) throws ServletException { System.out.println(\非法文字过滤器初始化\); }
//过滤方法
public void doFilter(ServletRequest req, ServletResponse res, }
//销毁方法
public void destroy() {
System.out.println(\非法文字过滤器销毁\); }
FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; //设置参数编码格式
request.setCharacterEncoding(\);
//接受聊天内容
String charContent = request.getParameter(\); if(charContent != null) { }
if(charContent.indexOf(\晕\)== -1) { chain.doFilter(req, res); } else { }
chain.doFilter(req, res);
request.getRequestDispatcher(\).forward(req,
res);
} else {
2. CharForm.jsp的程序代码如下:
<%@ page language=\ contentType=\%>
<%--表单,提交方式为post-,提交到DoGetDemo--%>
3. SendFailure.jsp.jsp的程序代码如下:
<%@ page language=\ contentType=\%>
发言失败,含有非法文字
4. ShowContent.jsp的程序代码如下:
<%@ page language=\ contentType=\%>
发言成功
用户名:${param.username}
发言内容:${param.charContent}
5. com.sanqing.filter.CharacterFilter,java的程序代码如下:
package com.sanqing.filter;
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.HttpServletResponse;
public class CharacterFilter implements Filter{ }
//初始化方法
public void init(FilterConfig filterConfig) throws ServletException { System.out.println(\字符编码过滤器初始化\); }
//过滤方法
public void doFilter(ServletRequest req, ServletResponse res, }
//销毁方法
public void destroy() {
System.out.println(\字符编码过滤器销毁\); }
FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; //设置参数编码格式
//request.setCharacterEncoding(\ //request.setCharacterEncoding(\ //request.setCharacterEncoding(\ //request.setCharacterEncoding(\ //request.setCharacterEncoding(\ request.setCharacterEncoding(\); chain.doFilter(req, res);
6. CharacterForm.jsp的程序代码如下:
<%@ page language=\ contentType=\%>
<%--表单,提交方式为post-,提交到DoGetDemo--%>
7. ShowContent.jsp的程序代码如下:
<%@ page language=\ contentType=\%>
经过字符编码后的内容:${param.characterContent}
8. 处理结果如下:
(GBK字符编码)
(UTF-8字符编码)
(US-ASCII字符编码)
(ISO-8859-1字符编码)
(gb2312字符编码)
六、实验总结
通过该实验,我基本掌握了Filter过滤器的基础知识,Filter同Servlet类一样,也是一个Java类,所以其添加方式和普通的Java类完全相同。自定义的Filter类必须实现Filter接口中定义的init()方法、doFilter()方法和|destroy()方法。如果要想使定义的Filter起作用,还必须在web.xml文件中配置该Filter。另外,Filter是在服务器启动时就加载并完成初始化,在加载和初始化完成后,再次调用时不再需要进行初始化操作。只有在重新加载项目或者重启服务器后才需要重新初始化。