最近學完了web部分,發現有些地方總是單一容易理解,可是把所有的放在一起來大雜燴,總是有那麼幾個知識點容易混淆。其實網路上的資料已經夠多了,雖然也不乏辛勞的搬運工。可是最終的目的不就是要我們自身理解嗎?自己理解了的東西才正真是我們的。作為額外的獎勵,我們先來關註一下JSP的九大隱式物件。
可以看看下圖中關於JSP的九大隱式對象,它們可總是被老師們說是重點重點哦。
#
作用域------顧名思義,起作用的大小範圍也是!如果是你自己去學習一個知識點,你要達到哪些目標才算是對一個知識點稱得上是懂得,理解,掌握呢?從扁神醫的望聞問切,到資料庫的增刪改查,所有的事物開始也不外乎:是什麼?有什麼用?怎麼用?為什麼可以這麼用?故而,我覺得咱們應該把握以下問題,帶著這些問題去學習,發現自己的不足,才是學習的上策。
1)作用域的實際大小。 (是什麼?)
2)作用域的作用。 (有什麼用?)
3)怎麼使用這些作用域。 (怎麼用?)
4)它這樣使用實作的原則。 (為什麼可以這麼用?)
下面開始逐一分析:
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域:
#######
#
## 從Servlet存取這些初始化參數:
# 從Servlet存取這些初始化參數:
# ServletContext application=this.getServletContext();
out.println(application.getInitParameter("data"));
### c)讀取資源檔案#########
使用ServletContext介面可以直接存取web應用程式中的靜態內容文檔結構.包括HTML,GIF和JPEG檔案。下列方法:
.getResource()
.getResourceAsStream()
這兩個方法的參數都是以根的相對路徑.文檔結構可以存在於伺服器檔案系統,或是war套件中,或是在遠端伺服器上,抑或其他位置。不可以用來獲得動態資源,比如,getResource("/index.jsp"),這個方法將返回該jsp文件的源碼,而不是動態頁面.可以用"Dispatching Requests" 獲得動態內容.列出web應用中可被存取的資源,可以使用getResourcePaths(String path)方法。
4)使用此使用實作的原則或優點和缺點。 (為什麼可以這麼用?)
servlet不適合做資料輸出,故需要將資料轉送JSP檔案進行美化再輸出給客戶端。
JSP中可嵌入java程式碼,這使得它接收java資料變得可能。同時,由於servletcontext域可使整個web應用程式共享該數據,因此而帶來「線程
安全」問題同樣影響對轉發的數據,故而需要使用request域。
(二)Httpsession域(session域)
Httpsession的作用域是:一次會話。
資料產生之後顯示給使用者了,等會還要使用的情況下使用Httpsession域。
它是四个域中范围第二大的域。 2) 作用域的作用。(有什么用?) (会话范围)在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session。如果没有,就在内存中创建一个session并返回。当一短时间内(默认30分钟)session没有被使用,则服务器会销毁该session。若服务器非正常关闭,未到期的session也会跟着销毁。若调用session提供的invalidate()方法,可以立即销毁session。 3)怎么使用这些作用域。(怎么用?) 4)它这样使用实现的原理。(为什么可以这么用?) HttpSession在服务器中,为浏览器创建独一无二的内存空间,在其中保存了会话相关的信息。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都 会带着session的id号去,服务器发现客户机浏览器带session
id过来了,就会使用内存中与之对应的session为之服务。如果要问我为什么,我也不知道啊! 1)作用域的实际大小。(是什么?) ServletRequset域是:整个请求链(请求转发也存在)。 数据产生之后,只需要使用一次,这种情况下请使用ServletRequset域。 它是四個域中範圍排第三的域。 2) 作用域的功能。 (有什麼用?) 在整個請求鏈中共享資料。 最常用到:在servlet中處理好的資料交給JSP顯示,此時參數就可以放置在ServletRequset域中帶過去。 3)怎麼使用這些作用域。 (怎麼用?) a) 取得客戶機資訊的方法 1)作用域的实际大小。(是什么?) PageContext域的作用范围是:整个JSP页面。 它是四个域中范围最小的一个域。 2) 作用域的作用。(有什么用?) b) 获取其它所有域中的数据。 c) 跳转到其它资源。其身上提供了forword和sendRedirect方法,简化了转发和重定向的操作。 3)怎么使用这些作用域。(怎么用?) 以下以一个简单的JSP页面程序为例: 显示结果: 4)它这样使用实现的原理。(为什么可以这么用?) pageContext對象,這個對象代表頁面上下文,該對象主要用於存取JSP之間的共享資料。當對JSP的請求時開始,當回應結束時銷毀。 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>
(三)ServletRequest域(request域)
getRequestURL方法傳回客戶端發出請求時的完整URL。
getRequestURI方法傳回請求行中的資源名稱部分。
getQueryString 方法傳回請求列中的參數部分。
getRemoteAddr方法傳回發出請求的客戶機的IP位址
getRemoteHost方法傳回發出請求的客戶機的完整主機名稱
伺服器的IP位址。
getLocal
Name方法返回WEB伺服器的主機名稱 getMethod得到客戶機請求方式
b) 取得客戶機請求頭
。 ## getParameterValues(String name)方法
getParameterNames方法 getParameterMap
#4#它)這樣使用它的原則。 (為什麼可以這麼用?)
在service方法呼叫前由伺服器創建,傳入service方法。整個請求結束,request生命結束。 (四)PageContext域(page域)
a) 它可以获取其它八大隐式对象,可以认为它是一个入口对象。<%@ 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
以上是最全的java四大域總結(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!