Struts,JSP和XML解析三個問題

1.struts的結構體系,每個結構的簡介

    MVC即Model-View-Controller的縮寫,是一種常用的設計模式。MVC減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富於變化。MVC的工作原理,如下圖所示:

    Struts是MVC的一種實現,它將Servlet和JSP標記(屬於J2EE規範)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴展。Struts的體系結構與工作原理如下圖所示:

     從圖中我們可以知道,Struts的體系結構包括模型(Model),視圖(View)和控制器(Controller)三部分。

    下面讓我們從MVC角度來看看struts的體系結構與工作原理:

    ① 模型(Model)

       在Struts的體系結構中,模型分爲兩個部分:系統中的內部狀態和可以改變狀態的操作(事務邏輯)。內部狀態通常由一組Actionform Bean表示。根據設計或應用程序複雜度的不同,這些Bean可以是自包含的並具有持續的狀態,或只在需要時才獲得數據(從某個數據庫)。大型應用程序通常在方法內部封裝事務邏輯(操作),這些方法可以被擁有狀態信息的bean調用。比如購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法來檢查用戶的信用卡,並向倉庫發定貨信息。小型程序中,操作可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很合適。建議用戶將事務邏輯與Action類所扮演的角色分開。

    ②視圖(View)

    視圖主要有JSP建立,struts包含擴展自定義標籤庫(TagLib),可以簡化創建完全國際化用戶界面的過程。目前的標籤庫包括:Bean Tags、HTML tags、Logic Tags、Nested Tags以及Template Tags等。

    ③控制器(Controller)

       在struts中,基本的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。對於業務邏輯的操作則主要有Action、ActionMapping、ActionForward這幾個組件協調完成的,其中Action扮演了真正的業務邏輯的實現者,ActionMapping與ActionForward則指定了不同業務邏輯或流程的運行方向。struts-config.xml文件配置控制器。


Struts體系結構中的組件


    上圖顯示了ActionServlet(Controller)、Actionform(form State)和Action(Model Wrapper)之間的最簡關係。

    體系結構中所使用的組件如下表:

    ActionServlet       控制器

    ActionClass          包含事務邏輯

    Actionform           顯示模塊數據

    ActionMapping    幫助控制器將請求映射到操作

    ActionForward      用來指示操作轉移的對象

    ActionError           用來存儲和回收錯誤

    Struts標記庫          可以減輕開發顯示層次的工作


2.jsp有幾個內置對象,簡要介紹它們的功能:

內置對象特點:

1.            JSP規範提供,不用編寫者實例化。

2.            通過Web容器實現和管理

3.            所有JSP頁面均可使用

4.            只有在腳本元素的表達式或代碼段中才可使用(<%=使用內置對象%><%使用內置對象%>)

 常用內置對象:

1.           輸出輸入對象:request對象、response對象、out對象

2.           通信控制對象:pageContext對象、session對象、application對象

3.            Servlet對象:page對象、config對象

4.           錯誤處理對象:exception對象

 

對象常用方法說明:

1.out對象(數據流 javax.servlet.jsp.jspWriter)

方法名

說明

printprintln

輸出數據

newLine

輸出換行字符

flush

輸出緩衝區數據

close

關閉輸出流

clear

清除緩衝區中數據,但不輸出到客戶端

clearBuffer

清除緩衝區中數據,輸出到客戶端

getBufferSize

獲得緩衝區大小

getRemaining

獲得緩衝區中沒有被佔用的空間

isAutoFlush

是否爲自動輸出

2.request對象(請求信息 javax.servlet.http.HttpServletrequest)

方法名

說明

isUserInRole

判斷認證後的用戶是否屬於某一成員組

getAttribute

獲取指定屬性的值,如該屬性值不存在返回Null

getAttributeNames

獲取所有屬性名的集合

getCookies

獲取所有Cookie對象

getCharacterEncoding

獲取請求的字符編碼方式

getContentLength

返回請求正文的長度,如不確定返回-1

getHeader

獲取指定名字報頭值

getHeaders

獲取指定名字報頭的所有值,一個枚舉

getHeaderNames

獲取所有報頭的名字,一個枚舉

getInputStream

返回請求輸入流,獲取請求中的數據

getMethod

獲取客戶端向服務器端傳送數據的方法

getParameter

獲取指定名字參數值

getParameterNames

獲取所有參數的名字,一個枚舉

getParameterValues

獲取指定名字參數的所有值

getProtocol

獲取客戶端向服務器端傳送數據的協議名稱

getQueryString

獲取以get方法向服務器傳送的查詢字符串

getRequestURI

獲取發出請求字符串的客戶端地址

getRemoteAddr

獲取客戶端的IP地址

getRemoteHost

獲取客戶端的名字

getSession

獲取和請求相關的會話

getServerName

獲取服務器的名字

getServerPath

獲取客戶端請求文件的路徑

getServerPort

獲取服務器的端口號

removeAttribute

刪除請求中的一個屬性

setAttribute

設置指定名字參數值

 

3.response對象(響應 javax.servlet.http.HttpServletResponse)

方法名

說明

addCookie

添加一個Cookie對象

addHeader

添加Http文件指定名字頭信息

containsHeader

判斷指定名字Http文件頭信息是否存在

encodeURL

使用sessionid封裝URL

flushBuffer

強制把當前緩衝區內容發送到客戶端

getBufferSize

返回緩衝區大小

getOutputStream

返回到客戶端的輸出流對象

sendError

