生活随笔
收集整理的這篇文章主要介紹了
JSP脚本 9大内置对象
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
簡(jiǎn)介
JSP腳一包含9個(gè)內(nèi)置對(duì)象,即JSP腳本規(guī)范對(duì)它們進(jìn)行了初始化,可以直接使用。 JSP內(nèi)置對(duì)象的實(shí)質(zhì):request與response是對(duì)應(yīng)Servlet的_jspService()方法的形參,其它則是該方法的局部變量。
1.application
application對(duì)象是ServletContext的實(shí)例。 在Servlet中沒有application對(duì)象,可通過如下代碼獲取
ServletContext application =
getServletConfig().getServletContext();
application可用于在JSP腳本中獲取web.xml中使用<context-param>配置的參數(shù)。如:
<% String user = application.getInitParameter("user" );%>
這也能說明<context-param>配置的參數(shù)對(duì)整個(gè)web應(yīng)用有效。對(duì)應(yīng)web.xml部分代碼:
<context-
param ><
param -name>user</
param -name><
param -
value >zhangchunling</
param -
value >
</context-
param >
4. Jsp與Servlet之間如何交換數(shù)據(jù)? Web服務(wù)器提供了4個(gè)類似Map結(jié)構(gòu)的容器:application、session、request、page
2. config
config對(duì)象是ServletConfig的實(shí)例,用得較少。 配置JSP也是在web.xml中配置的(比如為Jsp頁面設(shè)置另一個(gè)URL)。config對(duì)象可在JSP腳本中獲取web.xml中使用<init-param>配置的對(duì)數(shù)。 web.xml中對(duì)應(yīng)的配置JSP的代碼:
<servlet > <servlet-name > config
</servlet-name > <jsp-file > /configTest.jsp
</jsp-file > <init-param > <param-name > keyName
</param-name > <param-value > keyValue
</param-value > </init-param >
</servlet >
<servlet-mapping > <servlet-name > config
</servlet-name > <url-pattern > /config
</url-pattern >
</servlet-mapping >
對(duì)應(yīng)JSP腳本代碼:
<
%= config.getInitParameter(
"keyName" )
%>
注意 : 如果JSP頁面希望獲取web.xml中的配置信息,則必須通過為該JSP配置的路徑(/config)來訪問該JSP,因?yàn)橹挥羞@親,jsp頁面才會(huì)讓配置對(duì)數(shù)起作用。 如:localhost:8080…/config的訪問結(jié)果是:keyValue, 而localhost:8080…/configTest.jsp訪問的結(jié)果是:null。
3. exception
exception對(duì)象是Throwable的實(shí)例。 exception對(duì)象僅在異常處理頁面有效,它常用的兩個(gè)方法:getMessage()和printStackTrace(); Jsp頁面生成的Servlet類里的catch部分由異常處理頁面生成負(fù)責(zé),catch塊里的異常對(duì)象就是exception對(duì)象。 JSP的異常處理機(jī)制對(duì)JSP聲明不起作用,依然需要處理checked異常。 當(dāng)jsp頁面page指令的isErrorPage屬性為true時(shí),該jsp頁面就是異常處理頁面,所以該頁面也就會(huì)提供exception對(duì)象。
4.out
out對(duì)象是JspWriter的實(shí)例 out對(duì)象代表一個(gè)頁面輸出流,輸出內(nèi)容到HTML頁面。如out.println("<h1>h1號(hào)的字體</h1>");的結(jié)果是:<h1>h1號(hào)的字體</h1> 輸出表達(dá)式<%=…%>可替代out,因?yàn)檩敵霰磉_(dá)式的底層就是out.write(“…”);
5.pageContext
pageContext對(duì)象是PageContext的實(shí)例??稍L問application、session、request、page的變量。 添加值的兩個(gè)方法: setAttribute(String name); setAttribute(String name,int scope); //取指定范圍內(nèi)的name屬性的值。scope代表4個(gè)范圍: pageContext.APPLICATION_SCOPE,值為4 pageContext.SESSION_SCOPE,值為3 pageContext.REQUEST_SCOPE,值為2 pageContext.PAGE_SCOPE,值為1 兩個(gè)對(duì)應(yīng)的取值的方法: getAttribute(String name); getAttribute(String name,int Scope); //取指定范圍的name屬性的值 pageContext對(duì)象可獲取的其他內(nèi)置對(duì)象:
對(duì)象名對(duì)象類型獲取方法 request ServletRequest getRequest() response ServletResponse getResponse() config ServletConfig getServletConfig() application ServletContext getServletContext() session HttpSession getSession()
6. request
request對(duì)象是HttpServletReques的實(shí)例,每個(gè)request對(duì)象都封裝著一次用戶的請(qǐng)求,且所有請(qǐng)求參數(shù)都封裝在其中。 服務(wù)器通過JSP或Servlet解析請(qǐng)求頭或請(qǐng)求參數(shù),而JSP或Servlet獲取請(qǐng)求參數(shù)或請(qǐng)求頭的途徑就是request。我們有時(shí)會(huì)獲取請(qǐng)求頭的內(nèi)容,所以request很重要。 不是每個(gè)form表單都會(huì)生成請(qǐng)求參數(shù),而是有name屬性的表單才會(huì)生成。表單和請(qǐng)求參數(shù)的關(guān)系注意如下幾點(diǎn): 一個(gè)name屬性對(duì)應(yīng)一個(gè)請(qǐng)求參數(shù)。 如果有多個(gè)name屬性同名,則請(qǐng)求參數(shù)將以逗號(hào)拼接成串生成一個(gè)請(qǐng)求參數(shù)。 如果某個(gè)name表單域里設(shè)置了disabled=”disabled”,則該表單域不再生成請(qǐng)求參數(shù)。 request執(zhí)行forward或include 使用:getRequestDispatcher(String path)方法返回的RequestDispatcher實(shí)例對(duì)象后調(diào)用forward()或include()方法實(shí)現(xiàn),path以斜線開頭。 將a.jsp頁面include到本頁面: getRequestDispatcher(“a.jsp”).include(request,response); 轉(zhuǎn)發(fā)請(qǐng)求到b.jsp頁面: getRequestDispatcher(“b.jsp”).forward(request,response); POST請(qǐng)求與GET請(qǐng)求 GET方式請(qǐng)求:直接在地址欄里輸入訪問地址的請(qǐng)求 ,以及提交form表單默認(rèn)的請(qǐng)求(或是設(shè)form元素的method為get)都是GET請(qǐng)求。GET方式請(qǐng)求在地址欄里能看到請(qǐng)求參數(shù)名和值(不好),且該方式傳送數(shù)據(jù)量小,一般不大小2KB。 POST方式請(qǐng)求:要提交的表單的form元素的method屬性設(shè)為post的請(qǐng)求。該種方式請(qǐng)求傳輸?shù)臄?shù)據(jù)量比GET方式大,取決于服務(wù)器的限制。POST請(qǐng)求要發(fā)送的請(qǐng)求參數(shù)和對(duì)應(yīng)的值都放在HTML HEADER中傳輸 ,地址欄里看不到,相對(duì)安全。 GET方式請(qǐng)求處理中文參數(shù)亂碼: 將得到的內(nèi)容用URLDecoder類的decode()方法, 即:String dstr = URLDecoder.decode(request.getParameter(“userName”), “UTF-8”); POST方式請(qǐng)求處理中文參數(shù)亂碼: 需要在獲取請(qǐng)求參數(shù)之前調(diào)用setCharacterEncoding()方法設(shè)置編碼的字符集, 即:request.setCharacterEncoding(“GBK”); String name = request.getParameter(“userName”); 可在獲取請(qǐng)求參數(shù)值后對(duì)亂碼的參數(shù)值重新編碼得到正確的值。方法是將值轉(zhuǎn)換成字節(jié)數(shù)組,然后重新解碼成字符串: String name = request.getParameter(“userName”); byte[] b = name.getBytes(“ISO-8859-1”); String rightName = new String(b,”UTF-8”); 獲取cookie request.getCookies()方法能獲取請(qǐng)求里的所有cookie組成的數(shù)組。通過判斷cookie的名字判斷是哪個(gè)cookie。
7.response
response是HttpServletResponse的實(shí)例,代表服務(wù)器端對(duì)客戶端的響應(yīng) 。 response有響應(yīng)、重定向、向客戶端添加cookie等作用。 一般使用out對(duì)象生成簡(jiǎn)單的響應(yīng),但out對(duì)象是Writer類的子類,而Writer是字符流,無法輸出字節(jié)流。所以如果是圖片(或是PDF文檔,Excel)這類字節(jié)流還是得需要response作為響應(yīng)輸出。 重定向:response.sendRedirect(“c.jsp”); 與forward不同的是,因?yàn)橹囟ㄏ驅(qū)⑸傻诙握?qǐng)求,所以會(huì)丟失第一次請(qǐng)求的所有請(qǐng)求參數(shù)和request范圍的屬性。 添加cookie
Cookie c =
new Cookie(
"username" ,
"zhangchunling" );
c.setMaxAge(
24 *
60 *
60 );
response.addCookie(c);
Cookie值默認(rèn)不允許出現(xiàn)中文字符,如果有中文字符,則需要編碼:
Cookie c = new Cookie(
"username" ,java
.net .URLEncoder .encode (
"張春玲" ,
"GBK" ))
c
.setMaxAge (
24 *
3600 )
response
.addCookie (c)
在得到cookie后,又用java.netURLDecoder解碼cookie值即可。
8. session
session對(duì)象是HttpSession的實(shí)例,代表一次用戶會(huì)話 一次用戶會(huì)話:瀏覽器連接服務(wù)開始到與服務(wù)器斷開的過程。所以瀏覽器關(guān)閉,session就消失。 session常用于跟蹤用戶的會(huì)話信息,如判斷是否登錄或是購物車購買的商品等。其他信息一般不會(huì)放在session里。 session機(jī)制通常用于保存客戶端的狀態(tài)信息,這些狀態(tài)信息需要被保存到Web服務(wù)器的硬盤上,所以要求session里的屬性值必須是可序列化的 ,否則會(huì)有不可序列化的異常。session里的屬性值可以是任何可序列化的Java對(duì)象。 每個(gè)session都有一個(gè)ID,當(dāng)服務(wù)器與客戶建立會(huì)話后,session就會(huì)在內(nèi)存中保存一個(gè)jsessionId,然后放在響應(yīng)的header里給客戶端保存,客戶端繼續(xù)訪問時(shí),會(huì)將jsessionId封裝進(jìn)request當(dāng)中,這樣服務(wù)器就能判斷是新的會(huì)話還是已建立的會(huì)話。 所以,只要每次請(qǐng)求把服務(wù)器生成的jsessionId帶過去,服務(wù)器端就會(huì)認(rèn)為是同一個(gè)會(huì)話 。
9. page
page對(duì)象代表頁面本身(即Servlet中的this),沒多大用處,它的類型就是生成的Servlet類,能用page的地方就能用this。
總結(jié)
以上是生活随笔 為你收集整理的JSP脚本 9大内置对象 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。