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

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

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




    int b = fc + random。nextInt(bc fc);  

    return new Color(r; g; b);  

}  

%》  

   



captcha。jsp 中的代码与 servlet 基本相同,不过需要注意两点。  



    1。  在定义 Color getRandColor(int fc;int bc)的时候用到了的写法, 

       比普通多了一个叹号,这是在 jsp 中定义方法时必要的步骤,方法必 

       须写到中才能正常执行,感兴趣的话可以去 tomcat 的work 下找对 

       应生成的 java 代码来研究,看看和的代码分别生成到哪里。  

    2。  在 jsp 中使用response。getOutputStream()很可能引起一个问题。  



       getOutputStream() has already been called for this response  



                                      114 / 148  


…………………………………………………………Page 115……………………………………………………………

                                      



      在 tomcat5 下 jsp 中出现此错误,一般都是在 jsp 中使用了输出流(如输 

      出图片验证码,文件下载等)后没有妥善处理好。  



      具体的原因就是在 tomcat 中,jsp 转换成 servlet 之后在函数 

      _jspService(HttpServletRequest request; HttpServletResponse  

      response)的最后有一段这样的代码  



      finally  {  

          if  (_jspxFactory != null)  

      _jspxFactory。releasePageContext(_jspx_page_context);  

      }   



      这里是在释放在 jsp 中使用的对象,会调用response。getWriter(),因 

      为这个方法是和 response。getOutputStream()相冲突的,所以会出现以 

      上这个异常。  



      然后当然是要提出解决的办法,其实挺简单的(并不是和某些朋友说的那 

      样……将 jsp 内的所有空格和回车符号所有都删除掉),在使用完输出流以 

      后调用以下两行代码即可:  



      out。clear();  

      out = pageContext。pushBody();  



我们还需要修改 index。jsp,让其中的 img 标签请求 captcha。jsp。  



  



这里又一次证明了 html 写的仅仅是请求而已,src=〃include/captcha。jsp〃怎么 

看都不像一个图片的名称,但是它确实可以正确显示图片,因为服务器将请求交 

给 captcha。jsp,处理后得到是一个图片的数据,可以在浏览器里正常显示。  



captcha。jsp 放在 12…02/include 目录下,小项目中可以直接用它了。  



                                   115 / 148  


…………………………………………………………Page 116……………………………………………………………

                                         



                     第 13 章 剖析 el 表达式  



注意  



这里详细讲解如何在 jsp 中使用 el 表达式。  



如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章: 

第 14 章 生命周期。  



    1。  了解如何在 jsp 中使用及禁用 el 表达式。  

   2。  了解 el 表达式的取值方式。  



13。1。 再谈 el (Expression Language)  



我们已经知道 el 是 jsp…2。0 规范的一部分,tomcat…5。x 版本以上都已经能够支 

持 jsp…2。0 规范,但在更低版本的 tomcat 和 webphere;weblogic 中还是无法使 

用这一便捷方式。  



其实我们也可以选择在 jsp 中禁止使用 el 表达式,使用 jsp 指令(directive) 

可以对禁用某一个 jsp 中的 el 表达式。  



禁用之后的 el 表达式会以原样显示出来,如下图所示。  



                                                          



为了对照,我们还在 13…01 下放了一个可以正常使用 el 表达式的例子,运行效 

果如下图显示。  



                                                            



在 13…01/index。jsp 中禁用 el 表达式,是使用了 isELIgnore=〃true〃这样一条 

jsp 指令(directive),请注意大小写。  



  



                                      116 / 148  


…………………………………………………………Page 117……………………………………………………………

                                          



  

  

{hello}   



还有一种批量禁用 el 的方法,我们可以在WEB…INF/web。xml 中使用 

jsp…property…group 标签批量禁用 el,我们在 13…02/WEB…INF/web。xml 中进行 

如下配置。  



  

  

  

      

          

            *。jsp  

            true  

          

      

  

   



这样就会禁用所有以。jsp 后缀的请求中的 el 表达式,使用这种方式需要注意两 

点。  



    1。  jsp…property…group 标签是 jsp…2。0 中新增功能,如果你使用低版本的 

       web。xml (2。3 或以下)就不能使用这个标签了。  

    2。  设置 jsp…config 会影响 jsp 生成 servlet 的过程,如果程序修改时已经 

       有 jsp 转换成 servlet 并缓存在 work 目录下,那么修改后需要先清除缓 

       存,才能看到效果。  



实际上还有第三种方法可以禁用掉所有 jsp 中的 el 表达式,那就是把 web。xml 

定义为 2。3 版。  



  

  

  



                                      117 / 148  


…………………………………………………………Page 118……………………………………………………………

                                       



  



这个就是 13…03/WEB…INF/web。xml 的定义,定义了web…app 的版本号是 2。3,这 

样一来所有的 jsp 都无法使用 el 表达式了,因为 el 表达式是 2。4 版才开始支持 

的功能。  



注意  



说了以上三种禁用 el 表达式的方法,不是希望大家抛弃 el 表达式,相反是希望 

大家在自己编写 el 时出现问题时,先去考虑是否有人在这三个地方做了设置造 

成 el 表达式的失效。建议大家多多使用 el 表达式,少用一些 jsp 中的 scriptlet 

代码。  



13。2。 作用域  



使用 el 的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示 

出来。  



                                                                              



如果我们有{username}这样一个正则表达式,它回去依次调用 

pageContext。getAttribute(〃username〃) …》  

request。getAttribute(〃username〃) …》 session。getAttribute(〃username〃)  

…》 application。getAttribute(〃username〃),只要找到某一个不为空的值就立 

刻返回。  



这样的确方便我们的操作,但是随之也出现了另外一个问题,如果 pageContext 

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