HttpServletRequest应用-获取请求参数及解决中文乱码
一、介绍
在实际开发中,经常需要获取用户提交的表单数据,例如,用户名、密码、电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口的父类ServletRequest中,定义了一系列获取请求参数的方法,如表所示。
二、编写表单文件form.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body><form action="/chapter04/RequestParamsServlet" method="POST">用户名:<input type="text" name="username"><br>密 码:<input type="password" name="password"><br>爱好:<input type="checkbox" name="hobby" value="sing">唱歌<input type="checkbox" name="hobby" value="dance">跳舞<input type="checkbox" name="hobby" value="football">足球<br><input type="submit" value="提交"></form>
</body>
</html>
三、创建RequestParamsServlet
public class RequestParamsServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {//设置request对象的解码方式//request.setCharacterEncoding("utf-8");String name = request.getParameter("username");//name=new String(name.getBytes("iso8859-1"),"utf-8");String password = request.getParameter("password");System.out.println("用户名:" + name);System.out.println("密 码:" + password);// 获取参数名为“hobby”的值String[] hobbys = request.getParameterValues("hobby");System.out.print("爱好:");for (int i = 0; i < hobbys.length; i++) {System.out.print(hobbys[i] + ",");}}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
四、运行
http://localhost:8080/chapter04/form.html
五、解决post提交的中文乱码
乱码原因:form.html的<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,告诉浏览器使用utf-8对传递的请求参数编码,但在HttpServletRequest中默认使用iso-8859-1解码,所以设置HttpServletRequest的解码方式为utf-8
request.setCharacterEncoding("utf-8");
六、解决get方式提交的中文乱码
将form.html中的method属性的值改为“get”,来做测试
只要在表单页面的head标签中写上<meta http-equiv="Content-Type" content="text/html; charset=utf-8">就好了,request对象默认采取utf-8解码查询字符串
分析如下:
在浏览器方面,如果表单页面存在<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,那么对提交信息进行utf-8编码,如果charset 不是utf-8,使用默认字符集编码。
在Servlet中request.setCharacterEncoding("utf-8")对get方式提交的数据无效,对地址栏发过来的参数(也就是查询字符串,因为一般不在地址栏提交表单参数,但会传查询参数)单独处理,默认采用utf-8解码,通过调试和搜索可以发现,如下图
如果上面的这些类版本比较低时,估计会出现乱码,因为可能会用ISO-8859-1解码,我也不再分析了,直接给出代码解决。
name=new String(name.getBytes("iso8859-1"),"utf-8");
也可以通过配置tomcat解决,在server.xml中配置useBodyEncodingForURI="true",如下
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"
/>
并在程序中调用request.setCharacterEncoding("utf-8"),只作为了解,所以不再去证实。
HttpServletRequest应用-获取请求参数及解决中文乱码相关推荐
- 获取请求参数通用方式|| 中文乱码问题||请求转发
1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数 1. String getParameter(String name):根据参数名称获取参数值 use ...
- JavaScript 获取url参数及解决中文乱码问题
1.获取url参数 方法一: // 获取url参数function getQueryVariable(variable) {var query = window.location.search.sub ...
- JS获取url多个参数及解决中文乱码问题
JS获取url多个参数及解决中文乱码问题 参考文章: (1)JS获取url多个参数及解决中文乱码问题 (2)https://www.cnblogs.com/weimingxin/p/7349564.h ...
- Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
Java HttpURLConnection模拟请求Rest接口解决中文乱码问题 参考文章: (1)Java HttpURLConnection模拟请求Rest接口解决中文乱码问题 (2)https: ...
- java调用 restapi 乱码_Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
public staticString PostRequest(String URL,String obj) { String jsonString="";try{//创建连接 U ...
- Request_获取请求参数中文乱码问题处理
* 中文乱码问题: * get方式:tomcat 8 已经将get方式乱码问题解决了 * post方式:会乱码 ...
- 详解Spring MVC请求参数类型,解决中文乱码问题,自定义类型转换器,Spring MVC相关注解
#SpringMVC SpringMVC请求 简单类型 简单类型包括:基本类型,基本类型的包装类型,字符串 编写Controller @RequestMapping("/param" ...
- js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...
- 解决获取请求参数的乱码问题
解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册 <!--配置springMVC的编码过滤 ...
最新文章
- (1)Hadoop 的第一个程序 WordCount 理解
- 前端 css+js实现返回顶部功能
- 计算机专业的分支,计算机专业分支(转载)
- hive清空外表数据
- android 中空饼图控件,android饼状图内是空心的怎么做
- IntentService使用
- 无意间看到的浏览器记录......
- openai-gpt_为什么到处都看到GPT-3?
- 三相阻容降压供电DCDC电源
- Hadoop笔记整理(三):Zookeeper
- Spring 注解编程之注解属性别名与覆盖
- Crystal Ball—甲骨文水晶球风险管理软件(概念以及实战——中级案例篇)
- 草根学Python(七) 迭代器和生成器
- AI带你走进P图新时代
- 32年正大天晴肝疾攻坚路 半部中国乙肝抗争史
- 成都商业贷款买新房,取公积金流程
- myQNX account试用申请流程(license申请)
- 计算机e的指数怎么计算方法,e^x的基本算法——剥离大指数法
- 一分钟了解“matlab得到自然常数e”
- 两个坚持是什么_什么运动减肚子脂肪效果最好?坚持这两个运动,“燃烧”腹部脂肪...
热门文章
- 多目录Makefile(库及分层目录)
- Oracle中CHAR类型不足位数时,用空格自动补足位数
- Redis--Windos下的安装和使用
- 95-872-055-源码-CEP-Pattern API
- 【Elasticsearch】Elasticsearch:aggregation介绍
- 95-140-106-源码-transform-算子filter
- 【Java】indexOf 方法区分大小写
- 【FLink】FLink学习遇到的好文章
- Kudu : tablet=null, server=null, status=Timed out: can not complete before timeout: Batch
- 【sqoop】sqoop概念,功能,架构,版本