国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

01.Struts2學(xué)習(xí)筆記(配置)

2019-11-08 19:34:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

MVC 設(shè)計(jì)模式概覽

實(shí)現(xiàn) MVC(Model、View、Controller) 模式的應(yīng)用程序由 3 大部分構(gòu)成:
模型:封裝應(yīng)用程序的數(shù)據(jù)和業(yè)務(wù)邏輯  POJO(Plain Old java Object)視圖:實(shí)現(xiàn)應(yīng)用程序的信息顯示功能jsp控制器:接收來(lái)自用戶的輸入,調(diào)用模型層,響應(yīng)對(duì)應(yīng)的視圖組件Servlet Filter 

使用 Filter 作為控制器的 MVC

使用 Filter 作為控制器的好處 使用一個(gè)過(guò)濾器來(lái)作為控制器, 可以方便地在應(yīng)用程序里對(duì)所有資源(包括靜態(tài)資源)進(jìn)行控制訪問(wèn).

 

<url-pattern>*.action</url-pattern>

 

Servlet VS Filter

Servlet 能做的Filter 是否都可以完成? 嗯。Filter 能做的Servlet 都可以完成嗎? 攔截資源卻不是Servlet 所擅長(zhǎng)的! Filter 中有一個(gè)FilterChain,這個(gè)API 在Servlet 中沒(méi)有!

 

Struts2 概述

Struts2 是一個(gè)用來(lái)開(kāi)發(fā) MVC 應(yīng)用程序的框架. 它提供了 Web 應(yīng)用程序開(kāi)發(fā)過(guò)程中的一些常見(jiàn)問(wèn)題的解決方案:對(duì)來(lái)自用戶的輸入數(shù)據(jù)進(jìn)行合法性驗(yàn)證統(tǒng)一的布局可擴(kuò)展性國(guó)際化和本地化支持 Ajax表單的重復(fù)提交文件的上傳下載….. 

Struts2 VS Struts1

在體系結(jié)構(gòu)方面更優(yōu)秀:
類更少, 更高效:  在Struts2 中無(wú)需使用“ActionForm”來(lái)封裝請(qǐng)求參數(shù).擴(kuò)展更容易:  Struts2 通過(guò)攔截器完成了框架的大部分工作. 在 Struts2 中插入一個(gè)攔截器對(duì)象相當(dāng)簡(jiǎn)便易行.更容易測(cè)試:即使不使用瀏覽器也可以對(duì)基于 Struts2 的應(yīng)用進(jìn)行測(cè)試

從 Struts1 升級(jí)到 Struts2

Struts2 從本質(zhì)上講已不是從 Struts1 擴(kuò)展而來(lái)的, 說(shuō)它是一個(gè)換了品牌標(biāo)簽的 WebWork更合適從 Struts1 升級(jí)到 Struts2:Struts1 里使用 ActionServlet 作為控制器; Struts2 使用了一個(gè)過(guò)濾器作為控制器Struts1 中每個(gè) HTML 表單都對(duì)應(yīng)一個(gè) ActionForm 實(shí)例. Struts2 中, HTML 表單將被直接映射到一個(gè) POJO.Struts1 的驗(yàn)證邏輯編寫在 ActionForm 中; Struts2 中的驗(yàn)證邏輯編寫在 Action 中.Struts1 中, Action 類必須繼承 org.apache.struts.action.Action 類; Struts2 中任何一個(gè) POJO 都可以是一個(gè) Action 類.Struts2 在頁(yè)面里使用 OGNL 來(lái)顯示各種對(duì)象模型, 可以不再使用 EL 和 JSTL 

下載 Struts2

