JSP隱式對象和MVC設(shè)計(jì)模式
來源:易賢網(wǎng) 閱讀:807 次 日期:2015-09-06 16:03:04
溫馨提示:易賢網(wǎng)小編為您整理了“JSP隱式對象和MVC設(shè)計(jì)模式”,方便廣大網(wǎng)友查閱!

今天我們一起來了解一下關(guān)于JSP應(yīng)用的JSP的隱式對像和MVC設(shè)計(jì)模式。

首先我們先來說一下JSP的隱式對象:JSP隱式對象是Web容器加載的一組類的實(shí)例。它是可以直接在JSP頁面使用的對象。分為4個主要類別:1、 輸入和輸出對象:控制頁面的輸入和輸出(request、response、out)。

2、 作用域通信對象:檢索與JSP頁面的Servlet相關(guān)的信息(session、application、pageContext)。

3、 Servlet對象:提供有關(guān)頁面環(huán)境的信息(page、config)。

4、 錯誤對象:處理頁面中的錯誤(exception)。

我們先了解一下輸入和輸出對象:request對象:request隱式對象表示客戶端的請求,包含了所有的請求信息,常用的方法:voidsetContentType(String name):設(shè)置作為響應(yīng)生成的內(nèi)容的類型和字符編碼。

void sendRedirect(Stringname):發(fā)送一個響應(yīng)給瀏覽器,指示其應(yīng)請求另一個URL(會丟失數(shù)據(jù),跳轉(zhuǎn)后不再執(zhí)行sendRedirect方法下面的代碼。

out對象:在JSP頁面中應(yīng)使用out隱式對象來向客戶端發(fā)送文本形式的實(shí)體內(nèi)容。

out對象是通過調(diào)用pageContext對象的getOut方法返回的,其作用和用法與ServletResponse.getWriter方法返回的PrintWriter對象非常相似。

JSP頁面中的out隱式對象的類型為JspWriter,JspWriter相當(dāng)于一種帶緩存功能的PrintWriter,設(shè)置JSP頁面的page指令的buffer屬性可以調(diào)整它的緩存大小,甚至關(guān)閉它的緩存。

JSP頁面中的out隱式對象相當(dāng)于插入到ServletResponse.getWriter方法返回的PrintWriter對象前面的緩沖包裝類對象。

只有向out對象中寫入了內(nèi)容,且滿足如下任何一個條件時,out對象才去調(diào)用ServletResponse.getWriter方法,并通過該方法返回的PrintWriter對象將out對象的緩沖區(qū)中的內(nèi)容真正寫入到Servlet引擎提供的緩沖區(qū)中:設(shè)置page指令的buffer屬性關(guān)閉了out對象的緩存功能寫入到out對象中的內(nèi)容充滿了out對象的緩沖區(qū)整個JSP頁面結(jié)束作用域通信對象:pageContext對象是javax.servlet.jsp.PageContext類的實(shí)例對象,javax.servlet.jsp.PageContext類是javax.servlet.jsp.JspContext的子類。

pageContext對象是通過調(diào)用JspFactory.getPageContext方法返回的。

pageContext對象封裝了當(dāng)前JSP頁面的運(yùn)行信息,它提供了返回JSP頁面的其他隱式對象的方法。

在JSP頁面中只需將pageContext對象傳遞給某個Java類的實(shí)例對象,在該Java對象中就可以訪問和調(diào)用其他隱式對象的功能了。

pageContext對象使用戶可以訪問當(dāng)前頁面作用域中定義的所有隱式對象。

getException()方法返回exception隱式對象getPage()方法返回page隱式對象getRequest()方法返回request隱式對象getResponse()方法返回response隱式對象getServletConfig()方法返回config隱式對象getServletContext()方法返回application隱式對象getSession()方法返回session隱式對象getOut()方法返回out隱式對象PageContext類中定義了一個setAttribute方法來將對象存儲進(jìn)pageContext對象內(nèi)部的一個HashMap對象中,同時也定義了一個getAttribute方法來檢索存儲在該HashMap對象中的對象。

void setAttribute(String name, Object value)

Object getAttribute(String name)

(注意:PageContext類除了可以存儲和檢索自身中的屬性對象外,還定義了可以存儲和檢索其他域范圍內(nèi)的屬性對象的方法。)

在application、session、request、pageContext對象中都可以調(diào)用setAttribute方法和getAttribute方法來設(shè)置和檢索各自域范圍內(nèi)的屬性。

存儲在application對象中的屬性可以被同一個WEB應(yīng)用程序中的所有Servlet和JSP頁面訪問。

存儲在session對象中的屬性可以被屬于同一個會話的所有Servlet和JSP頁面訪問。

存儲在request對象中的屬性可以被屬于同一個請求的所有Servlet和JSP頁面訪問,例如使用PageContext.forward和PageContext.include方法連接起來的多個Servlet和JSP頁面。

存儲在pageContext對象中的屬性僅可以被當(dāng)前JSP頁面的當(dāng)前響應(yīng)過程中調(diào)用的各個組件訪問,例如,正在響應(yīng)當(dāng)前請求的JSP頁面和它調(diào)用的各個自定義標(biāo)簽類。

PageContext類中還提供了對各個域范圍的屬性進(jìn)行統(tǒng)一管理的方法,以簡化對各個域范圍內(nèi)的屬性的訪問。

public void setAttribute(java.lang.String name,java.lang.Object value,int scope)

public java.lang.Object getAttribute(String name,int scope)

其中參數(shù)scope的取值為:PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE publicvoid removeAttribute(String name)

publicvoid removeAttribute(String name,int scope)

getAttributeNamesInScope方法findAttribute方法PageContext類中定義了一個forward方 法和兩個include方法來分別簡化和替代RequestDispatcher.forward方法和 RequestDispatcher.include方法的調(diào)用:public void forward(java.lang.String relativeUrlPath)throwsjavax.servlet.ServletException,java.io.IOException public voidinclude(java.lang.String relativeUrlPath)

throwsjavax.servlet.ServletException,java.io.IOException public void include(java.lang.String relativeUrlPath,boolean flush)throws javax.servlet.ServletException,java.io.IOException傳遞給這些方法的資源路徑都只能是相對路徑,如 果路徑以“/”開頭,表示相對于當(dāng)前WEB應(yīng)用程序的根目錄,否則,表示相對于當(dāng)前JSP所映射到的訪問路徑。

session對象session對象表示用戶的會話狀況,用此項(xiàng)機(jī)制可以輕易識別每一個用戶,能保存和跟蹤用戶的會話狀態(tài)。session對象最常用的方法:void setAttribute(String name, Object value)

void getAttribute(String name)

application對象application對象作用于整個應(yīng)用程序,所有的客戶端窗口都可以共享該對象,從服務(wù)器開始就存在,直到服務(wù)器關(guān)閉為止。application對象最常用的方法:void setAttribute(String name, Object value):以名稱/值的方式,將一個對象的值存放到application中(存的值的類型為Object)。

void getAttribute(String name):根據(jù)名稱去獲取application中存放對象的值(獲取的值的類型為Object)。

設(shè)置context初始參數(shù)。在web.xml文件適當(dāng)?shù)奈恢迷黾觾?nèi)容:

