[861]ScalersTalk成长会Java小组第8周学习笔记

[861]ScalersTalk成长会Java小组第8周学习笔记
Scalers点评:这是成长会Java小组第8周学习笔记,Java小组是成长会内部专研Java的小组,目前仅面向成长会成员开放。

往期日志:

JSP Servlet中文乱码处理

JSP,Servlet开发中常会遇到乱码,主要有以下几个地方可以设置编码,pageEncoding=”UTF-8”、 contentType=”text/html;charset=UTF-8”、
request.setCharacterEncoding(“UTF- 8”)和
response.setCharacterEncoding(“UTF-8”)。究竟要使用哪个才能起用?

分析一下

一、数据提交的方式:

1、表单POST方法提交

2、表单GET方法提交

3、超链接 <a href=“myServlet?id=1&name=yong”>转入

4、在URL地址栏中直接输入

其中2、3、4都属于GET方式提交,特点明显:在URL地址栏或状态栏中看得到提交的参数值、参数值。

二、服务器端获取数据:

在JSP、Servlet中都是:

用request.getParameter(“param”)来获取。

如果提交的是数组,用
request.getParameterValues(“params”)来获取。

注意:此时在页面中不能用EL表达$name由于EL表达式$name是取出某一作用域范围中名称为name的变量。(依序从Page、Request、Session、Application范围查找)

三、乱码处理:

1、
request.setCharacterEncoding:是设置从request中取得的值。指定后可以通过getParameter则直接获得正确的字符串,如果不指定,则默认使用
iso8859-1编码。

值得注意的是在执行setCharacterEncoding之前,不能执行任何getParameter。

而且,该指定只对POST方法有效,对GET方法无效。

对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding自然就无效。GET方法是iso8859-1方式编码提交的。

2、GET方法提交乱码处理:

(1)强制转码:new String(str.getBytes(“iso-8859-1”),”UTF-8”));

以iso8859编码方式获取字节数组,再以utf-8方式进行编码。

(2)TOMCAT配置文件server.xml修改,增加URIEncoding=”utf-8”

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>

这个修改也只对GET方法提交数据起作用。

四、response.setContentType

  1. response.setContentType指定 HTTP 响应的编码,同时指定了浏览器显示的编码。


  2. response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用
    response.setCharacterEncoding指定的编码格式覆盖之前的设置.

  3. 与response.setContentType一样的是,调用此方法,必须在getWriter执行之前或者response被提交之前。

    (监听器处理乱码另文再述,本文不涉及由数据库引起的乱码。)

ScalersTalkID:scalerstalk

本微信公众号作者Scalers,游走在口译世界的IT从业者。微信公众号ScalersTalk,微博@Scalers,网站ScalersTalk.com,口译100小时训练计划群C 456036104

成长会是由Scalers发起的面向成长、实践行动,且凝聚了来自全球各地各行各业从业者的社群。有意入会者请和Scalers直接联系,我和其他会员会和你直接交流关于成长行动等各方面的经验教训。2016年成长会持续招募中,参见做能说会写的持续行动者:ScalersTalk成长会2016年会员计划介绍(2016.3更新)

© 版权声明

相关文章

暂无评论

none
暂无评论...