打開(kāi)瀏覽器輸入http://struts.apache.org/點(diǎn)擊超鏈接“Struts 2.3.x”, 打開(kāi)下載頁(yè)面點(diǎn)擊“struts-2.3.x-all.zip”下載Struts2 的 Hello World搭建 Struts2 的環(huán)境:加入 jar 包: 復(fù)制 struts/apps/struts2-blank/WEB-INF/lib 下的所有 jar 包到當(dāng)前 web 應(yīng)用的 lib 目錄下.在 web.xml 文件中配置 struts2: 復(fù)制 struts/apps/struts2-blank1/WEB-INF/web.xml 文件中的過(guò)濾器的配置到當(dāng)前 web 應(yīng)用的 web.xml 文件中在當(dāng)前 web 應(yīng)用的 classpath 下添加 struts2 的配置文件 struts.xml: 復(fù)制 struts1/apps/struts2-blank/WEB-INF/classes 下的 struts.xml 文件到當(dāng)前 web 應(yīng)用的 src 目錄下. 添加 DTD 約束:ActionAction 類  action: 應(yīng)用程序可以完成的每一個(gè)操作. 例如: 顯示一個(gè)登陸表單; 把產(chǎn)品信息保存起來(lái)  Action類: 普通的 Java 類, 可以有屬性和方法, 同時(shí)必須遵守下面這些規(guī)則:屬性的名字必須遵守與 JavaBeans 屬性名相同的命名規(guī)則.屬性的類型可以是任意類型. 從字符串到非字符串(基本數(shù)據(jù)庫(kù)類型)之間的數(shù)據(jù)轉(zhuǎn)換可以自動(dòng)發(fā)生必須有一個(gè)不帶參的構(gòu)造器至少有一個(gè)供 struts 在執(zhí)行這個(gè) action 時(shí)調(diào)用的方法同一個(gè) Action 類可以包含多個(gè) action 方法.Struts2 會(huì)為每一個(gè) HTTP 請(qǐng)求創(chuàng)建一個(gè)新的 Action 實(shí)例訪問(wèn) web 資源在 Action 中, 可以通過(guò)以下方式訪問(wèn) web 的 Httpsession, HttpServletRequest, HttpServletResponse  等資源與 Servlet API 解耦的訪問(wèn)方式通過(guò)com.opensymphony.xwork2.ActionContext通過(guò) Action 實(shí)現(xiàn)如下接口            與 Servlet API 耦合的訪問(wèn)方式通過(guò)org.apache.struts2.ServletActionContext通過(guò)實(shí)現(xiàn)對(duì)應(yīng)的 XxxAware接口
與Servlet API解耦的訪問(wèn)方式 為了避免與 Servlet API 耦合在一起, 方便 Action 做單元測(cè)試, Struts2 對(duì) HttpServletRequest, HttpSession和 ServletContext進(jìn)行了封裝, 構(gòu)造了 3 個(gè) Map 對(duì)象來(lái)替代這 3 個(gè)對(duì)象, 在 Action 中可以直接使用 HttpServletRequest, HttpServletSession, ServletContext對(duì)應(yīng)的 Map 對(duì)象來(lái)保存和讀取數(shù)據(jù).通過(guò) ActionContext訪問(wèn) Web 資源ActionContext是 Action 執(zhí)行的上下文對(duì)象, 在 ActionContext中保存了 Action 執(zhí)行所需要的所有對(duì)象, 包括 parameters, request, session, application 等.獲取 HttpSession對(duì)應(yīng)的 Map 對(duì)象:            – public Map getSession()獲取 ServletContext對(duì)應(yīng)的 Map 對(duì)象:           – public Map getApplication()獲取請(qǐng)求參數(shù)對(duì)應(yīng)的 Map 對(duì)象:           – public Map getParameters()獲取 HttpServletRequest對(duì)應(yīng)的 Map 對(duì)象:           – public Object get(Object key): ActionContext類中沒(méi)有提供類似 getRequest() 這樣的方法來(lái)獲取      HttpServletRequest對(duì)應(yīng)的 Map 對(duì)象. 要得到 HttpServletRequest對(duì)應(yīng)的 Map 對(duì)象, 可以通過(guò)為 get() 方法傳遞 “request” 參數(shù)實(shí)現(xiàn)通過(guò)實(shí)現(xiàn) Aware 接口訪問(wèn) Web 資源Action 類通過(guò)可以實(shí)現(xiàn)某些特定的接口, 讓 Struts2 框架在運(yùn)行時(shí)向 Action 實(shí)例注入parameters, request, session 和 application 對(duì)應(yīng)的 Map 對(duì)象:            與 Servlet耦合的訪問(wèn)方式直接訪問(wèn) Servlet API 將使 Action 與 Servlet環(huán)境耦合在一起,  測(cè)試時(shí)需要有 Servlet容器, 不便于對(duì) Action 的單元測(cè)試.直接獲取 HttpServletRequest對(duì)象:            – ServletActionContext.getRequest()直接獲取 HttpSession對(duì)象            – ServletActionContext.getRequest().getSession()直接獲取 ServletContext對(duì)象            – ServletActionContext.getServletContext()通過(guò)實(shí)現(xiàn) ServletRequestAware, ServletContextAware等接口的方式
ActionSupportcom.opensymphony.xwork2.ActionSupport 類是默認(rèn)的 Action 類.在編寫 Action 類時(shí), 通常會(huì)對(duì)這個(gè)類進(jìn)行擴(kuò)展
result每個(gè) action 方法都將返回一個(gè) String 類型的值, Struts 將根據(jù)這個(gè)值來(lái)決定響應(yīng)什么結(jié)果.每個(gè) action 聲明都必須包含有數(shù)量足夠多的 result 元素, 每個(gè) result 元素分別對(duì)應(yīng)著 action 方法的一個(gè)返回值.result 元素可以有下面兩個(gè)屬性name: 結(jié)果的名字, 必須與 Action 方法的返回值相匹配, 默認(rèn)值為 successtype: 響應(yīng)結(jié)果的類型. 默認(rèn)值為 dispatcher結(jié)果類型:  dispatcherdispatcher 結(jié)果類型是最常用的結(jié)果類型, 也是 struts 框架默認(rèn)的結(jié)果類型該結(jié)果類型有一個(gè) location 參數(shù), 它是一個(gè)默認(rèn)參數(shù)dispatcher 結(jié)果類型將把控制權(quán)轉(zhuǎn)發(fā)給應(yīng)用程序里的指定資源.dispatcher 結(jié)果類型不能把控制權(quán)轉(zhuǎn)發(fā)給一個(gè)外部資源. 若需要把控制權(quán)重定向到一個(gè)外部資源, 應(yīng)該使用 redirect 結(jié)果類型結(jié)果類型:  redirectredirect 結(jié)果類型將把響應(yīng)重定向到另一個(gè)資源, 而不是轉(zhuǎn)發(fā)給該資源.redirect 結(jié)果類型接受下面這些參數(shù): location: 用來(lái)給出重定向的目的地.它是默認(rèn)屬性 parse: 用來(lái)表明是否把 location 參數(shù)的值視為一個(gè) OGNL表達(dá)式來(lái)解釋. 默認(rèn)值為 trueredirect 結(jié)果類型可以把響應(yīng)重定向到一個(gè)外部資源結(jié)果類型:  redirectActionredirectAction結(jié)果類型把響應(yīng)重定向到另一個(gè) ActionredirectAction結(jié)果類型接受下面這些參數(shù): actionName: 指定 “目的地” action 的名字. 它是默認(rèn)屬性namespace: 用來(lái)指定 “目的地” action 的命名空間. 如果沒(méi)有配置該參數(shù), Struts 會(huì)把當(dāng)前 Action 所在的命名空間作為 “目的地” 的命名空間結(jié)果類型:  chainchain 結(jié)果類型的基本用途是構(gòu)成一個(gè) action 鏈: 前一個(gè) action 把控制權(quán)轉(zhuǎn)發(fā)給后一個(gè) action, 而前一個(gè) action 的狀態(tài)在后一個(gè) action 中依然保持chain 結(jié)果類型接受下面這些參數(shù):            – actionName: 指定目標(biāo) action 的名字. 它是默認(rèn)屬性            – namespace: 用來(lái)指定 “目的地” action 的命名空間. 如果沒(méi)有配置該參數(shù), Struts 會(huì)把當(dāng)前 action 所在的命名空間作為 “目的地” 的命名空間            – method: 指定目標(biāo) action 方法. 默認(rèn)值為 execute通配符映射一個(gè) Web 應(yīng)用可能有成百上千個(gè) action 聲明. 可以利用 struts 提供的通配符映射機(jī)制把多個(gè)彼此相似的映射關(guān)系簡(jiǎn)化為一個(gè)映射關(guān)系通配符映射規(guī)則            –  若找到多個(gè)匹配, 沒(méi)有通配符的那個(gè)將勝出            –  若指定的動(dòng)作不存在, Struts 將會(huì)嘗試把這個(gè) URI 與任何一個(gè)包含著通配符 * 的動(dòng)作名及進(jìn)行匹配             –  被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 來(lái)引用. {1} 匹配第一個(gè)子串, {2} 匹配第二個(gè)子串…            –  {0} 匹配整個(gè) URI            –  若 Struts 找到的帶有通配符的匹配不止一個(gè), 則按先后順序進(jìn)行匹配            –  * 可以匹配零個(gè)或多個(gè)字符, 但不包括 / 字符. 如果想把 / 字符包括在內(nèi), 需要使用 **. 如果需要對(duì)某個(gè)字符進(jìn)行轉(zhuǎn)義, 需要使用 /.動(dòng)態(tài)方法調(diào)用動(dòng)態(tài)方法調(diào)用: 通過(guò) url動(dòng)態(tài)調(diào)用 Action 中的方法action 聲明:

URI:             –  /struts-app2/PRoduct.action: Struts 調(diào)用 Product 類的 execute            –  /struts-app2/Product!save.action: Struts 調(diào)用 Product 類的 save() 方法默認(rèn)情況下, Struts 的動(dòng)態(tài)方法調(diào)用處于禁用狀態(tài)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肇东市| 抚顺市| 恩平市| 九寨沟县| 共和县| 施甸县| 蓬安县| 许昌市| 上饶市| 双峰县| 固镇县| 大竹县| 肇东市| 维西| 高邮市| 晋江市| 铜鼓县| 永年县| 深泽县| 秦安县| 成都市| 婺源县| 博湖县| 镇安县| 呼玛县| 东源县| 元阳县| 高邮市| 灵川县| 腾冲县| 南郑县| 石嘴山市| 阿鲁科尔沁旗| 赣州市| 名山县| 景德镇市| 宜丰县| 新竹县| 利津县| 莱阳市| 阿荣旗|