天天看點

《Servlet和JSP學習指南》一3.3 隐式對象

servlet容器将幾個對象傳給它所運作的servlet。例如,在servlet的service方法中獲得httpservletrequest和httpservletresponse,并在init方法中獲得servletconfig。此外,還可以通過在httpservletrequest對象中調用getsession獲得一個httpsession。

在jsp中,可以通過使用隐式對象來擷取那些對象。表3-1列出了隐式對象。

例如,隐式對象request表示由servlet/jsp容器傳給servlet的service方法的httpservletrequest。可以像使用httpservletrequest的變量引用一樣使用request。例如,以下代碼是從httpservletrequest對象處擷取username參數。

《Servlet和JSP學習指南》一3.3 隐式對象

pagecontext是指為頁面建立的javax.servlet.jsp.pagecontext。它提供了有用的context資訊,并通過一些名如其義的方法來通路與servlet有關的各種對象,例如,getrequest、getresponse、getservletcontext、getservletconfig及getsession。這些方法在scriptlet中作用不大,因為它們所傳回的對象可以通過隐式對象request、response、session及application更直接地通路到。但是,如第4章所述,pagecontext允許利用expression language通路那些對象。

《Servlet和JSP學習指南》一3.3 隐式對象

pagecontext提供的另一些重要的方法是那些存取屬性,如getattribute和setattribute方法。屬性可以儲存在以下4種範圍中:page、request、session及application。page範圍最窄,儲存在這裡的屬性隻能在同一個jsp頁面中使用。request範圍是指目前的servletrequest,session範圍是指目前的httpsession,application範圍是指servlet-context。

pagecontext中的setattribute方法具有以下簽名:

《Servlet和JSP學習指南》一3.3 隐式對象

scope值可以是以下任意一個pagecontext中的static final int值:page_scope、request_scope、session_scope及application_scope。

另外,屬性也可以儲存在page範圍中,可以利用下面這個setattribute方法重載:

《Servlet和JSP學習指南》一3.3 隐式對象

例如,下面這個scriptlet在servletrequest中儲存了一個屬性。

《Servlet和JSP學習指南》一3.3 隐式對象

上述代碼與下面這行代碼的效果是一樣的:

《Servlet和JSP學習指南》一3.3 隐式對象

隐式對象out引用javax.servlet.jsp.jspwriter,它類似于在httpservletresponse中調用getwriter()之後得到的java.io.printwriter。也可以調用它的print方法重載printwriter,将消息發送到浏覽器。例如:

《Servlet和JSP學習指南》一3.3 隐式對象

代碼清單3-3中的implicitobjects.jsp頁面示範了部分隐式對象的用法。

《Servlet和JSP學習指南》一3.3 隐式對象

可以利用下面這個url調用implicitobjects.jsp頁面:

《Servlet和JSP學習指南》一3.3 隐式對象

這個頁面在浏覽器中産生了以下文本:

《Servlet和JSP學習指南》一3.3 隐式對象
《Servlet和JSP學習指南》一3.3 隐式對象

你在浏覽器中看到的具體内容取決于你使用什麼樣的浏覽器,及其所處的環境。

注意,在預設情況下,jsp編譯器是将jsp頁面的内容類型設為text/html。如果你發送了另一種不同的類型,就必須通過調用response.setcontenttype()或者利用page指令(詳情檢視3.4節)來設定内容類型。例如,下面的代碼就是将内容類型設為text/json:

《Servlet和JSP學習指南》一3.3 隐式對象

還要注意,隐式對象page表示目前的jsp頁面,一般不為jsp頁面的設計者所用。