Filter过滤器及HttpServletRequestWrapper使用
来源:互联网 发布:弱电网络系统图 编辑:程序博客网 时间:2024/05/16 05:49
Filter过滤器是一种比较实用的东西,可以过滤不良信息,对提交来的信息进行处理。是Request和Response之间的传输纽带。
具有重要作用,下面用一个Filter过滤器的程序来熟悉过滤器的使用。在提交的数据信息中,有一些信息需要过滤掉。例如,
一些暴力情色信息,我们可以通过过滤器来过滤掉这些信息,过滤器功能代码如下:
public class WordFilter implements Filter {// 非法字符数组private String words[];// 实现Filter接口init()方法@Overridepublic void init(FilterConfig Config) throws ServletException {// 初始化非法字符数组words = new String[]{"色情","暴力"};}// 实现Filter接口doFilter()方法@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { // 设置request字符编码 request.setCharacterEncoding(“gbk”); // 将request转换为重写后的Request对象 request = new Request((HttpServletRequest) request); // 设置response字符编码 response.setContentType("text/html; charset=gbk"); }chain.doFilter(request, response);}// 实现Filter接口destroy()方法@Overridepublic void destroy() {this.words = null;}class Request extends HttpServletRequestWrapper{// 构造方法public Request(HttpServletRequest request) {super(request);}// 重写getParameter()方法@Overridepublic String getParameter(String name) {// 返回过滤后的参数值return filter(super.getRequest().getParameter(name));}// 重写getParameterValues()方法@Overridepublic String[] getParameterValues(String name) {// 获取所有参数值String[] values = super.getRequest().getParameterValues(name);// 通过循环对所有参数值进行过滤for (int i = 0; i < values.length; i++) {values[i] = filter(values[i]);}// 返回过滤后的参数值return values;}}/*过滤非法字符 */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;}}
这里采用了HttpServletRequestWrapper这个类,这个类是HttpServletRequest的包装类,对应的HttpServletResponseWrapper是HttpServletResponse的包装类。在上面的代码中,Request类继承了HttpServletRequestWrapper类,重写了得到参数的方法,在重写的方法中调用自己写filter(String name)方法。从而可以实现过滤作用,当转发request对象到servlet时候,使用方法request.getParameter(name)来得到提交的参数值,从而调用了我们自己所写的方法,将不良信息进行过滤,从而达到我们的需求,Servlet代码如下:
public class MessageServlet extends HttpServlet {private static final long serialVersionUID = 6536812362207677194L;public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取标题String title = request.getParameter("title");// 获取内容String content = request.getParameter("content");// 将标题放置到request中request.setAttribute("title", title);// 将内容放置到request中request.setAttribute("content", content);// 转发到result.jsp页面request.getRequestDispatcher("index.jsp").forward(request, response);//forward转发是一次请求request值存在,sendRedirect重定向是两次请求两次回复request里面的参数全部丢失//转发到指定页面并且包括原有参数内容}}
最后将过滤后数据提交服务器,服务器处理过后再将结果通过JSP表现层显示给用户。
部分JSP代码如下:
<%
String tt = (String)request.getAttribute("title");
String ct = (String)request.getAttribute("content");
if(tt !=null && !tt.isEmpty()){
out.println( tt );
}
if(ct !=null && !ct.isEmpty()){
out.println( ct );
}
%>
<form action="MessageServlet" method="post">
<span class="tt">意见反馈</span>
<table border="0" width="500" align="center">
<tr>
<td align="right">标 题:</td>
<td><input type="text" name="title" size="30"></td>
</tr>
<tr>
<td align="right">内 容:</td>
<td>
<textarea rows="5" cols="40" name="content"></textarea>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="提 交">
</td>
</tr>
</table>
</form>
- Filter过滤器及HttpServletRequestWrapper使用
- HttpServletRequestWrapper,HttpServletResponseWrapper在过滤器Filter中的使用
- Filter过滤器的使用
- filter过滤器的使用
- filter过滤器的使用
- filter过滤器的使用
- Java Filter过滤器使用
- filter[过滤器]使用大全
- filter[过滤器]使用大全
- Servlet过滤器Filter使用
- Filter过滤器的使用
- 过滤器Filter使用
- 过滤器filter的使用
- Servlet过滤器Filter使用 .
- Filter过滤器的使用
- Filter过滤器使用
- 过滤器的使用-Filter
- AngularJs基础——过滤器filter及自定义过滤器filter
- Phoenix 导出csv文件
- 动态规划—Problem O
- Android 异步加载图像优化,如:引入线程池、引入缓存
- scale data:线性空间映射
- RMAN备份动态性能视图 V$BACKUP_CORRUPTION
- Filter过滤器及HttpServletRequestWrapper使用
- Linux添加FTP用户并设置权限
- 全志A20 android4.4双屏异显 双屏同显终于可以了
- Move Zeroes
- MWC-MultiWii.cpp主程序理解
- 内存恶鬼drawRect - 谈画图功能的内存优化
- Android Volley完全解析(一),初识Volley的基本用法
- EventSystem
- 学习angularjs遇到的问题