java四大域總結,java四大域
最近學完了web部分,發現有些地方總是單個容易理解,可是把所有的放在一起來大雜燴,總是有那麼幾個知識點容易混淆。其實網上的資料已經夠多了,雖然也不乏辛勞的搬運工。可是最終的目的不就是要我們自身理解嗎?自己理解了的東西才正真是我們的。作為額外的獎勵,我們先來關注一下JSP的九大隱式對象。
可以看看中關於JSP的九大隱式對象,它們可總是被老師們說是重點重點哦。
範圍------顧名思義,起作用的大小範圍也!如果是你自己去學習一個知識點,你要達到哪些目標才算是對一個知識點稱得上是懂得,理解,掌握呢?從扁神醫的望聞問切,到資料庫的增刪改查,所有的事物開始也不外乎:是什嗎?有什麼用?怎麼用?為什麼可以這麼用?故而,我覺得咱們應該把握以下問題,帶著這些問題去學習,發現自己的不足,才是學習的上策。
1)範圍的實際大小。(是什嗎?)
2) 範圍的作用。(有什麼用?)
3)怎麼使用這些範圍。(怎麼用?)
4)它這樣使用實現的原理。(為什麼可以這麼用?)
下面開始逐一分析:
(一)servletcontext域(application域)
1)範圍的實際大小。(是什嗎?)
servletcontext域起作用的範圍是:整個web應用程式。
資料產生之後,不僅等會還要用 ,還要給別人用,則請使用servletcontext。
它是四個域中範圍最大的域。
2) 範圍的作用。(有什麼用?)
由於一個web應用中的所有servlet共用同一個servletcontext對象,所以多個servlet通過servletcontext對象實現了資料在不同servlet之間的共用。
3)怎麼使用這些範圍。(怎麼用?)
a)可以通過編程的方式綁定,也可以作為web應用的全域變數被所有Servlet和JSPs訪問
設定Context屬性: ServletContext application=this.getServletContext(); application.setAttribute("person1",new Person("Jim")); application.setAttribute("person2",new Person("Green")); 擷取Context屬性: ServletContext application=this.getServletContext(); Enumberation persons=application.getAttributeNames(); while(persons.hasMoreElements()){ String name=(String)persons.nextElement(); Person p=(Person)persons.getAttribute(name); application.removeAttribute(name); }
b)為整個web應用配置context域:
修改web.xml設定檔,加入以下內容
<context -param>
<param-name>data</param-name>
<param-value>Hello world !</param-value>
</context - param>
從Servlet中訪問這些初始化參數:
ServletContext application=this.getServletContext();
out.println(application.getInitParameter("data"));
c)讀取資源檔
使用ServletContext介面可以直接存取web應用中的靜態內容文檔結構.包括HTML,GIF和JPEG檔案。如以下方法:
.getResource()
.getResourceAsStream()
這兩個方法的參數都是以"/"開頭的字串,表示資源相對於context根的相對路徑.文檔結構可以存在於伺服器檔案系統,或是war包中,或是在遠程伺服器上,抑或其他位置。不可以用來獲得動態資源,比如,getResource("/index.jsp"),這個方法將返回該jsp檔案的源碼,而不是動態網頁面.可以用 "DispatchingRequests" 獲得動態內容.列出web應用中可被訪問的資源,可以使用getResourcePaths(String path)方法。
4)它這樣使用實現的原理或優缺點。(為什麼可以這麼用?)
servlet並不適合做資料輸出,故需要將資料轉寄給JSP檔案進行美化再輸出給用戶端。
JSP中可嵌入java代碼,這使得它接收java資料變得可能。同時,由於servletcontext域可使整個web應用共用該資料,因此而帶來“安全執行緒”問題同樣影響對轉寄的資料,故而需要使用request域。
(二)Httpsession域(session域)
1)範圍的實際大小。(是什嗎?)
Httpsession的範圍是:一次會話。
資料產生之後顯示給使用者了,等會還要使用的情況下使用Httpsession域。
它是四個域中範圍第二大的域。
2) 範圍的作用。(有什麼用?)
(會話範圍)在第一次調用request.getSession()方法時,伺服器會檢查是否已經有對應的session。如果沒有,就在記憶體中建立一個session並返回。當一短時間內(預設30分鐘)session沒有被使用,則伺服器會銷毀該session。若伺服器非正常關閉,未到期的session也會跟著銷毀。若調用session提供的invalidate()方法,可以立即銷毀session。
3)怎麼使用這些範圍。(怎麼用?)
a) jsp中操作session (String)request.getSession().getAttribute("username"); // 擷取 request.getSession().setAttribute("username", "xxx"); // 設定 b) java中操作session //servlet中 request.getSession(); session.getAttribute("username"); session.setAttribute("username", "xxx"); session.setMaxInactiveInterval(30*60); session.invalidate(); //struts中方法1 ServletActionContext.getRequest().getSession().setAttribute("username", "xxx"); ServletActionContext.getRequest().getSession().getAttribute("username"); ServletActionContext.getRequest().getSession().setMaxInactiveInterval(30*60); ServletActionContext.getRequest().getSession().invalidate(); //struts中方法2 ActionContext.getContext().getSession().put("username", "xxx"); ActionContext.getContext().getSession().get("username"); ActionContext.getContext().getSession().clear(); c) web.xml中操作session <session-config> <session-timeout>30</session-timeout> </session-config> d) tomcat-->conf-->conf/web.xml <session-config> <session-timeout>30</session-timeout> </session-config>
4)它這樣使用實現的原理。(為什麼可以這麼用?)
HttpSession在伺服器中,為瀏覽器建立獨一無二的記憶體空間,在其中儲存了會話相關的資訊。伺服器建立session出來後,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問伺服器時,都 會帶著session的id號去,伺服器發現客戶機瀏覽器帶session id過來了,就會使用記憶體中與之對應的session為之服務。如果要問我為什麼,我也不知道啊!
(三)ServletRequest域(request域)
1)範圍的實際大小。(是什嗎?)
ServletRequset域是:整個請求鏈(請求轉寄也存在)。
資料產生之後,只需要使用一次,這種情況下請使用ServletRequset域。
它是四個域中範圍排第三的域。
2) 範圍的作用。(有什麼用?)
在整個請求鏈中共用資料。
最常用到:在servlet中處理好的資料交給JSP顯示,此時參數就可以放置在ServletRequset域中帶過去。
3)怎麼使用這些範圍。(怎麼用?)
a) 獲得客戶機資訊的方法
getRequestURL方法返回用戶端發出請求時的完整URL。
getRequestURI方法返回請求行中的資源名部分。
getQueryString 方法返回請求行中的參數部分。
getRemoteAddr方法返回傳出請求的客戶機的IP地址
getRemoteHost方法返回傳出請求的客戶機的完整主機名稱
getRemotePort方法返回客戶機所使用的網路連接埠號碼
getLocalAddr方法返回WEB伺服器的IP地址。
getLocalName方法返回WEB伺服器的主機名稱
getMethod得到客戶機請求方式
b) 獲得客戶機要求標頭
getHeader(string name)方法
getHeaders(String name)方法
getHeaderNames方法
c) 獲得客戶機請求參數(用戶端提交的資料)
getParameter(name)方法
getParameterValues(String name)方法
getParameterNames方法
getParameterMap方法
4)它這樣使用實現的原理。(為什麼可以這麼用?)
在service方法調用前由伺服器建立,傳入service方法。整個請求結束,request生命結束。
(四)PageContext域(page域)
1)範圍的實際大小。(是什嗎?)
PageContext域的作用範圍是:整個JSP頁面。
它是四個域中範圍最小的一個域。
2) 範圍的作用。(有什麼用?)
a) 它可以擷取其它八大隱式對象,可以認為它是一個入口對象。
b) 擷取其它所有域中的資料。
c) 跳轉到其它資源。其身上提供了forword和sendRedirect方法,簡化了轉寄和重新導向的操作。
3)怎麼使用這些範圍。(怎麼用?)
以下以一個簡單的JSP頁面程式為例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>pageContext對象_例1</title></head><body><br><%//使用pageContext設定屬性,該屬性預設在page範圍內pageContext.setAttribute("name","地球");request.setAttribute("name","太陽系");session.setAttribute("name","銀河系");//session.putValue("name","麥哲倫系");application.setAttribute("name","宇宙");%>page設定的值:<%=pageContext.getAttribute("name")%><br>request設定的值:<%=pageContext.getRequest().getAttribute("name")%><br>session設定的值:<%=pageContext.getSession().getAttribute("name")%><br>application設定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>範圍1內的值:<%=pageContext.getAttribute("name",1)%><br>範圍2內的值:<%=pageContext.getAttribute("name",2)%><br>範圍3內的值:<%=pageContext.getAttribute("name",3)%><br>範圍4內的值:<%=pageContext.getAttribute("name",4)%><br><!--從最小的範圍page開始,然後是reques、session以及application--><%pageContext.removeAttribute("name",3);%>pageContext修改後的session設定的值:<%=session.getValue("name")%><br><%pageContext.setAttribute("name","宇宙",4);%>pageContext修改後的application設定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>值的尋找:<%=pageContext.findAttribute("name")%><br>屬性name的範圍:<%=pageContext.getAttributesScope("name")%><br></body></html>
顯示結果:
page設定的值:地球request設定的值:太陽系session設定的值:銀河系application設定的值:宇宙範圍1內的值:地球範圍2內的值:太陽系範圍3內的值:銀河系範圍4內的值:宇宙pageContext修改後的session設定的值:nullpageContext修改後的application設定的值:宇宙值的尋找:地球屬性name的範圍:1
4)它這樣使用實現的原理。(為什麼可以這麼用?)
pageContext對象,這個對象代表頁面上下文,該對象主要用於訪問JSP之間的共用資料。當對JSP的請求時開始,當響應結束時銷毀。