Filter学习

什么是过滤器?

过滤客户端发送给服务端的请求

  • 过滤器的使用:

* 进行IP的过滤,脏话过滤,自动登录,响应压缩...

  • 使用过滤器:

* 编写一个类实现Filter接口:

* 配置过滤器: 

  • 过滤器的创建和销毁:

* 创建:服务器启动的时候.

* 销毁:服务器关闭的时候.

过滤器的 dispatcher 范围 ,可选 request forward  include  默认request 

<filter>
    <filter-name>GernericEncordingFilter</filter-name>
    <filter-class>com.filterpcg.GernericEncordingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>GernericEncordingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

案例:做个解决请求乱码的工具类

<%--
  页面上
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         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=UTF-8">
    <title>Title</title>
</head>
<body>
<h1>表单一GET</h1>
<form action="${ pageContext.request.contextPath }/login" method="get">
    用户名:<input id="username"  name="username_g" type="text"/>
    密码:<input type="password" id="password" name="password_g"/>
    <input type="submit" value="提交" >
</form>
<h1>表单二POST</h1>
<form action="${ pageContext.request.contextPath }/login" method="post">
    用户名:<input id="username_post"  name="username_p" type="text"/>
    密码:<input type="password" id="password_post" name="password_p"/>
    <input type="submit" value="提交">
</form>
</body>
</html>

过滤器:
package com.filterpcg;

import com.itheima.utils.StrongHttpRequest;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class GernericEncordingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("GernericEncordingFilter is created");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //拦截到了 创建增强后的request
        StrongHttpRequest stgrequest = new StrongHttpRequest((HttpServletRequest) servletRequest);
        //放行
        filterChain.doFilter(stgrequest, servletResponse);

    }

    @Override
    public void destroy() {
        System.out.println("GernericEncordingFilter is destroy");

    }
}

处理请求乱码增强类:
package com.itheima.utils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.UnsupportedEncodingException;

/*装饰者模式:
 * 前提: 1.实现共同接口  2.增强类获得被增强类对象的引用
 *
 * 重写 要增强的方法
 *
 * */
public class StrongHttpRequest extends HttpServletRequestWrapper {
    private HttpServletRequest strongHttpRequest;

    public StrongHttpRequest(HttpServletRequest request) {
        super(request);
        this.strongHttpRequest = request;
    }

    @Override
    public String getParameter(String name) {
        String outname;
        String method = strongHttpRequest.getMethod();
        try {
            if (method.equalsIgnoreCase("get")) {

                outname = new String(strongHttpRequest.getParameter(name).getBytes("ISO-8859-1"), "UTF-8");
                return outname;
            } else {
                strongHttpRequest.setCharacterEncoding("UTF-8");
                outname =strongHttpRequest.getParameter(name);
            }
        } catch (Exception e) {
            outname="";
        }
        return outname;

    }


}


表单提交后处理的servlet:
package com.servlet.practice;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FormBubmitServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username_g = req.getParameter("username_g");
        System.out.println(username_g);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username_p = req.getParameter("username_p");
        System.out.println(username_p);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值