一、介绍

在实际开发中,经常需要获取用户提交的表单数据,例如,用户名、密码、电子邮件等,为了方便获取表单中的请求参数,在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>密  &nbsp;&nbsp;&nbsp;码:<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. 获取请求参数通用方式|| 中文乱码问题||请求转发

    1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数 1. String getParameter(String name):根据参数名称获取参数值    use ...

  2. JavaScript 获取url参数及解决中文乱码问题

    1.获取url参数 方法一: // 获取url参数function getQueryVariable(variable) {var query = window.location.search.sub ...

  3. JS获取url多个参数及解决中文乱码问题

    JS获取url多个参数及解决中文乱码问题 参考文章: (1)JS获取url多个参数及解决中文乱码问题 (2)https://www.cnblogs.com/weimingxin/p/7349564.h ...

  4. Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

    Java HttpURLConnection模拟请求Rest接口解决中文乱码问题 参考文章: (1)Java HttpURLConnection模拟请求Rest接口解决中文乱码问题 (2)https: ...

  5. java调用 restapi 乱码_Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

    public staticString PostRequest(String URL,String obj) { String jsonString="";try{//创建连接 U ...

  6. Request_获取请求参数中文乱码问题处理

    * 中文乱码问题:                 * get方式:tomcat 8 已经将get方式乱码问题解决了                 * post方式:会乱码              ...

  7. 详解Spring MVC请求参数类型,解决中文乱码问题,自定义类型转换器,Spring MVC相关注解

    #SpringMVC SpringMVC请求 简单类型 简单类型包括:基本类型,基本类型的包装类型,字符串 编写Controller @RequestMapping("/param" ...

  8. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数

    js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...

  9. 解决获取请求参数的乱码问题

    解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册 <!--配置springMVC的编码过滤 ...

最新文章

  1. (1)Hadoop 的第一个程序 WordCount 理解
  2. 前端 css+js实现返回顶部功能
  3. 计算机专业的分支,计算机专业分支(转载)
  4. hive清空外表数据
  5. android 中空饼图控件,android饼状图内是空心的怎么做
  6. IntentService使用
  7. 无意间看到的浏览器记录......
  8. openai-gpt_为什么到处都看到GPT-3?
  9. 三相阻容降压供电DCDC电源
  10. Hadoop笔记整理(三):Zookeeper
  11. Spring 注解编程之注解属性别名与覆盖
  12. Crystal Ball—甲骨文水晶球风险管理软件(概念以及实战——中级案例篇)
  13. 草根学Python(七) 迭代器和生成器
  14. AI带你走进P图新时代
  15. 32年正大天晴肝疾攻坚路 半部中国乙肝抗争史
  16. 成都商业贷款买新房,取公积金流程
  17. myQNX account试用申请流程(license申请)
  18. 计算机e的指数怎么计算方法,e^x的基本算法——剥离大指数法
  19. 一分钟了解“matlab得到自然常数e”
  20. 两个坚持是什么_什么运动减肚子脂肪效果最好?坚持这两个运动,“燃烧”腹部脂肪...

热门文章

  1. 多目录Makefile(库及分层目录)
  2. Oracle中CHAR类型不足位数时,用空格自动补足位数
  3. Redis--Windos下的安装和使用
  4. 95-872-055-源码-CEP-Pattern API
  5. 【Elasticsearch】Elasticsearch:aggregation介绍
  6. 95-140-106-源码-transform-算子filter
  7. 【Java】indexOf 方法区分大小写
  8. 【FLink】FLink学习遇到的好文章
  9. Kudu : tablet=null, server=null, status=Timed out: can not complete before timeout: Batch
  10. 【sqoop】sqoop概念,功能,架构,版本