servlet中文乱码_Servlet入门 信息过滤

浏览器和web服务器通信,请求是输入的信息流,响应是输出的信息流,它们走的是服务器的同一个端口。当我们想对信息流做统一处理时,可以使用端口后面的过滤器,它就是Servlet API定义的 Filter接口;我们只需写一个类,实现Filter接口,相当于加入一根滤芯。 a118498d4e7d312b3bb74a561ccda259.png 它的核心方法是doFilter,以chain.doFilter(request, response)为分界线,前面的代码过滤请求,后面的代码过滤响应。

1.动手写一个Filter

在之前的JavaWebDemo项目上,找到src目录,右键: New / Filter a001cc5f5acb6884fc43627fce0d6b74.png填写类名和包名: 191cbc78f4b0e3da1f8cadc349ef4140.png把Filter mappings改为/*,过滤所有的请求: ba96aadf12dae196a8746d8321686200.png接下来,在自动生成的代码上写个例子:从请求中取QueryString,追加到响应中,同时设置编码方式、避免中文乱码。
package filter;import java.io.IOException;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.annotation.WebFilter;/** * 演示 Servlet Filter 的使用 */@WebFilter("/*")public class demo implements Filter {  public void destroy() {    // TODO Auto-generated method stub  }  /**   * 过滤请求和响应   */  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)      throws IOException, ServletException {    // 设置请求和响应的编码格式    request.setCharacterEncoding("utf-8");    response.setContentType("text/html;charset=UTF-8");        // 从请求中取数据    String name = request.getParameter("name");    // pass the request along the filter chain    chain.doFilter(request, response);    // 响应中追加数据    response.getWriter().append(" & "+name);  }  public void init(FilterConfig fConfig) throws ServletException {    // TODO Auto-generated method stub  }}
运行项目,在url后面加上参数,效果如下: 1aa9bfc2f33fb031fbdddabb8578a3a9.png

2.用UrlPattern指定请求

Pattern的含义是模式,看到这个单词很容易想到:设计模式、正则表达式。它通常描述有规律的重复现象。那么,Url的规律是什么呢?①文件后缀:形如 1.js/2.js/3.js,你会想到 *.js 代表所有js文件;同样,在设计servlet的url时,也经常会以  .do 做后缀。因此,我们可以用 *.后缀 来匹配同一类型的请求。②父目录:形如  user/card,user/identification,你可以猜到user模块下的url都是 user/* 这样的格式。因此,我们可以用 父目录/* 来匹配同一模块下的所有请求。③精确匹配:这个没啥好说的,就是具体的url。④全部匹配:这个也没啥好说的,就是用 / * 匹配所有url。

3.多个Filter

一个净水器中有多个滤芯,有的过滤杂质、有的过滤离子;我们也可以写多个Filter类,各自对信息做不同的处理。这时带来一个问题:多个Filter类的逻辑,谁先执行、谁后执行?换句话说,信息流先流过谁、后流过谁?请看下图: 60a67a1a396676a8f502d9865d5397d4.png很明显,对于请求流,排在前面的Filter类先执行;对于响应流,则完全相反。Filter接口没有约定顺序的属性,目前只能有配置节 在web.xml中的先后次序决定: 104d00fbf8a75c4edaffcbf81b89cf99.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值