温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

学习学习servlet过滤器(javax.servlet.Filter)

发布时间:2020-08-03 01:29:09 来源:网络 阅读:1963 作者:Qiu_CJ 栏目:开发技术

学习学习servlet过滤器(javax.servlet.Filter)

一、过滤器

    Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能。Filter通常封装了一些功能的web组件,过滤器提供了一种面向对象的模块化机制,将任务封装到一个可插入的组件中, Filter组件通过配置文件来声明,并动态的代理。

二、servlet过滤方法

    过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

序号 方法 描述
1 public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
2 public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
3 public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

三、写servlet过滤器

    写一个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 ,界面如下:

学习学习servlet过滤器(javax.servlet.Filter)

学习学习servlet过滤器(javax.servlet.Filter)

学习学习servlet过滤器(javax.servlet.Filter)

2、在评论框中输入不含有“dam”的字符串,

学习学习servlet过滤器(javax.servlet.Filter)

点击“发表评论”时,返回结果为

学习学习servlet过滤器(javax.servlet.Filter)

3、在评论框中输入含有“dam”的字符串,

学习学习servlet过滤器(javax.servlet.Filter)

点击“发表评论”,返回的结果为:

学习学习servlet过滤器(javax.servlet.Filter)

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI