Java培训之处理请求参数乱码

1. 处理POST请求乱码

通过对请求参数乱码问题的分析,我们已经了解了请求参数乱码的原因。下面通过一个案例的练习,切身体会一下如何解决该问题;具体步骤如下:
(1)创建一个web应用,Example12,在该应用下新建一个Servlet类,ParamServlet,主要代码如例1-1所示:
例1-1 ParamServlet.java
public class ParamServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
          request.setCharacterEncoding("utf-8");
         String name= request.getParameter("username");
         System.out.println(name);
}
}
例1-1中,先设置请求参数的编码,然后再获取参数值。
(2)ParamServlet在web.xml中配置的访问路径是:“/ParamServlet”。
(3)在Example12应用下新建一个html文件,form.html,主要代码如例1-2所示:
例1-2 form.html
<body>
This is my HTML page. <br>
    <form action="/Example12/ParamServlet" method="post">
    用户名:<input type="text" name="username" value="李四"/><br/>
    <input type="submit" value="提交"/>
    </form>
    <hr/>
    <a href="/Example12/ParamServlet?username=张三">GET</a>
</body>
例1-2中,form.html文件的页面编码是“utf-8”,表单的提交方式是post,提交的路径是“/Example12/ParamServlet”(只要是浏览器端路径都需要加上项目名称)。
(4)将Example12发布到Tomcat服务器中,然后启动服务器,在浏览器地址栏上输入:http://localhost:8080/Example12/form.html;浏览器显示结果如图1-1所示:
Java培训之处理请求参数乱码
图1-1 浏览器显示结果
(5)点击图1-1中的【提交】按钮去访问ParamServlet,并使用HttpWatch抓包工具,抓取内容如图1-2所示:
Java培训之处理请求参数乱码
图1-2 请求信息
(6)控制台打印结果如图1-3所示:
Java培训之处理请求参数乱码
图1-3 控制台打印结果
由打印结果可知通过request.setCharacterEncoding(“utf-8”)方法的设置,请求参数已正常显示。

2. 处理GET请求乱码

以上是处理POST请求乱码的步骤,现在通过一个案例来体会如何解决GET请求的乱码问题。具体如下:
(1)在Example12应用下的ParamServlet重写doGet()方法,如例1-3所示:
例1-3 ParamServlet/doGet()
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
//首先获得请求参数的值
String username =request.getParameter("username");
//进行iso-8859-1编码
byte b[]=username.getBytes("iso-8859-1");
//在进行utf-8编码
String value=new String(b,"utf-8");
System.out.println(value);
}
(2)在form.html中已经存在一个超链接,该超链接访问的是ParamServlet,并带有参数“username=张三“。
(3)重新启动Tomcat服务器,在浏览器端再次访问form.html,然后点击页面中的“GET“超链接,控制台打印结果如图1-4所示:
Java培训之处理请求参数乱码
图1-4 控制台打印结果
GET请求乱码的处理步骤相对POST请求来说有些复杂,但是大家理解了这个原理后就不会觉得困难了。






 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253143.html

(0)
上一篇 2022年5月7日
下一篇 2022年5月7日

相关推荐

发表回复

登录后才能评论