JavaEE:Servlet Filter用法

作用:

(1)可以对请求进行拦截并处理,例如:访问某些网页时,先可以判断是否登录了,没登录则拦截并跳登录页,登录则跳正常网页;
(2)可以对用户的响应进行一些处理,再将请求和响应交给目标资源。

一、Filter使用:

1.写一个java类实现Filter接口,并重写doFilter方法:

public class LoginFilter implements Filter {

    public LoginFilter() {
    }

    // 该方法在服务器启动时执行
    @Override
    public void init(FilterConfig fConfig) throws ServletException {
        fConfig.getInitParameter("参数名");// 得到参数值
        fConfig.getInitParameterNames();// 得到web.xml中所有init标签中的参数名称,返回Enumeration集合
    }

    // 拦截方法,FilterChain为过滤器链
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 1.拦之前执行的代码
        request.setCharacterEncoding("UTF-8"); // 例:设置采用的编码,或者判断有无登录,没登录则跳到登录页
        String token = request.getParameter("token"); // 例:获取客户端上传的登录token

        if (token == null || token.trim().equals("")) {
            // 没登录则跳登录页,不执行后面代码
            return;
        }

        // 2.调用这句让目标资源执行,不调用就不执行目标资源及下一个Filter。调用后会调用链中下一个Filter,如果没有下一个Filter则调用目标资源
        chain.doFilter(request, response);

        // 3.拦之后执行的代码

    }

    // 该方法在服务器停止时执行
    @Override
    public void destroy() {
    }

}

2.在web.xml中注册:

<!-- 注册Filter -->
<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.yyh.hkw.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <!-- 拦截所有的请求 -->
    <url-pattern>/*</url-pattern>
    <!-- 拦截级别
        REQUEST:所有请求都拦截
        FORWARD:转发请求拦截
        INCLUDE:包含页面时拦截
        ERROR:页面出错,发生跳转拦截
        ASYNC:异步时拦截
     -->
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

二、对返回客户端的内容gzip压缩处理:

/**
* 对返回客户端的内容gzip压缩处理
*/
private void gzip(HttpServletResponse response, String text) throws IOException {
    response.setHeader("Content-Encoding", "gzip");
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    GZIPOutputStream gout = new GZIPOutputStream(bout);
    gout.write(text.getBytes());
    gout.close();
    byte gzip[] = bout.toByteArray();
    response.setHeader("Content-lenght", "" + gzip.length);
    response.getOutputStream().write(gzip);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值