向客戶端發送錯誤信息

sendRedirect

把響應發送到另一個位置進行處理

setContentType

設置響應的MIME類型

setHeader

設置指定名字的Http文件頭信息

4.session對象(會話 javax.servlet.http.HttpSession)

方法名

說明

getAttribute

獲取指定名字的屬性

getAttributeNames

獲取session中全部屬性名字,一個枚舉

getCreationTime

返回session的創建時間

getId

獲取會話標識符

getLastAccessedTime

返回最後發送請求的時間

getMaxInactiveInterval

返回session對象的生存時間單位千分之一秒

invalidate

銷燬session對象

isNew

每個請求是否會產生新的session對象

removeAttribute

刪除指定名字的屬性

setAttribute

設定指定名字的屬性值

5.pageContext對象(頁面上下文 javax.servlet.jsp.PageContext)

方法名

說明

forward

重定向到另一頁面或Servlet組件

getAttribute

獲取某範圍中指定名字的屬性值

findAttribute

按範圍搜索指定名字的屬性

removeAttribute

刪除某範圍中指定名字的屬性

setAttribute

設定某範圍中指定名字的屬性值

getException

返回當前異常對象

getRequest

返回當前請求對象

getResponse

返回當前響應對象

getServletConfig

返回當前頁面的ServletConfig對象

getServletContext

返回所有頁面共享的ServletContext對象

getSession

返回當前頁面的會話對象

 

6.application對象(應用程序 javax.servlet.ServletContext)

方法名

說明

getAttribute

獲取應用對象中指定名字的屬性值

getAttributeNames

獲取應用對象中所有屬性的名字,一個枚舉

getInitParameter

返回應用對象中指定名字的初始參數值

getServletInfo

返回Servlet編譯器中當前版本信息

setAttribute

設置應用對象中指定名字的屬性值

7.config對象(Servlet的配置信息 javax.servlet.ServletConfig)

方法名

說明

getServletContext

返回所執行的Servlet的環境對象

getServletName

返回所執行的Servlet的名字

getInitParameter

返回指定名字的初始參數值

getInitParameterNames

返回該JSP中所有的初始參數名,一個枚舉

8.page對象(當前JSP的實例,java.lang.object)

它代表JSP被編譯成Servlet,可以使用它來調用Servlet類中所定義的方法

9.exception對象(運行時的異常,java.lang.Throwable)

被調用的錯誤頁面的結果,只有在錯誤頁面中才可使用,

即在頁面指令中設置:<%@page isErrorPage=true%>

 

Request(Javax.servlet.ServletRequest)它包含了有關瀏覽器請求的信息.通過該對象可以獲得請求中的頭信息、Cookie和請求參數。

Response(Javax.servlet.ServletResponse)作爲JSP頁面處理結果返回給用戶的響應存儲在該對象中。並提供了設置響應內容、響應頭以及重定向的方法(如cookies,頭信息等)

Out(Javax.servlet.jsp.JspWriter)用於將內容寫入JSP頁面實例的輸出流中,提供了幾個方法使你能用於向瀏覽器回送輸出結果。

pageContext(Javax.servlet.jsp.PageContext)描述了當前JSP頁面的運行環境。可以返回JSP頁面的其他隱式對象及其屬性的訪問,另外,它還實現將控制權從當前頁面傳輸至其他頁面的方法。

Session(javax.servlet.http.HttpSession)會話對象存儲有關此會話的信息,也可以將屬性賦給一個會話,每個屬性都有名稱和值。會話對象主要用於存儲和檢索屬性值。

Application(javax.servle.ServletContext)存儲了運行JSP頁面的servlet以及在同一應用程序中的任何Web組件的上下文信息。

Page(Java.lang.Object)表示當前JSP頁面的servlet實例

Config(javax.servlet.ServletConfig)該對象用於存取servlet實例的初始化參數。

Exception(Javax.lang.Throwable)在某個頁面拋出異常時,將轉發至JSP錯誤頁面,提供此對象是爲了在JSP中處理錯誤。只有在錯誤頁面中才可使用<%@page isErrorPage=true%>

 

Jsp內置對象

功能

主要方法

out

向客戶端輸出數據

print() println() flush() clear() isAutoFlush() getBufferSize()   close() …………

request

向客戶端請求數據

getAttributeNames() getCookies() getParameter() getParameterValues() setAttribute() getServletPath() …………..

response

封裝了jsp產生的響應,然後被髮送到客戶端以響應客戶的請求

addCookie() sendRedirect() setContentType()

flushBuffer() getBufferSize() getOutputStream()

sendError() containsHeader()……………

application

 

 

config

表示Servlet的配置,當一個Servlet初始化時,容器把某些信息通過此對象傳遞給這個Servlet

getServletContext() getServletName() getInitParameter()   getInitParameterNames()……………

page

Jsp實現類的實例,它是jsp本身,通過這個可以對它進行訪問

flush()………

pagecontext

爲JSP頁面包裝頁面的上下文。管理對屬於JSP中特殊可見部分中己經命名對象的該問

forward() getAttribute() getException() getRequest() getResponse()   getServletConfig()

getSession() getServletContext() setAttribute()

removeAttribute() findAttribute() ……………

session

用來保存每個用戶的信息,以便跟蹤每個用戶的操作狀態

getAttribute() getId()   getAttributeNames() getCreateTime() getMaxInactiveInterval()

invalidate() isNew()

exception

反映運行的異常

getMessage()…………

 

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章