中文乱码处理之Servlet

前些时间做实验遇到的一些中文乱码问题,我总结为以下三种:

  1. 表单提交(GET&POST);
  2. 超链接;
  3. sendRedirect()(重定向);

我们首先分析以下,为什么会出现中文乱码,而英文确不会乱码?

原因是这样的:当我们需要向服务器发送一个请求时,在浏览器上所用的编码方式(一般是utf-8),发送给服务器时,服务器解码方式默认为iso-8859-1,编码和解码的方式不一致,也就是说服务器不认识浏览器发送过来的请求,无法进行处理,更不用说对浏览器做出响应。所以我们的解决方式就是对字符集进行一致性的更改。

 1.表单提交

 表单提交出现乱码的情况可能是最为常见的,因为get和post两种不同的提交方式,所以也对应着不同的处理方式。

GET:get请求内容位于URL中,

//获取表单内容
String username=request.getParameter(“username”); 

//修改服务器端的解码方式
String newString =new String(string.getBytes("ISO-8859-1"),"UTF-8");

 值传递给服务器时,服务器要将iso-8859-1的解码方式改为utf-8进行解码。

POST: post 请求内容位于http请求体中,所以我们需要改变的是请求体中字符集编码,(这个对于get是无效的,因为get的内容位于URL中)执行代码为:

request.setCharacterEncoding("utf-8");

这样就可以在控制台输出中文了,记住这里只是在控制台输出。

如果想要在浏览器界面输出中文不乱码,那么可以想一下,是谁在往页面上输出内容,正是服务器。所以我们只需要设置服务器发送响应时的编码即可,response就是Servlet中的一个内置响应对象。

response.setCharacterEncoding("utf-8");

response.setContentType("text/html");

//两条语句合并起来就是下面这句,实现效果一样

response.setContentType("text/html;charset=utf-8");

 2.超链接

超链接携带参数的写法:

<a href="/项目名称/具体Servlet界面?变量名=变量值">链接文字</a>

<a href="/WebProject/GetServletInfo?username=小明">超链接乱码测试</a>

当点击链接后,我们会发现URL地址中会显示携带参数,

扫描二维码关注公众号,回复: 3939775 查看本文章

所以说超链接提交本质上是get()提交,只需要用get处理方式就好了。

 3.重定向

重定向(sendRedirect)和重转发(foward)都是用来完成页面的跳转,两者不一样的地方是,重定向发生在浏览器,也就是说相当于在浏览器重发一次http请求,而重转发只是发生在服务器内部,通知服务器去调用另外一个web资源进行处理。重点是:他同样是发生在浏览器,相当于重写了一个页面,而服务器还是按原来iso-8859-1的解码方式接受,所以同样用getBytes()方法解决。

以下是重定向和重转发的区别:

 

猜你喜欢

转载自blog.csdn.net/qq_38341456/article/details/82941967