1. request.setCharacterEncoding("UTF-8");只对POST方式提交有用
  2. 对于GET方式 ,可以有装饰模式和适配器模式,对获取参数的函数进行重写。
  3. 对所有的页面进行过滤,设置编码。
package com.learning.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Map; import javax.security.auth.message.callback.PrivateKeyCallback.Request;
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;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse; @WebFilter(urlPatterns = "/*")
public class EncodingFilter implements Filter { @Override
public void destroy() { } @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// 转换对象
HttpServletRequest httpServletRequest = (HttpServletRequest) arg0;
HttpServletResponse httpServletResponse = (HttpServletResponse) arg1;
httpServletResponse.setContentType("text/html;charset=UTF-8");
// 对GET方式支持中文提交,可以应用装饰模式或适配器模式 ( 便于观看代码 此类写在本类之下 )
httpServletRequest = new MyWrapper(httpServletRequest);
arg2.doFilter(httpServletRequest, httpServletResponse);
} @Override
public void init(FilterConfig filterConfig) throws ServletException {
}
} /*
* 装饰模式实现: 1.实现被包装对象的接口 或者 继承被包装对象的自带装饰类 2.声明一个和被包装对象相同的对象 用于传参 3.运用构造函数
* 4.对需要重写的方法进行重写
*/
class MyWrapper extends HttpServletRequestWrapper { private HttpServletRequest request; public MyWrapper(HttpServletRequest request) {
super(request);
this.request = request;
} @Override
public String[] getParameterValues(String name) {
Map<String, String[]> map = getParameterMap();
String[] values = map.get(name);
return values;
} @Override
public String getParameter(String name) {
Map<String, String[]> map = getParameterMap();
String[] values = map.get(name);
if (values==null) {
return null;
}
return values[0];
} private boolean flag = true; @Override
public Map<String, String[]> getParameterMap() {
String method = request.getMethod();
if ("post".equalsIgnoreCase(method)) {
try {
request.setCharacterEncoding("UTF-8");
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if ("Get".equalsIgnoreCase(method)) { // get请求
Map<String, String[]> parameterMap = request.getParameterMap();
if (!flag) { // 确保get手动编码逻辑只运行一次
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i < values.length; i++) {
try {
// 处理get乱码
values[i] = new String(values[i]
.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
flag = true;
}
return parameterMap; }
return super.getParameterMap(); } }

实现全局同一编码:Filter的更多相关文章

  1. 【JAVAWEB学习笔记】24_filter实现自动登录和解决全局的编码问题

    过滤器Filter 学习目标 案例-自动登录 案例-解决全局的编码 一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标 ...

  2. Filter 字符编码Filter 一

    使用字符编码Filter package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Fil ...

  3. tomcat8 编写字符编码Filter过滤器无效问题

    做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.charles.web.filter; import java.io.IOException; import ...

  4. spring字符编码filter

    项目中的字符编码问题,spring提供统一的字符处理filter,只需要在项目入口web.xml中配置CharacterEncodingFilter即可,具体配置如下: <!-- 配置过滤器,同 ...

  5. springboot全局字符编码设置

    1.在application.properties中设置 #编码格式 spring.http.encoding.force=true spring.http.encoding.charset=UTF- ...

  6. Servlet 设置字符编码filter

    filter package common; import javax.servlet.*; import java.io.IOException; public class EncodingFilt ...

  7. JavaWeb乱码问题及统一全站编码(通过Filter实现)

    1. public class CharacterFilter implements Filter { private String characterEncoding = null; FilterC ...

  8. java web 之 listen 与 filter

    一.Listener监听器 Javaweb开发中的监听器,是用于监听web常见对象 HttpServletRequest HttpSession ServletContext 监听它们的创建与销毁.属 ...

  9. java之过滤器Filter

    Java三大器之过滤器(Filter)的工作原理和代码演示   一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对w ...

随机推荐

  1. 用Less定义常用的CSS3效果函数及常用颜色搭配(让CSS写起来更有趣)

    定义圆角及调用 /* 定义圆角 @radius 圆角大小 */ .round(@radius:5px){ border-radius:@radius; -webkit-border-radius: @ ...

  2. linux 之 tcpdump

    tcpdump详细命令 -i 参数指定监听网口 -c 参数指定监听的数据包数量 -s 参数指定监听数据包大小 -w 参数指定监听数据包写入文件 如果要监听某几台主机数据包 例如10.10.10.10. ...

  3. 使用GDI绘制一条直线

    这个是绘制一条直线的代码 private void Form1_Load(object sender, EventArgs e)        {            //一根笔 颜色  一张纸  ...

  4. 面向对象 "一"

    1:面向对象不是所有情况都适用. 2面向对象编程 a:定义类 calss Foo: 注意顶一个类的时候首字母必须是大写 def (方法一)(self,bb) pass b:根据创建对象,创建和Foo实 ...

  5. Eclipse的Spring IDE插件的安装和使用

    Spring IDE是Spring官方网站推荐的Eclipse插件,可提供在研发Spring时对Bean定义文件进行验证并以可视化的方式查看各个Bean之间的依赖关系等. 安装 使用Eclipse M ...

  6. wemall doraemon中Android app商城系统向指定URL发送GET方法的请求代码

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  7. 基于 Koa平台Node.js开发的KoaHub.js的静态服务器重写和索引代码

    koa-static-server Static file serving middleware for koa with directory, rewrite and index support k ...

  8. Centos 7 上安装使用 vscode

    #系统信息 Linux localhost.localdomain 3.10.0-327.el7.x86_64  x86_64 x86_64 x86_64 GNU/Linux 进入 vscode 下载 ...

  9. 学习ASP.NET MVC(十一)——分页

    在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...

  10. 在VM中给Linux安装Tool

    1.导入tool 2.解压tool 3.打开终端,进入tool的目录,输入  ./XXXXXXX.pl 4.进入安装界面,不断回车即可