过滤器Filter
来源:互联网 发布:淘宝电子商务公司起名 编辑:程序博客网 时间:2024/06/05 04:25
一,什么是过滤器?
JavaWeb三大组件之一.
Filter,与Servlet很相似,不过过滤器是用来拦截请求的,而Servlet是用来处理请求的.
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter通过,那么会继续执行用户请求的Servlet,如果无法通过Filter,那么就无法执行用户请求的Servlet.
利用Filter可以实现对输入框的校验,如果不通过校验.可以直接拒绝不会去访问Servlet.这样节省了资源.还可以利用Filter解决整个web项目的中文编码问题.
下面展示EncodeFilter文件解决编码问题
@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")//在注解里的名字写上本过滤器的名字EncodingFilter,url地址因为是检测整个项目,//所以地址写”/*”,”/*"代表所有JSP与所有Servlet.这样只要JSP与Servlet有访问,//就会走到本过滤器来,已达到检测修改整个项目中文编码传输问题public class EncodingFilter implements Filter { public void destroy() { }//创建文件的时候选择创建Filter型,这样会直接创建一个过滤器,并且直接将生命周期的三个方法写好,//我们只需要在doFilter()方法,也就是运行时期访问的方法,在这里写判断就好了 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { EncodingRequest equest = new EncodingRequest((HttpServletRequest)req); //这里会调用下面的EncodingRequest的方法 req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); //chain.doFilter(),这个为放行,也就是通过上面的一系列判断之后,如果输入流满足要求, //会执行这个方法,也就是将请求的参数传入到Servlet中,因为本类检测所有Servlet,所以, //放行的时候传入到响应的Servlet中,也就是,请求访问的Servlet地址 chain.doFilter(equest, resp); } public void init(FilterConfig config) throws ServletException { }}
由于此方法不能批量过滤get请求的参数,所以我们还需要写一个EncodingRequest的类来转换编码格式
public class EncodingRequest extends HttpServletRequestWrapper {//这里需要继承HttpServletRequestWrapper private HttpServletRequest request; public EncodingRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getParameter(String name) { //这里要对请求方式进行判断,判断是GET还是POST if (request.getMethod().toUpperCase().equals("GET")) { //获得请求中的参数值 String value = request.getParameter(name); try { //获得这个值对应的字节数组,将字节数组根据utf-8的格式,创建出一个字符串对象 value = new String(value.getBytes("iso-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return value; }else { try { request.setCharacterEncoding("UTF-8"); return request.getParameter(name); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return null; }}
到此,通过过滤器解决全局编码格式就演示完成了,每次用的时候只需要建立一个Encoding的文件夹,将这两个类放进去就可以了
阅读全文
0 0
- 过滤器Filter
- 过滤器Filter
- Filter 过滤器
- 过滤器 filter
- 过滤器filter
- 过滤器,Filter
- 过滤器Filter
- filter--过滤器
- 过滤器Filter
- filter过滤器
- Filter过滤器
- filter过滤器
- Filter过滤器
- Filter过滤器
- Filter 过滤器
- Filter过滤器
- Filter(过滤器)
- filter过滤器
- a标签
- 聚类算法(基础及核心概念)
- Redis简介,安装和配置,停止,卸载(图解方式)
- C++位段
- /etc/login.defs 文件内容及其解释
- 过滤器Filter
- 常用web组件
- vs2013 + Qt 5.6 + caffe — Qt 调用 caffe 生成的静态链接库用到自己的工程(项目)中
- request、response的常见用法
- iOS圆角和阴影并存
- 按位取反运算符~详解
- 数组的分页
- 海外云主机搭建IKEV2 VPN之经验总结 + 搭建证书服务器
- 爬虫实战:学者网(一)