Java-Filter过滤器用于过滤整个项目的编码
整个分为实现类以及在web.xml文件中对编写的filter类进行注册
代码如下
- package cn.itcast.itcaststore.web.filter;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import java.util.Map;
- 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.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- /**
- * 编码过滤器(用于统一项目编码)
- */
- public class EncodingFilter implements Filter {
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- // 处理请求乱码
- HttpServletRequest httpServletRequest = (HttpServletRequest) request;
- HttpServletRequest myRequest = new MyRequest(httpServletRequest);
- // 处理响应乱码
- response.setContentType("text/html;charset=utf-8");
- chain.doFilter(myRequest, response);
- }
- public void destroy() {
- }
- }
- // 自定义request对象
- class MyRequest extends HttpServletRequestWrapper {
- private HttpServletRequest request;
- private boolean hasEncode;
- public MyRequest(HttpServletRequest request) {
- super(request);// super必须写
- this.request = request;
- }
- // 对需要增强方法 进行覆盖
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Map getParameterMap() {
- // 先获得请求方式
- String method = request.getMethod();
- if (method.equalsIgnoreCase("post")) {
- // post请求
- try {
- // 处理post乱码
- request.setCharacterEncoding("utf-8");
- return request.getParameterMap();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- } else if (method.equalsIgnoreCase("get")) {
- // get请求
- Map<string, string[]=""> parameterMap = request.getParameterMap();
- if (!hasEncode) { // 确保get手动编码逻辑只运行一次
- for (String parameterName : parameterMap.keySet()) {
- String[] values = parameterMap.get(parameterName);
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- try {
- values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
- }
- }
- hasEncode = true;
- }
- return parameterMap;
- }
- return super.getParameterMap();
- }
- @Override
- public String getParameter(String name) {
- @SuppressWarnings("unchecked")
- Map<string, string[]=""> parameterMap = getParameterMap();
- String[] values = parameterMap.get(name);
- if (values == null) {
- return null;
- }
- return values[0]; // 取回参数的第一个值
- }
- @Override
- public String[] getParameterValues(String name) {
- @SuppressWarnings("unchecked")
- Map<string, string[]=""> parameterMap = getParameterMap();
- String[] values = parameterMap.get(name);
- return values;
- }
- }
<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>
Java-Filter过滤器用于过滤整个项目的编码的更多相关文章
- Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)
Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...
- Java Filter过滤器的简单总结
1.Filter的介绍 Filter技术是servlet 2.3新增加的功能.它能够对Servlet容器的请求和响应对象进行检查和修改. Filter本身并不生成请求和响应对象,只是提供过滤功能. F ...
- java filter过滤器及责任链设计模式
什么是Filter? Filter属于sevlet规范,翻译为过滤器. Filter在web开发中有什么作用? 案例一:一个web站点只有用户登录才能继续访问该站点的资源,那么需要用户每次访问都判断是 ...
- java Filter过滤器例外URL设置
在web.xml声明的一个filter中: <!– session过滤filter –> <filter> <filter-name>SessionFilter&l ...
- Python 内建的filter()函数用于过滤序列。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9 ...
- 【Servlet】Java Serlvet Filter 过滤器
Filter的设计思想Filter是一种AOP(aspect-oriented programming)的设计思想 : 面向切面编程.用于的请求和响应都会走 使用filter的登录案例我们通过一张图片 ...
- SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错
1.使用response.sendRedirect("/login")时报错,控制台报错如下: Cannot call sendError() after the response ...
- python的map、reduce和filter(过滤器)函数(廖雪峰老师python基础)
1.map 语法: map(func,Iterable) map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返 ...
- python之filter过滤器
Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...
随机推荐
- CAD快捷键命令
符号键(CTRL开头) CTRL+1 PROPCLOSEOROPEN 对象特性管理器 CTRL+2或4 ADCENTER 设计中心 CTRL+3 CTOOLPALETTES 工具选项板 CTRL+8或 ...
- Maven详解(六)------ 生命周期
1.什么是 生命周期? Maven 强大的原因是有一个十分完善的生命周期,生命周期可以理解为项目构建步骤的集合,它定义了各个构建环节的执行顺序,有了这个顺序,Maven 就可以自动化的执行构建命令. ...
- php 微信公众号+微商城开发 基于Thinkphp3.2框架开发
说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...
- cacti监控系统
cacti 1. cacti安装 IP: 172.25.44.1 环境: Red Hat 6.5 镜像: rhel-server-6.5-x86_64-dvd.iso 火墙: /etc/init.d/ ...
- linux(十三)之磁盘分区、创建文件系统、挂载
前面学习了linux的用户管理 ,感觉是不是多lnux的多用户多任务的系统感觉十分了解了,但是其实并不然的.你还需要了解更多.接下来给大家分享的是 在vmware中添加硬盘创建分区,然后挂载到指定目录 ...
- 如何通过jmeter使用beanshell进行关联
关联,大多数都是通过响应的信息抓取部分信息,例如session或者hidden等 在jmeter中要使用关联,分为以下2步: Step 1. 在Sampler请求下添加正则表达式,获得信息,添加 &g ...
- 快速排序Java实现
package practice; import edu.princeton.cs.algs4.*; public class TestMain { public static void main(S ...
- win10下移动硬盘位置不可用无法访问
win10下移动硬盘位置不可用无法访问 网上搜索得到的答案是: 请参考以下步骤解决: 1.按Windows+R输入"CHKDSK H: /F /R"(H:是硬盘所在盘符./R 找到 ...
- 浅谈一下Java String
相信很多同学使用Java String, Java中的String方法,但是对其中的原理可能有些模糊,那么咱们就针对这块内容进行展开,让更多的同学理解和知道. public final class S ...
- Scrapy 爬虫入门 +实战
爬虫,其实很早就有涉及到这个点,但是一直没有深入,今天来搞爬虫.选择了,scrapy这个框架 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tut ...