学习学习servlet过滤器(javax.servlet.Filter)
Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能。Filter通常封装了一些功能的web组件,过滤器提供了一种面向对象的模块化机制,将任务封装到一个可插入的组件中, Filter组件通过配置文件来声明,并动态的代理。
二、servlet过滤方法过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:
写一个servlet屏蔽负面评论。
1、在web.xml中配置好servlet和filter
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <filter> <filter-name>hello</filter-name> <filter-class>filter.CommentFilter</filter-class> </filter> <filter-mapping> <filter-name>hello</filter-name> <url-pattern>/comment</url-pattern> </filter-mapping> <servlet> <servlet-name>h</servlet-name> <servlet-class>web.CommentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>h</servlet-name> <url-pattern>/comment</url-pattern> </servlet-mapping></web-app>
2、在src/main/java下新建一个包,名为web;并且在web包下面新建一个类,名为CommentServlet;
package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CommentServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf8"); PrintWriter out = response.getWriter(); String str = request.getParameter("comment"); out.println("<h2>您发表的评论内容为:" + str + "</h2>"); out.close(); }}
3、在src/main/java下新建一个包,名为filter;并且在filter包下面新建一个类,名为CommentFilter
package filter;import java.io.IOException;import java.io.PrintWriter;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 CommentFilter implements Filter {private String illegalWord;public void init(FilterConfig filterConfig) throws ServletException { illegalWord = filterConfig.getInitParameter("illegalWord"); System.out.println("过滤器Filter已经开始运行......" + illegalWord);}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); String comment = req.getParameter("comment"); System.out.println(comment); if (comment.indexOf("dam") == -1) { out.println("<h2>以隐藏该评论</h2>"); } else { chain.doFilter(req, resp); }} public void destroy() { System.out.println(); }}
4、在src/main/webapp下面新建一个JSP文件,名为comment.jsp;
<%@ page language="java" contentType="text/html; charset=utf8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">;<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> <title>Insert title here</title> </head> <body> <form action="comment" method="post"> <fieldset> <legend>评论</legend> 请输入评论:<textarea name="comment" ></textarea><br> <input type="submit" value="发表评论"> </fieldset> </form> </body></html>
四、测试
1、在浏览器中输入http://localhost:8089/servlet-test55-filter/comment.jsp ,界面如下:
2、在评论框中输入不含有“dam”的字符串,
点击“发表评论”时,返回结果为
3、在评论框中输入含有“dam”的字符串,
点击“发表评论”,返回的结果为:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。