- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
问题:直接提交中文,会出现乱码
html页面:
body
form action=/day10/request1 method=get
用户名:input type=text name=username / br /
密码:input type=password name=password / br /
input type=submit value=提交 /
/form
/body
servlet 代码
Get 提交的中文乱码解决:
POST提交的中文乱码解决:
第一种解决方案:
第二种解决方案:
这种方式只对 请求体 有效,算是post的偷懒方式。
Get 和 post 整合在一起:
将doPost() 和 doGet 直接整合在一起,post提交 中文会出现乱码?
去掉 先编码,再解码,post 的中文乱码解决,但是get方式出现 中文异常。
最终解决方案: 采用过滤器解决
request对象的包装对象
package cn.itcast.filter;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
* HttpServletRequestWrapper这个对象就是对服务器创建的request对象的一个包装对象,
* 那么我们对HttpServletRequestWrapper进行增强,就是对 服务器创建的request对象进行增强。
*/
public class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request = null;
// 防止重复编码标记
private boolean flag = false;
public MyRequest(HttpServletRequest request) {
super(request);
// 将服务器创建的request对象传人我的自定义对象中
// 获取了服务器创建的request对象中的所有数据。
this.request = request;
}
// 对request对象的获取请求参数的方法进行增强
@Override
public MapString, String[] getParameterMap() {
// 获取请求方式
String method = this.request.getMethod();
if (post.equalsIgnoreCase(method)) {
try {
// 处理post方式中文乱码
this.request.setCharacterEncoding(utf-8);
return this.request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return super.getParameterMap();
}
} else if (get.equalsIgnoreCase(method)) {
MapString, String[] map = this.request.getParameterMap();
if (flag) {
// 如果已经编码过了,直接返回map
return map;
}
if (map == null) {
return super.getParameterMap();
}
SetString keySet = map.keySet();
for (String key : keySet) {
// 获取map集合的value值
String[] values = map.get(key);
for (int i = 0; i values.length; i++) {
try {
String temp = new String(values[i].getBytes(iso-8859-1), utf-8
文档评论(0)