<context-param> <param-name>website</param-name> <param-value>www.sohu.com</param-value> </context-param>

在JSP頁面中,使用applicatin對象的getInitParameter()方法可以取得 website參數(shù)對應(yīng)的參數(shù)值。在Servlet中用ServletContext對象的同名方法獲得參數(shù)值。

使用log()方法記錄日志。

可以使用application對象提供的log()方法,實(shí)現(xiàn)日志記錄功能,在Tomcat服務(wù)器中,記錄的日志都保存在Tomcat根目錄的logs目錄下。日志內(nèi)容分成不同文件進(jìn)行記錄。

Servlet對象:page對象page對象提供對網(wǎng)頁上定義的所有對象的訪問。page對象表示頁面本身,它是java.lang.Object類的一個實(shí)例。

config對象config對象存儲Servlet的一些初始信息。config對象是 javax.servlet.ServletConfig接口的一個實(shí)例,ServletConfig接口提供方法以檢索Servlet初始化參數(shù)。 config對象表示編譯JSP頁面的Servlet初始化數(shù)據(jù)的配置。

錯誤對象exception:exception對象處理JSP頁面中的錯誤:printStackTrace()方法用于顯示異常的堆棧跟蹤 在上面我們以經(jīng)介紹了JSP的隱式對象,下面我們來講一下MVC的設(shè)計(jì)模式:在開發(fā)一個軟件之前,必須先設(shè)計(jì)好其架構(gòu),一個基本的架構(gòu)思想是將軟件分成不 同的模塊,問題的關(guān)鍵就是如何劃分模塊。

