技术教程

从零开始系列——Filter过滤器常见两大用法

微信扫一扫,分享到朋友圈

从零开始系列——Filter过滤器常见两大用法
0 0

EncodingFilter

在Web开发中经常需要对请求和响应进行字符编码,通常采用的是UTF-8。如果每一次都需要在Servlet中进行设置,就会显得代码臃肿。

解决方法:Filter(过滤器)

使用方法:创建一个Java类并且实现Filter这个接口

Filter接口提供了init(初始化方法),doFilter(过滤方法),destroy(销毁方法)三种方法

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

public class EncodingFilter implements Filter {
    private String encoding = null;

    public void init(FilterConfig filterConfig) throws ServletException {
        // 从Web.xml中进行初始化值的配置  
        encoding = filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);

        filterChain.doFilter(request,response);
    }

    public void destroy() {}
}

Web.xml中注册过滤器

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.code.global.EncodingFilter</filter-class>
    <!-- 初始化值 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <!-- /*表示对所有的请求地址进行过滤 --> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

LoginFilter

针对一些跳过登陆的使用人进行过滤

思路:用户一旦登陆成功后,将对应信息存入到session中,过滤器只要对那些需要登陆后操作的地址进行过滤即可

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

public class AccountFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {}

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        // 获得登陆成功后的session值
        Object object = request.getSession().getAttribute("User");
        if (object==null)
            // 没有登陆
            response.sendRedirect("/Login/login.do");
        else
            filterChain.doFilter(request,response);
    }

    public void destroy() {}
}

Web.xml配置

<filter>
    <filter-name>User</filter-name>
    <filter-class>com.code.global.AccountFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>User</filter-name>
    <!-- 需要过滤的请求地址 只要是/Admin/xxx的请求都会进行登陆过滤 --> 
    <url-pattern>/Admin/*</url-pattern>
</filter-mapping>

从零开始系列——Mybatis会话工厂

上一篇

从零开始系列——关于jsp页面访问本地图片 idea项目

下一篇

你也可能喜欢

发表评论

插入图片
从零开始系列——Filter过滤器常见两大用法

长按储存图像,分享给朋友