使用过滤器和request装饰增强来彻底解决乱码问题

2023-11-15

在客户端以get或者post方式提交数据时,可能会出现客户端与服务端编码集不匹配而发生乱码的现象。

在对post方式产生的乱码我们可以用         request.setCharacterEncoding("utf-8") ;   语句来解决。

在对get方式产生的乱码我们可以用              String s = request.getParameter("xxx");
                                                                            s = new String(s.getBytes("ISO-8859-1"),"utf-8");   
这样的方式来解决


因为每个页面都需要乱码处理,所以我们可以将解决乱码方式与Filter结合起来,用装饰模式来增强request以实现彻底解决乱码格式。


代码如下

package filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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;

/**
 * 通过加强request完全解决乱码问题 get/post
 * 
 * @author seawind
 * 
 */
public class EncodingFilter2 implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 解决post乱码
		request.setCharacterEncoding("utf-8");
		// 解决get 通过装饰模式 加强getParameter
		MyEncodingRequest myEncodingRequest = new MyEncodingRequest(
				(HttpServletRequest) request);

		chain.doFilter(myEncodingRequest, response);

	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

}

class MyEncodingRequest extends HttpServletRequestWrapper {

	private HttpServletRequest request;

	// 加强方法,解决get乱码问题
	@Override
	public String getParameter(String name) {
		// 获得原来的值
		String value = request.getParameter(name);
		// 判断用户提交方式
		String method = request.getMethod();
		if (method.equalsIgnoreCase("post")) {
			// post提交
			return value;
		}
		// 如果value 为 null呢
		if (value == null) {
			return null;
		}

		try {
			// 解决get方式乱码
			value = new String(value.getBytes("ISO-8859-1"), "utf-8"); // 通过encode
										   // 和
										   // decode
										   // 看效果是否相同
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return value;
	}

	public MyEncodingRequest(HttpServletRequest request) {
		super(request);
		this.request = request;
	}

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用过滤器和request装饰增强来彻底解决乱码问题 的相关文章

  • 如何在 PHP 中一次按多个值搜索多维数组?

    给定以下二维数组 data info array array array score gt 100 name gt Alice subject gt Data Structures array score gt 50 name gt Bob
  • Scala dropWhile 与过滤器

    val xs Iterator from 1 dropWhile 2 0 takeWhile lt 10 toList val ys Iterator from 1 filter 2 0 takeWhile lt 10 toList pri
  • 不确定如何使用 CICrop 裁剪图像

    我正在尝试使用 CICrop 裁剪图像 但是当我尝试裁剪时 它崩溃并显示以下错误消息 由于未捕获的异常 NSUnknownKeyException 而终止应用程序 原因 setValue forUndefinedKey 这个类 不符合键的键
  • 在 ruby​​ HAML 中指定过滤器的选项

    有没有办法向 HAML 过滤器添加选项 HTML 属性 我想做这样的事情 javascript data turbolinks eval gt false foo gt bar if someCondition doSomething 结果
  • 使用 sfFilter 用 Doctrine 更新数据库

    我创建了一个 sfFilter 来更新用户所在的当前模块 class SessionFilter extends sfFilter public function execute filterChain if this gt isFirst
  • Javascript array.filter 按子元素中的元素

    我有一个像这样的对象 客户端 数组 client id AAA1 contracts contract id CON1 AAA1 revisions date 2018 07 30 status First Sign 我可以按 client
  • 使用 jQuery 从多个选择元素中过滤表格

    我想根据用户从多个选择元素中选择的内容使用 jQuery 隐藏 显示来过滤表格 我希望用户能够从 1 2 或 3 个选择元素中选择多个值 因此 他们可能会选择 2 名培训师 1 名新兵和 1 名状态人员 或者可能只选择 1 名培训师 计划创
  • 如何使用java实现低通滤波器

    我正在尝试用 Java 实现低通滤波器 我的要求很简单 我必须消除超出特定频率 单维 的信号 看起来巴特沃斯滤波器可以满足我的需要 现在重要的是 CPU 时间应该尽可能低 过滤器必须处理近一百万个样本 而我们的用户不喜欢等待太久 是否有任何
  • Android信号分析+一些过滤器

    由于世界杯是主要的体育赛事 而呜呜祖拉是世界上最烦人的声音 我想通过阅读这篇新文章来彻底消除它们 http www popsci com diy article 2010 06 simple software can filter out
  • 如何将 Array.prototype.filter 与异步一起使用?

    背景 我正在尝试过滤对象数组 在过滤之前 我需要将它们转换为某种格式 并且此操作是异步的 const convert gt new Promise resolve gt setTimeout resolve 1000 因此 我的第一次尝试是
  • 选择 pandas 数据框中所有零条目的列

    给定一个数据框df 如何找出所有只有0作为值的列 0 1 2 3 4 5 6 7 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 1 1 1 预期产出 2 4 0 0 0 1 0 0 我只需将这些值与 0 进行比较并使用 all
  • 使用 php 删除 xml 中标签值之间的空格

    我一直在搜索信息 当我将 PHP 代码导出到 XML 时 如何删除 PHP 代码留下的标记值之间的空格 我将详细解释 首先加载 XML 然后使用 xPath 对文件进行搜索 然后删除一些元素与某些品牌不匹配 最后我将其重新导出为新的 XML
  • ASP.NET Core 中的自定义授权属性

    我正在研究 asp net core 但我不明白一些事情 例如 在 mvc net 5 中 我们可以使用 AuthorizeAttribute 创建类来过滤和授权操作 并将属性设置为操作 如下所示 public class AdminAut
  • 列表视图过滤器 Android

    我在android中创建了一个列表视图 我想在列表上方添加编辑文本 当用户输入文本时 列表将根据用户输入进行过滤 谁能告诉我是否有办法在android中过滤列表适配器 在列表视图的 xml 布局文件中添加一个 EditText 在你的活动
  • JUnit 测试时排除 @Component 类的过滤器?

    是否可以排除 Component带注释的类 我想从 JUnit 测试中排除一个特殊的类 我的项目有一个类xEventHandler注释为 Component我不希望 spring 在 junit 测试时使用这个类 我的应用程序 TestCo
  • ActiveAdmin:按子对象计数过滤

    在严重依赖 ActiveAdmin 的 Ruby on Rails 应用程序中 我有一个赞助商模型 它与赞助商模型关联 一sponsor可以资助很多孩子 所以一个sponsor可以有很多sponsorships 我想做的是能够在赞助商索引页
  • 同时使用两个数组中的元素的过滤器

    假设我们有两个大小相同的数组 A and B 现在 我们需要一个过滤器 对于给定的掩码大小 从以下位置选择元素A 但删除掩码的中心元素 并在其中插入相应的元素B 所以 3x3 伪掩码 看起来类似于 A A A A B A A A A 对平均
  • php 如何使用 getimagesize() 检查上传时的图像类型[重复]

    这个问题在这里已经有答案了 可能的重复 GetImageSize 在应该返回 FALSE 时没有返回 FALSE https stackoverflow com questions 10464948 getimagesize not ret
  • 删除特定值之前和之后的特定值的运行

    我有一个包含几列的数据框 基于 activity 列 我想删除特定值 pt 的整个连续运行 但前提是它们紧邻 outside 运行之前或之后发生 在下面的简化数据中 有一次运行的 activity 为 outside 并且前后都有大块 pt
  • 如何通过单击按钮从反应状态挂钩数组中删除对象

    我正在尝试制作一个按钮 根据传递的索引从数组 即状态 中删除一个对象 我已经尝试了很多 但我的方法都不起作用 所以这是代码 希望我可以找人帮忙 state const items setItems useState name quantit

随机推荐

  • oracle统计信息详解

    收集oracle统计信息 优化器统计范围 表统计 行数 块数 行平均长度 all tables NUM ROWS BLOCKS AVG ROW LEN 列统计 列中唯一值的数量 NDV NULL值的数量 数据分布 DBA TAB COLUM
  • RGMII Delay的一点理解

    RGMII delay 如何产生的 可能是RGMII协议规定如此 因此在soc内部集成的RGMII片内外设 将时钟边沿与数据跳变在同一时刻发生 但是RGMII接收端是需要在时钟的边沿处捕获数据的 因此就需要将发送时钟移位 进而使接收端可以正
  • js 数组id去重

    可以用下面的方法来去除数组中的重复项 先将数组转换为 Set 类型 然后再转回数组 这种方法的缺点是会丢失原数组的顺序 const arr 1 2 3 3 2 1 const unique new Set arr console log u
  • C语言PTA题目:7-22 1022 利息

    输入存款金额money 存期year和年利率rate 根据下列公式计算存款到期时的利息interest 税前 输入格式 输入可能有多行 每行有3个整数 分别表示金额 存期 年 年利率 百分比数 输出格式 根据money 1 rate yea
  • 服务器怎么把自己的项目放上去,怎么把项目放到云服务器上

    怎么把项目放到云服务器上 内容精选 换一换 云服务器组是对云服务器的一种逻辑划分 云服务器组中的弹性云服务器遵从同一策略 当前仅支持反亲和性 即同一云服务器组中的弹性云服务器分散地创建在不同的主机上 提高业务的可靠性 您可以使用云服务器组将
  • 微信小程序:字体保持大小

    小程序和网页差不多 前台用wxml把内容摆好 然后用css调整样式 所以和web一样 必须要能够精确控制每一个元素的大小 在Web中 通过CSS基本达到了像素级的控制 但在小程序中 情况有所不同 下面是我通过微信提供的事件分析 把近7天访问
  • 数字化转型方法论汇总(学习笔记)

    数字化转型方法论汇总 德勤制造业数字化转型方法论 数字化转型的3大要点 1 从满足利益相关者期望出发 2 以企业价值引领业务模式创新 3 以信息作为企业神经中枢 重塑组织协同 一 关注集团利益相关者 两类利益相关者 集团外部的证监会 国资委
  • 比较2个数组是否一样

    需求 如果两个数组的类型 元素个数 元素顺序和内容是一样的我们就认为这2个数组是一模一样的 请使用方法完成 能够判断任意两个整型数组是否一样 并返回true或者false 分析 1 定义方法 接收2个整型数组 gt 是否需要参数 返回值类型
  • 《Win10——如何进入高级启动选项》

    Win10 如何进入高级启动选项 第一种方法 1 管理员命令提示符输入如下代码 自动重启并进入高级启动选项 shutdown r o f t 00 第二种方法 1 管理员命令提示符输入以下代码 开机时按下F8 进入高级启动选项 bcdedi
  • java基础总结(二十五)--访问修饰符protected

    三 protected 关键字的真正内涵 很多介绍Java语言的书籍 包括 Java编程思想 都对protected介绍的比较的简单 基本都是一句话 就是 被protected修饰的成员对于本包和其子类可见 这种说法有点太过含糊 常常会对大
  • 基于python 自写Tobii VI-T滤波器

    文章目录 官网参考文档 Gap fill in interpolation Eye selection Noise reduction Velocity calculator I VT classifier Merge adjacent f
  • react-router-dom V6

    目录 1 前言 2 变更概览 将 Switch 升级为 Routes 路由匹配组件参数 由 component 改为 element 相对路径识别 子路由不需要补全父路由的path react会自动补全 用 useNavigate 替代 u
  • web开发编码_编码和游戏开发

    web开发编码 As a game enthusiast and a beginner programmer I always wonder what it would be like to develop a game 作为游戏发烧友和初
  • 入门接口测试

    首先 什么是接口呢 接口一般来说有两种 一种是程序内部的接口 一种是系统对外的接口 系统对外的接口 比如你要从别的网站或服务器上获取资源或信息 别人肯定不会把数据库共享给你 他只能给你提供一个他们写好的方法来获取数据 你引用他提供的接口就能
  • gcc 若干安全相关选项

    1 FORTIFY SOURCE buffer over flow 防御 参考 http fedoraproject org wiki Security Features Compile Time Buffer Checks 28FORTI
  • Elasticsearch8.2扩容挪数据master出现异常

    背景 1 ES 8 2 版本集群 从10节点扩到20节点 变更 目标替换老的10个节点 先扩容新节点再下掉老节点 2 挪数据执行exclude API 排除老节点IP 设置迁移速率为800Mb s 默认40Mb s 异常 1 迁移过程中突然
  • python笔记第四章---选择结构

    一 程序的组织结构 fact 任何简单或复杂的算法都可以由顺序结构 选择结构和循环结构这三种基本结构组合而成 顺序结构 计算机的流程控制 选择结构 if语句 循环结构 while语句 for in语句 1 顺序结构 程序从上到下顺序的执行代
  • Linux文件权限的设置

    本文章主要介绍了对Linux文件的权限以及如何设置权限 一 查看文件的权限与属性 ls l 或者 ll查看文件属性 二 可以列出如下图所示的一些信息 rw r r 第一位代表文件类型 d 表示目录 l 表示链接文件 表示普通文件 b 表示快
  • Postman测试webService接口

    1 打开Postman界面如下 设置Content Type text xml 2 设置body 3 请求结果如下 4 至此通过Postman进行webService接口测试测试完毕
  • 使用过滤器和request装饰增强来彻底解决乱码问题

    在客户端以get或者post方式提交数据时 可能会出现客户端与服务端编码集不匹配而发生乱码的现象 在对post方式产生的乱码我们可以用 request setCharacterEncoding utf 8 语句来解决 在对get方式产生的乱