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

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

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




import javax。servlet。http。HttpServlet;  

import javax。servlet。http。HttpServletRequest;  

import javax。servlet。http。HttpServletResponse;  

  

public class TestServlet extends HttpServlet {  

  

    private String username;  

  

    public void doGet(HttpServletRequest request;  

                    HttpServletResponse response)  

            throws ServletException; IOException {  

        this。username = request。getParameter(〃username〃);  

  

        try  {  

            Thread。sleep(10000);  

        } catch (InterruptedException ex) {  

        }  

  

        response。getWriter()。write(this。username);  

    }  

  

}   



                                             126 / 148  


…………………………………………………………Page 127……………………………………………………………

                                      



doGet()方法中从 request 中获得username 参数,然后赋给 this。username,这 

是一个类变量。然后暂停 10 秒,这 10 秒我们假设正在进行一些很费时间的计算, 

这样我们就有十秒钟去点两个页面的提交按钮了。最后将 this。username 写入 

response。  



你也许在想:“这没有问题啊,第一个页面提交了数据,等待 10 秒返回,第二 

个页面再提交数据,等待 10 秒返回,两者并不冲突啊。”可实际上在多线程模 

型中不会有这种队列让请求一个一个执行,所有请求都是蜂拥而至。  



在这个例子里,第一个请求过来将“叮咚”赋值给 this。username 后进行等待, 

10 秒之内我们的第二个请求又调用了 doGet()方法,并把 this。username 修改为 

 “lingirl”,等到 10 秒后第一个请求结束等待后,获得的 this。username 已经 

是“lingirl”了。  



this。username 这种写法在 servlet 中是绝对禁用的,如果有什么信息需要保存, 

可以考虑放到 session 或 ServletContext 中。  



14。3。 在 jsp 中定义类变量  



写在之间的代码,在转换成 servlet 之后都会 service()方法内运行,所以 

我们不必担心出现上边 this。username 的问题。  



但是我们可以用 (注意多出来的感叹号)定义类变量或类方法,把上一个 

罪大恶极的 servlet 改造成 jsp 的话,就像这样。  



  

  

   



注意  



使用 14…03 下的例子可以测试 jsp 出错的效果,记得要在 10 秒之内点击两次。  



                                   127 / 148  


…………………………………………………………Page 128……………………………………………………………

                                            



似乎是一个巨大的陷阱,如果我们使用它定义类变量就一定会出现多线程 

错误。  



不过凡事都有正反两面,当我们需要在 jsp 中定义一个通用方法时,就需要借助 

的力量了,假设我们需要一个方法,根据用户的性别显示不同的html 内容, 

如果 sex = 0 就输出红色的“男”,如果 sex = 1 就输出绿色的“女”。为实现 

这个功能,我们可以定义一个 sexRenderer()方法。  



14…04/index。jsp 页面显示效果如下:  



                                                             



index。jsp 中的代码分两部分。  



第一部分定义 sexRenderer()方法和  



   



第二部分循环显示保存了性别信息的数组,显示的时候将会调用 sexRenderer() 

方法。  



  

                  



                                        128 / 148  


…………………………………………………………Page 129……………………………………………………………

                                         



                      

                  

   



好的,现在我们知道可以在中定义方法和变量了。但是同时也要了解的是 

已经脱离了 service()方法,这就导致不能在它里边使用 request, 

response 这些默认变量了,如果想要调用 request 只能写成 void  

doSomething(HttpServletRequest request)的形式了,稍微注意一下即可。  



14。4。 jsp 九大默认对象  



分别是 request; response; out; pageContext; session; application; page;  

config; exception。  



让我们看看它们与 servlet 中变量的对应关系。  



首先要明确的是,这九个变量都只在中有效,中是无法调用这九个对 

象的。实际上最后会成为 service()方法中的代码,我们这里就看看如何在 

service()方法中获得这些对象吧。  



    1。  request  



       public void service(ServletRequest req; ServletResponse res) {  

           HttpServletRequest request  = (HttpServletRequest) req;  

       }  



       jsp 中的request 就是 service()中传入的req 参数,因为 service 中定 

       义的是 ServletRequest 类型,我们还需要转换成 HttpServletRequest 

       类型。  



    2。  response  



       public void service(ServletRequest req; ServletResponse res) {  

           HttpServletResponse response  = (HttpServletResponse) res;  

       }      



       与上例相同,response 也是 service()中传入的res 参数。  



    3。  out  



                                      129 / 148  


…………………………………………………………Page 130……………………………………………………………

                                       



   Writer out = response。getWriter();  



    out 对应着从 response 中取出的writer 对象,负责向响应中输出数据。 

    不过 jsp 和 servlet 中的 out 还是有一点区别,虽然它们都实现了 

    java。io。Writer 接口,但 servlet 中实际类型是 java。io。PrintWriter, 

    而 jsp 中实际类型是 javax。servlet。jsp。JspWriter。  



4。  pageContext  



    这是 jsp 独有的,servlet 里没有 page 的概念。  



5。  session  



   HttpSession session = request。getSession();     



   直接从 request 中获得会话。  



6。  application  



    ServletConext application =  

    getServletConfig()。getServletContext();     



    可以通过 servletConfig 获得 ServletContext,这是整个web 应用共享 

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