Java-Filter过滤器用于过滤整个项目的编码

整个分为实现类以及在web.xml文件中对编写的filter类进行注册

代码如下

  1. package cn.itcast.itcaststore.web.filter;
  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.Map;
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletRequestWrapper;
  13. /**
  14. * 编码过滤器(用于统一项目编码)
  15. */
  16. public class EncodingFilter implements Filter {
  17. public void init(FilterConfig filterConfig) throws ServletException {
  18. }
  19. public void doFilter(ServletRequest request, ServletResponse response,
  20. FilterChain chain) throws IOException, ServletException {
  21. // 处理请求乱码
  22. HttpServletRequest httpServletRequest = (HttpServletRequest) request;
  23. HttpServletRequest myRequest = new MyRequest(httpServletRequest);
  24. // 处理响应乱码
  25. response.setContentType("text/html;charset=utf-8");
  26. chain.doFilter(myRequest, response);
  27. }
  28. public void destroy() {
  29. }
  30. }
  31. // 自定义request对象
  32. class MyRequest extends HttpServletRequestWrapper {
  33. private HttpServletRequest request;
  34. private boolean hasEncode;
  35. public MyRequest(HttpServletRequest request) {
  36. super(request);// super必须写
  37. this.request = request;
  38. }
  39. // 对需要增强方法 进行覆盖
  40. @SuppressWarnings({ "unchecked", "rawtypes" })
  41. @Override
  42. public Map getParameterMap() {
  43. // 先获得请求方式
  44. String method = request.getMethod();
  45. if (method.equalsIgnoreCase("post")) {
  46. // post请求
  47. try {
  48. // 处理post乱码
  49. request.setCharacterEncoding("utf-8");
  50. return request.getParameterMap();
  51. } catch (UnsupportedEncodingException e) {
  52. e.printStackTrace();
  53. }
  54. } else if (method.equalsIgnoreCase("get")) {
  55. // get请求
  56. Map<string, string[]=""> parameterMap = request.getParameterMap();
  57. if (!hasEncode) { // 确保get手动编码逻辑只运行一次
  58. for (String parameterName : parameterMap.keySet()) {
  59. String[] values = parameterMap.get(parameterName);
  60. if (values != null) {
  61. for (int i = 0; i < values.length; i++) {
  62. try {
  63. values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
  64. } catch (UnsupportedEncodingException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. }
  70. hasEncode = true;
  71. }
  72. return parameterMap;
  73. }
  74. return super.getParameterMap();
  75. }
  76. @Override
  77. public String getParameter(String name) {
  78. @SuppressWarnings("unchecked")
  79. Map<string, string[]=""> parameterMap = getParameterMap();
  80. String[] values = parameterMap.get(name);
  81. if (values == null) {
  82. return null;
  83. }
  84. return values[0]; // 取回参数的第一个值
  85. }
  86. @Override
  87. public String[] getParameterValues(String name) {
  88. @SuppressWarnings("unchecked")
  89. Map<string, string[]=""> parameterMap = getParameterMap();
  90. String[] values = parameterMap.get(name);
  91. return values;
  92. }
  93. }

web.xml配置

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>cn.itcast.itcaststore.web.filter.EncodingFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

时间: 2024-10-12 17:32:46

Java-Filter过滤器用于过滤整个项目的编码的相关文章

Python 内建的filter()函数用于过滤序列。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15](返回False就过滤掉) 习题:回数是指从左向右读和从右向左读都是一样的数,例如12321,909.请利用filter()滤掉非回数: # -*- coding: utf-8 -*-from functools import reduc

SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错

1.使用response.sendRedirect("/login")时报错,控制台报错如下: Cannot call sendError() after the response has been committed.字面意思是:提交响应之后,无法再调用. 我正在做一个springboot的项目,使用Filter过滤器在过滤一些请求url时,因为有些页面的url请求地址是要登录之后才能进入的,所以用一个全局的过滤器Fitler,过判断此url是否有必要放行.当请求此url地址时,从s

filter 过滤器从数组中选择一个子集

输入过滤器可以通过一个管道字符和一个过滤器添加到指令中,该过滤器后面跟着一个冒号:冒号后面是一个模型名称. <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="X-UA-Compatible"content="

java:(九大内置对象,计算服务器访问次数,filter过滤器)

1.九大内置对象: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page isErrorPage="true" %><!-- 默认是隐藏的false --> <%@ page session="true" %><!-- session默认是显示的true

Java Web进阶——Filter过滤器

一.过滤器的介绍: 在Servlet规范2.3中定义了过滤器,它是一个服务器端的组件,可以截取用户端的请求与响应信息,并且对这些信息进行过滤. Servlet过滤器本身并不生成请求和响应对象,只是提供过滤功能. Servlet过滤器能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容. Servlet过滤器可以过滤的Web组件包括Servlet,JSP和HTML等文件. 本文源码——GitHub:  https://github.com/i

java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的

Java中Filter过滤器的使用

过滤器过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改响应.如下图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤.过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端.当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉.过滤

Java Web开发——Filter过滤器

一.过滤器 1.1定义 过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息进行过滤. 1.2工作原理 1.项目启动时,从Web容器中加载过滤器: 2.过滤器存在于用户请求和Web资源之间: 3.用户请求和Web响应之间的收发都经由过滤器按照过滤规则进行过滤筛选. 1.3过滤器的生命周期 实例化(web.xml加载)→初始化(init方法)→过滤(doFilter方法)→销毁(destroy方法) 1.初始化:当容器第一次加载该过滤器时,init() 方法将被调用.该类在这

Java Web总结十九Filter过滤器

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,Web开发人员通过Filter技术,对Web服务器管理的所有Web资源:例如Jsp,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.自动登录.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发Web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter.通过