MVC(模型-視圖-控制器)是20世紀(jì)80年代為Smalltalk-80編程語言發(fā)明的一種軟件設(shè)計(jì)模式,它是一種分離業(yè)務(wù)邏輯與顯示界面的設(shè)計(jì)方法。

MVC的模型(Model)部分負(fù)責(zé)管理程序的業(yè)務(wù)數(shù)據(jù),視圖(View)部分負(fù)責(zé)顯示界面,控制器(Controller)部分則負(fù)責(zé)與用戶進(jìn)行交互(接受請求和選擇響應(yīng)視圖)。

JSP的設(shè)計(jì)模式:JSP規(guī)范給出了使用JSP頁面構(gòu)建Web應(yīng)用程序的兩個方案—JSP模式1和模式2.兩個模式的區(qū)別在于處理的位置。

JSP模式1(JSP + JavaBean):在模式1的體系結(jié)構(gòu)中,JSP頁面負(fù)責(zé)處理請求并將響應(yīng)發(fā)送給客戶端。

Model1的典型的交換過程:首先用戶通過瀏覽器調(diào)用Web應(yīng)用中的JSP頁面,發(fā)送request請求,JSP頁面接收到瀏覽器的請求后,通過調(diào)用JavaBean對象的方法從數(shù)據(jù)庫中讀取數(shù)據(jù),然后JSP頁面再把數(shù)據(jù)返回瀏覽器,最終在瀏覽器中顯示相應(yīng)的信息。

優(yōu)點(diǎn):非常適合小型Web項(xiàng)目的快速開發(fā);對Java Web開發(fā)人員的技術(shù)要求不高。

弊端:Java和HTML柔和在一起,在Web項(xiàng)目開發(fā)的后期和維護(hù)階段會造成很大的困難。

JSP模式2(MVC):模式2體系結(jié)構(gòu)集成使用了Servlet和JSP頁面。在該模式中,JSP頁面用于表示層,并且Servlet負(fù)責(zé)處理各類任務(wù)。

Model2交互過程:首先用戶通過瀏覽器向Web應(yīng)用中的Servlet發(fā)送請求,Servlet接收到請求后實(shí)例化JavaBean對象, 調(diào)用JavaBean對象的方法,JavaBean對象返回從數(shù)據(jù)庫中讀取的數(shù)據(jù),Servlet選擇合適的JSP,并且把從數(shù)據(jù)庫中讀取的數(shù)據(jù)通過這個 JSP進(jìn)行顯示,最后JSP頁面把最終的結(jié)果返回給瀏覽器。

優(yōu)點(diǎn):業(yè)務(wù)邏輯和表示內(nèi)容得到了很好的分離,這種開發(fā)方式適合多人合作開發(fā)大型的項(xiàng)目。

弊端:Web項(xiàng)目開發(fā)的難度加大了,對開發(fā)人員的技術(shù)要求也提高了。

Servlet作為一個控制器,負(fù)責(zé)處理請求并創(chuàng)建JSP頁面所需的任何Bean.該控制器也負(fù)責(zé)確定將該請求傳遞到哪個JSP頁面。JSP頁面檢索Servlet創(chuàng)建的對象,并提取動態(tài)內(nèi)容插入在一個模板中。

注意:由于模型位于web服務(wù)器端,而最終的視圖位于用戶瀏覽器端,只有瀏覽器發(fā)出請求后,服務(wù)器才會做出響應(yīng),沒有請求就沒有響應(yīng),所以在 web應(yīng)用中難以實(shí)現(xiàn)模型的“狀態(tài)改變通知”事件,視圖不能隨著模型的改變而自動更新。由于在web應(yīng)用中無法完全實(shí)現(xiàn)真正意義上的mvc模型,模式2只 能算是mvc設(shè)計(jì)模式的一種變體,有人干脆將他稱之為“webMVC”。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JSP隱式對象和MVC設(shè)計(jì)模式
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)