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

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

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






在 Catalina/localhost/06…01/org/apache/jsp 目录下,可以看到两个文件,分 

别是 hello_jsp。class 和 hello_jsp。java。  



                                                                                                             



打开 hello_jsp。java 可以看到里边的源代码,我们只挑出其中一部分来看。  



out = pageContext。getOut();  

_jspx_out = out;  



                                                            61 / 148  


…………………………………………………………Page 62……………………………………………………………

                                         



  

out。write(〃hello〃);  



获得 pageContext 的输出流并将〃hello〃写入,于是浏览器上就看到了 hello 的 

字样。  



是的,这里的 hello_jsp。java 就是由 hello。jsp 生成的。服务器在获得请求的 

时候会先根据 jsp 页面生成一个 java 文件,然后使用 jdk 的编译器将此文件编 

译,最后运行得到的 class 文件处理用户的请求返回响应。如果再有请求访问这 

jsp 页面,服务器会先检查 jsp 文件是否被修改过,如果被修改过,则重新生成 

java 重新编译,如果没有,就直接运行上次得到的 class。  



                                                         



为什么第一次访问 jsp 的时候速度会那么慢?就是因为要经过生成 java 和编译 

class 的步骤。以后再次访问同一页面就会感觉到速度明显变快,也是因为 class 

文件已经生成的原因。  



为什么 jsp 要经过这些步骤转换成 servlet 再去执行呢?因为 java 起初做网站 

的时候就只有 servlet 可以使用,为此还专门指定了一套 servlet 标准,就是我 

们在代码中看到的 javax。servlet包下的类。但是人们马上就发现,使用 servlet 



                                      62 / 148  


…………………………………………………………Page 63……………………………………………………………

                                      



显示复杂页面太费力气了,使用 servlet 里的输出方式简直让人写到手抽筋,于 

是就有了仿效 asp 和 php 的 jsp 出现,开发人员可以在美工做好的页面上直接嵌 

入代码,然后让服务器将 jsp 转换成 servlet 执行。  



有的朋友可能迷糊了,既然 jsp 是为了简化 servlet 开发,那么为什么我们现在 

又要去学习 servlet?既然 servlet 那么麻烦为什么不直接使用 jsp 就好了呢?  



这是因为 jsp 虽然比 servlet 灵活,却容易出错,你找不到良好的方式来测试 

jsp 中代码,尤其在需要进行复杂的业务逻辑时,这一点儿很可能成为致命伤。 

所以一般都不允许在 jsp 里出现业务操作有关的代码,从这点来看,我们上一章 

中举的例子就严重违反了这一标准,CRUD 的操作都写在了 jsp 这种,一旦出现 

问题就会让维护人员头大如斗。  



servlet 是一个 java 类,需要编译之后才能使用,虽然显示页面的时候会让人 

头疼,不过在进行业务操作和数据运算方面就比 jsp 稳健太多了。因此我们就要 

结合两者的优点,在 servlet 进行业务操作和请求转发,jsp 全面负责页面显示, 

这也是目前公司企业里常用的开发方式。  



                                                       



6。3。 使用 servlet 改写联系簿  



                                   63 / 148  


…………………………………………………………Page 64……………………………………………………………

                                      



既然 jsp 就是 servlet,jsp 中的那些功能在 servlet 中也就都可以实现,当然 

咱们不能再使用 jsp 指令(directive)和 jsp 动作(action)了,不过它们也 

都有替代方法,我们以后慢慢介绍。  



现在我们使用 servlet 改写第五章中联系簿的例子,将 CRUD 操作都转移到 

servlet 中,让 jsp 只负责页面显示。  



新建一个 ContactServlet。java,让它负责处理那些CRUD 操作,它会直接引用 

ContactDao 操作数据,现在我们可以把 jsp 中对ContactDao 的引用删除了,所 

有数据都将由 ContactServlet 提供,现在 jsp 只管从 request 里取出数据显示 

出来即可。  



为了让ContactServlet 起作用,在 web。xml 中添加处理请求的配置。  



  

    ContactServlet  

    anni。ContactServlet  

  

  

  

    ContactServlet  

    /contact。do  

     



servlet 标签指定使用 anni。ContactServlet,servlet…mapping 将它绑定到 

/contact。do 请求上,当我们看到浏览器上出现 

http://localhost:8080/06…02/contact。do 的时候,就表明ContactServlet 在 

起作用了。  



请别 06…02 目录下去找contact。do 这个文件,它是不存在的。与之前提到的 

forward()情况类似,虽然浏览器指定要 contact。do 这个资源,但服务器暗地里 

把这个请求交给 ContactServlet 处理,你可以把 contact。do 当作一个地址,实 

际上你要找的人是 ContactServlet。  



不管怎样,只要是对 contact。do 发起的请求,最后都是由 ContactServlet 处理。 

我们依然继承 HttpServlet,不过这次实现两个方法 doGet()和 doPost()分别处 

理 http 的GET 和 POST 方式的请求。使用 GET 方式的请求会交由 doGet()方法处 

理,使用 POST 方法的请求会交给 doPost()处理,这些都是由 HttpServlet 控制 

的,我们可以直接使用。  



/**  

 * 处理 get 请求。  

 */  



                                  64 / 148  


…………………………………………………………Page 65……………………………………………………………

                                             



public void doGet(HttpServletRequest request; HttpServletResponse  

response)  

    throws ServletException; IOException {  

  

    this。process(request; response);  

}  

  

/**  

 * 处理 post 请求  

 */  

public void doPost(HttpServletRequest request;HttpServletResponse  

response)  

    throws ServletException; IOException {  

  

    this。process(request; response);  

}     



为了方便,我们把 GET 和 POST 请求都交给 process()方法处理,在 process() 

中根据不同的请求进行不同的操作。  



/**  

 * 处理请求。  

 */  

public void process(HttpServletRequest request;HttpServletResponse  

response)  

    throws ServletException; IOException {  

  

    request。setCharacterEncoding(〃gb2312〃);  

  

    String method = request。getParameter(〃method〃);  

    if  (method == null) {  

        method = 〃list〃 ;  

    }  

  

    try  {  

        // 分发请求  

        if  (〃list〃。equals(method)) {  

            this。list(request; response);  

        } else if  (〃save〃。equals(method)) {  

            this。save(request; response);  

        } else if  (〃edit〃。equals(method)) {  

            this。edit(request; response);  

        } else if  (〃update〃。equals(method)) {  

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