按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
title
meta 部分用来指定当前 html 的编码格式,注意这一段要放在head 标签
中,并且放到head 标签的最前面,如果不是最前面 ie 下可能会出现问题,
尤其是在 title 中有中文的情况下。
完成了以上三段检验,我们才能保证输出的 jsp 页面会正常显示中文。
例子在 lingo…sample/02…02/下,正常显示的页面 index。jsp,还留了一个乱码
页面 index_wrong。jsp。
22 / 148
…………………………………………………………Page 23……………………………………………………………
2。2。2。 POST 乱码
先把 form 里加上 method=〃POST〃,让 form 提交的时候使用 POST 方式。
发送请求的时候,使用的编码是 iso…8859…1,意味着只有英文是有效字符,这
个限制是因为当初指定 http 标准的成员都来自英语国家,所以如果使用默认的
方式从请求获取数据,中文一定会全部变成乱码。
如果不信,你可以在刚才的例子里输入中文,然后提交:
提交结果就会变成这样:
怎么解决呢?我们要 jsp 最前面加上一条 java 语句,设置请求的字符编码。
于是,那些乱码都正常了:
例子在 lingo…sample/02…03/下。
2。2。3。 GET 乱码
直接点击超链接,form 的默认提交方式都是GET。
POST 方式下的解决方式还算简单,因为 POST 方式下提交的数据都是以二进制的
方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决。
23 / 148
…………………………………………………………Page 24……………………………………………………………
GET 方式下会将参数直接附加到 url 后面,这部分参数无法使用
request。setCharacterEncoding()处理,结果就是 get 形式的所有中文都变成了
乱码。
这时再也没有简便方法了,只能对这些中文一个一个进行转换,使用 new
String(bytes; 〃gb2312〃)进行转码。
如我们所见,先从 request 中获得参数,接着把字符串按照 iso…8859…1 编码打
散成 byte 数组,然后用 gb2312 编码组合成新字符串,最后打印出来就是正常的
中文了。
写在一起就变成了:
这样做的缺点,是从请求中取得的所有中文都需要转码,非常烦琐。
所以大家千万不要像这样测试,把中
文参数写到超链接中,form 尽量使用 method=〃POST〃,这样只需要设置
request。setCharacterEncoding()就可以应付中文乱码问题。
例子在 lingo…sample/02…04/下。
经历了这些只有非英语体系国家才能遇到的波折之后,我们的 jsp 终于可以接受
请求中的参数,并正常响应了。下面将要进行更复杂的请求响应流程。
24 / 148
…………………………………………………………Page 25……………………………………………………………
第 3 章 请求的跳转与转发
注意
应用广泛,而又没几个人明白的东西上场了,这章就只讨论这一个问题。
如果你确认自己明白下面这个问题,请直接进入下一章:第 4 章 四个作用域。
1。 forward; redirect 的区别。
3。1。 范例
这次用户可以在首页选择自己喜欢的颜色,进入对应的页面。
选择绿色,会进入绿色界面:
选择红色,会进入红色界面:
好的,这里我们会看到四个页面:
1。 index。jsp 中选择颜色,点击按钮后提交到 test。jsp。
2。 test。jsp 取得用户选择的颜色,根据颜色值显示对应的页面。
3。 如果选择了红色,就显示 red。jsp。
4。 如果选择了绿色,就显示 green。jsp。
在这里例子里,index。jsp,red。jsp,green。jsp 中的内容都是一样的,所有的
玄机都在 test。jsp 中。
25 / 148
…………………………………………………………Page 26……………………………………………………………
现在面临的问题是如何在 test。jsp 决定实现 red。jsp 或者 green。jsp,我们可
以在forward 和 redirect 中任选其一。
3。2。 如果用 forward
test。jsp 中需要这样写:
略过取得参数与比较参数值不提,只关注 forward 的部分:
request。getRequestDispatcher(〃red。jsp〃)。forward(request; response);
首先调用 request 的 getRequestDispatcher()方法,获得对应 red。jsp 的转发
器,然后调用 forward()方法执行请求转发。结果用户看到的就是 red。jsp 中的
结果了,一个红色的页面。
这里请大家注意一下浏览器的 url 地址:
选择红色页面时:
选择绿色页面时:
26 / 148
…………………………………………………………Page 27……………………………………………………………
于是,无论转发至 red。jsp 还是 green。jsp,地址栏上显示的都是 test。jsp。
这是为什么呢?通过下面的流程图会让我们容易理解:
1。 浏览器向 test。jsp 发送请求。