友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JSP入门教程(DOC格式)-第5章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






虽然咱们都知道这只是从请求中获得了用户名,加上欢迎信息再发送回浏览器, 

但最终用户会感到更亲切。下面就让我们来看一下如何从请求获得参数吧。  



首先用户输入页面会是这样的:  



  

    username :   

      

      

   



这里是一个简单的 form,里面只有一个名叫username 的文本框,点击提交之后 

它的值就会提交到后台服务器上的 test。jsp。那么在 jsp 里,咱们如何得到用 

户输入的 username 呢?  



Hello   



呼呼,原来就这么简单,前面的 Hello 是一成不变的,后面紧接包含的 java 

代码。  



只要是中间的部分就会被当成 java 代码执行,咱们就来看看 jsp 里是通过 

什么途径获得请求中的参数吧。  



首先是 request,翻译过来就是请求,它被称作 jsp 九大默认对象之一,与 http 

请求相关的操作都是通过 request 实现的,你完全可以把它看作是浏览器发送过 

来的 http 请求。  



请求里就包含了我们需要获得的参数,你想要知道 username 的值吗?好的,只 

要调用 getParameter(〃username〃)就可以获得了,你交给 request 一个参数名, 

它会返回对应的参数值,因为 http 协议的限制,获得的参数值都是字符串,不 



                                     20 / 148  


…………………………………………………………Page 21……………………………………………………………

                                 



过在参数不存在的时候,也会返回 null,所以一定要记住在使用之前判断是否 

为 null,免得频繁出现NullPointerException。  



好了,现在我们把得到的参数值输出即可,你可以对语句前面的等号感到疑惑, 

它的意思就是把参数值输出到页面上,你也可以使用另一种方法:  



Hello   



上一种方法可以看作是它的简化形式,请注意如果使用第一种方法,是不需要在 

java 代码最后加上分号的,而第二种方法必须加上分号。因为第一种方法是特 

殊的简化写法,第二种方法是标准的 java 代码,稍微留意一下就可以区分了。  



例子在 lingo…sample/02…01/,将目录复制到 tomcat 的webapp 目录下,启动 

tomcat 后可以访问 http://localhost:8080/02…01/进行测试。  



2。2。  中文乱码  



你有没有发现,我们的例子中没有中文?  



并不是我们不想使用中文,那是因为在 jsp 中使用中文是一个历史悠久的大问 

题,虽然等你解决了之后会觉得它是那么简单,但对于没经验的新手来说,中文 

乱码问题足以搞得他们焦头烂额了。  



现在我们就要带领你闯过这道关,消灭掉请求和响应中可能出现的乱码,还中文 

英雄本色。  



2。2。1。 先解决响应中的乱码  



何为响应中的乱码?把页面中的“username”改成“用户名”你就知道了。  



                                              



所谓响应中的乱码,就是显示页面上的乱码,因为页面数据是从服务器一端放入 

响应(response)中,然后发送给浏览器,如果响应中的数据无法被正常解析, 

就会出现乱码问题。  



为什么英文就没有问题呢?因为在 iso…8859…1,gb2312; utf…8 以及任意一种编 

码格式下,英文编码格式都是一样的,每个字符占 8 位,而中文就麻烦了,在 

gb2312 下一个中文占 16 位,两字节,而在 utf…8 下一个中文要占 24 位,三字 

节。浏览器在不知道确定编码方式的情况下,就会把这些字符从中间截断,再显 



                              21 / 148  


…………………………………………………………Page 22……………………………………………………………

                                       



示的时候就乱掉了。所以,想要解决乱码问题,就是要告诉浏览器我们到底使用 

了什么样的编码方式。  



为了获得正常显示的中文,需要注意以下几步:  



   1。  因为服务器要先从本地读取 jsp 文件,然后经过处理后写入响应,所以我 

      们首先要知道的就是 jsp 文件的编码格式。从问题的源头着手解决。  



      在咱们用的 windowxp 下,文件默认的编码格式是 gb2312。  



   2。  我们要在 http 的响应(response)中添加编码信息,使用如下方式:  



          



      这段要放在 jsp 页面的第一行,用来指定响应的类型和编码格式, 

      contentType 为 text/html 就是 html 内容,charset 表示编码为 gb2312。 

      这样浏览器就可以从响应中获得编码格式了。  



      这种的形式叫做 jsp 指令(directive),现在接触到的是page 

      指令,还有 include 和 taglib 指令,我们会在后面陆续讲到。  



   3。  还需要在 html 中指定编码格式。  



        

          

          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。 范例  



这次用户可以在首页选择自己喜欢的颜色,进入对应的页面。  



                                                       



选择绿色,会进入绿色界面:  



                                                       



选择红色,会进入红色界面:  



                                                       



好的,这里我们会看到四个页面:  


返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!