-
Action內(nèi)置的五個(gè)系統(tǒng)屬性
查看全部 -
@Struts2---處理結(jié)果類型
1.Structs2處理流程
用戶請(qǐng)求Structs框架控制器(Action)Structs框架視圖資源
返回String,提供代碼復(fù)用性,有利于框架分離。2.Action中五種內(nèi)置屬性(com.opensymphony.xwork2.Action)
(1) SUCCESS??Action正確的執(zhí)行完成,返回相應(yīng)的視圖,success是name屬性的默認(rèn)值。
(2) NONE??表示Action正確的執(zhí)行完成,但并不返回任何事視圖。
(3) ERROR??表示Action執(zhí)行失效,返回錯(cuò)誤處理視圖。
(4) LOGIN??Action因?yàn)橛脩魶]有登錄的原因沒有正確執(zhí)行,將返回該登錄視圖,要求用戶進(jìn)行登錄驗(yàn)證
(5) INPUT??Action的執(zhí)行,需要從前端界面獲取參數(shù),INPUT就是代表這個(gè)參數(shù)輸入界面,一般在應(yīng)用中,會(huì)對(duì)這些 參數(shù)進(jìn)行驗(yàn)證,如果驗(yàn)證沒有通過,將自動(dòng)返回該視圖。查看全部 -
@Struts2---接收參數(shù)
接收參數(shù)
1.使用Action的屬性接受參數(shù),在Action中定義需要接受的屬性,并寫它的set/get方法。
2.使用DomainModel接受參數(shù),創(chuàng)建實(shí)體類定義需要接受的屬性,并set/get方法,在Action中創(chuàng)建實(shí)體類名屬性。并在界面進(jìn)行指定。
3.使用ModelDriver接受參數(shù),在Action中實(shí)現(xiàn)ModelDriver<實(shí)體類名>接口,并實(shí)現(xiàn)方法返回當(dāng)前需要轉(zhuǎn)換的對(duì)象,刪除set/get方法,并對(duì) 對(duì)象 進(jìn)行實(shí)例化,并取消指定。
4.request
5.獲取List集合中的參數(shù)。獲取多個(gè)參數(shù)。方式一:直接在action類中創(chuàng)建相應(yīng)的屬性和getter和setter,和前端的name名字相同。eg:前端的username,在action類中就要建立一個(gè)private String username; Struts會(huì)自動(dòng)映射為這個(gè)屬性賦值
方式二:使用DomainModel,將username 和password兩個(gè)屬性封裝為一個(gè)類User(必須是標(biāo)準(zhǔn)的JavaBean),在action中聲明這個(gè)屬性:private User user; 同時(shí)為user設(shè)置getter和setter;在前端中的name需要設(shè)置為user.name和user.password,才能映射成功
方式三:使用ModelDriven<T>接口,這個(gè)action必須實(shí)現(xiàn)這個(gè)接口的public T getModel()方法。此時(shí)聲明的屬性必須實(shí)例化,eg: private User user = new User(); 同時(shí)不需要getter和setter。前端的name也只需要寫username和password就可以,不需要再加域了。這種方法時(shí)最推薦的方法,因?yàn)榭梢詼p少前后端的耦合
查看全部 -
@Struts2---編寫struts2后綴的三種方式
方式一:在struts.xml中設(shè)置
<constant?name="struts.action.extension"?value="do"></constant>
方式二:在struts.properties中設(shè)置
struts.action.extension=action,do
方式三:在web.xml中的struts2過濾器中初始化參數(shù)
<init-param> ?<param-name>struts.action.extension</param-name> ?<param-value>do</param-value> </init-param>
查看全部 -
@Struts2---默認(rèn)Action
<default-action-ref?name="index"></default-action-ref> <action?name="index"> ???<result>/error.jsp</result> </action>
查看全部 -
@Struts2---指定多個(gè)配置文件
1.如果有很多個(gè)Action的配置文件,則需要在struts.xml中使用<include file="fileName.xml"/>來包含其他的配置文件
2.struts文件中添加<constant name="struts.i18n.encoding" value="UTF-8"></constant>以防亂碼問題的出現(xiàn)
3.配置文件和struts.xml的格式如下:
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?struts?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.3//EN"?"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> ... </struts>
查看全部 -
@Struts2---動(dòng)態(tài)方法調(diào)用
動(dòng)態(tài)方法調(diào)用是為了解決一個(gè)Action對(duì)應(yīng)多個(gè)請(qǐng)求的處理,以免Action太多。三種方式
1:指定method屬性<action?name="addAction"?method="add"?class="com.action.HelloWorldAction"> http://localhost:8080/struts2/aaa/addAction.action
2:感嘆號(hào)方式
<constant?name="struts.enable.DynamicMethodInvocation"?value="true"></constant> <action?name="helloworld"?class="com.action.HelloWorldAction"> ??????<result?>/result.jsp</result> ??????<result?name="add">/add.jsp</result> ??????<result?name="update">/update.jsp</result> </action> http://localhost:8080/struts2/aaa/helloworld!add.action
3:通配符方式(推薦)
<action?name="*_*_*"?method="{2}"?class="com.{3}.{1}Action"> ??????<result?>/{2}.jsp</result> ??????<result?name="add">/{2}.jsp</result> ??????<result?name="update">/{2}.jsp</result> </action> http://localhost:8080/struts2/aaa/HelloWorld_add_action.action
查看全部 -
@Struts2---Action搜索順序
例子:
http://localhost:8080/product_one/hellowworld.jsp可以進(jìn)入result.jsp頁(yè)面
http://localhost:8080/product_one/aaa/ddd/ccc/hellowworld.jsp也可以進(jìn)入result.jsp頁(yè)面Action搜索順序:
http://localhost:8080/struts2/path1/path2/path3/student.action
第一步:判斷package是否存在,如:path1/path2/path3/如果package存在
第二步:則判斷該package中action是否存在,如果不存在則到默認(rèn)namespace的package里面尋找action
第三步:如果沒有,則報(bào)錯(cuò)如果package不存在:
第二步:檢查上一級(jí)路徑的package是否存在(直到默認(rèn)namespace),重復(fù)第一步
第三步:如果沒有則報(bào)錯(cuò)如果請(qǐng)求為/login.action,系統(tǒng)會(huì)根據(jù)根命名空間("/")中查找名為login的Action,如果在根命名空間中找到了名為login的Action,則該Action處理用戶的請(qǐng)求;否則系統(tǒng)將轉(zhuǎn)為在默認(rèn)命名空間中尋找名為login的Action,如果默認(rèn)的命名空間中有名為login的Action,則由該Action處理用戶的請(qǐng)求。如果兩個(gè)命名空間中都找不到名為login的Action,那么系統(tǒng)將出現(xiàn)錯(cuò)誤。
注意:命名空間只有一個(gè)級(jí)別。如果請(qǐng)求的URL是/bookservice/search/get.action系統(tǒng)將先在/bookservice/search的命名空間下查找名為get的Action,如果在該系統(tǒng)命名空間內(nèi)找到名為get的Action,則由該Action處理該用戶的請(qǐng)求;如果在該命名空間中沒有找到名為get的Action,系統(tǒng)將直接進(jìn)入默認(rèn)的命名空間中查找名為get的Action,而不會(huì)在bookservice的命名空間下查找名為get的Action。
可以多個(gè)包使用同一個(gè)命名空間,但是相同的命名空間相當(dāng)于同一個(gè)模塊,也就是同一個(gè)包。
一個(gè)包中可以有name值相同的action,但是后面的action會(huì)把前面同名的action覆蓋掉查看全部 -
@Struts2---struts2訪問Servlet API的三種方式
Servlet API
????HttpServletRequest
????HttpServletResponse
????ServletContextStruts2沒有Servlet API
Struts2訪問Servlet API的三種方式
1>使用ActionContext訪問Servlet API(推薦使用)ActionContext?actionContext=ActionContext.getContext(); Map<String,?Object>?sessionMap=actionContext.getSession(); sessionMap.put("user",?user);
2>使用IOC的方式訪問Servlet ApI
實(shí)現(xiàn)****Aware接口,如實(shí)現(xiàn)SessionAware接口,重寫setSession方法public?void?setSession(Map<String,?Object>?sessionMap)?{ ????this.sessionMap=sessionMap; } sessionMap.put("user",user);
3>耦合方式(ServletActionContext)訪問Servlet API(不推薦使用)
ServletActionContext.getPageContext(); ServletActionContext.getRequest(); ServletActionContext.getResponse(); ServletActionContext.getServletContext();
查看全部 -
@Struts2---深入8個(gè)方面
1.訪問Servlet API
2.Action搜索順序
3.動(dòng)態(tài)方法調(diào)用
4.指定多個(gè)配置文件
5.默認(rèn)Action
6.Struts2后綴
7.接受參數(shù)
8.處理結(jié)果類型查看全部 -
web.xml
任何MVC框架都需要與Web應(yīng)用整合,這就不得不借用于web.xml文件,只有配置web.xml文件中Servlet才會(huì)被應(yīng)用加載
Model2:JSP+JavaBean+Servlet
通常,所有MVC框架都需要Web應(yīng)用加載一個(gè)核心控制器,對(duì)于Struts2框架而言,需要加載StrutsPerpareAndExecuteFilter,只負(fù)責(zé)Web應(yīng)用加載StrutsPerpareAndExecuteFilter,StrutsPerpareAndExecuteFilter將會(huì)加載Struts2框架。
遇到.acton文件就會(huì)攔截并進(jìn)行處理
struts.xml
struts2的核心配置文件,在開發(fā)過程中利用率最高。
該文件主要負(fù)責(zé)管理Action的映射,以及該Action包含的Result定義等。
struts.xml中包含的內(nèi)容:
1、全局屬性
2、用戶請(qǐng)求和相應(yīng)Action之間的對(duì)應(yīng)關(guān)系
3、Action可能會(huì)用到的參數(shù)和返回結(jié)果
4、各種攔截器的配置
struts.properties
struts2框架的全局屬性文件,自動(dòng)加載
和strusts.xml在一個(gè)路徑
該文件包含很多key-value鍵值對(duì)。
這個(gè)文件可以不要,可以在structs.xml中進(jìn)行配置,使用constant元素可以替換
.dtd就是約束struts.xml中可以有哪些標(biāo)簽不能有哪些標(biāo)簽
可以通過 <include file=“”>包含其他文件
可以把每個(gè)功能模塊獨(dú)立到一個(gè)xml配置文件中,然后用Include節(jié)點(diǎn)引用
<package>
package提供了將多個(gè)Action組織成為一個(gè)模塊的方式
package的名字必須是唯一的,可以在這個(gè)包上加一些拓展的包
<package name="包名" extends="繼承的父類的名稱" abstract設(shè)置package的屬性為抽象,抽象的package不能定義action的值, ture或false namespace 包的命名空間>
<interceptors>為攔截器
可以為攔截器定義name(名稱)和class(類路徑)
<interceptor-stack>攔截器棧
<default-interceptor-ref name="">定義默認(rèn)的攔截器,每個(gè)Action都會(huì)自動(dòng)引用如果查看全部 -
@Struts2---struts.properties模板
#制定默認(rèn)編碼集,對(duì)于請(qǐng)求參數(shù)帶有中文的情況應(yīng)該設(shè)置成gbk.gb2312,默認(rèn)值utf-8 struts.i18n.encoding=utf-8 #是否每次HTTP請(qǐng)求到達(dá)時(shí),都重新加載國(guó)際化資源文件,默認(rèn)為false struts.i18n.reload?=?true #但struts.xml改動(dòng)后,是否重新加載該文件,在開發(fā)階段建議設(shè)置成true,提高開發(fā)效率,默認(rèn)為false struts.configuration.xml.reload=true #是否使用struts2的開發(fā)模式,可獲得更多報(bào)錯(cuò)信息,便于調(diào)試,在開發(fā)階段設(shè)置為true,默認(rèn)為false struts.devMode?=true #設(shè)置瀏覽器是否緩存靜態(tài)頁(yè)面,開發(fā)階段設(shè)置為false,以獲得服務(wù)器最新響應(yīng),默認(rèn)為true struts.serve.static.browserCache=true #指定后綴為.action形式的請(qǐng)求可以被struts2處理,可配置多個(gè)請(qǐng)求后綴,比如.do,struts等,配置多個(gè)后綴名用逗號(hào)隔開 struts.action.extendsion=action,do,struts2, #配置服務(wù)器運(yùn)行時(shí)的端口號(hào),一般情況下該屬性不用修改,如果端口號(hào)占用則重新分配端口號(hào),默認(rèn)為80 struts.url.http.port?=?8080
查看全部 -
@Struts2---struts.xml模板
<?xml?version="1.0"?encoding="UTF-8"??> <!DOCTYPE?struts?PUBLIC? ????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1//EN"? ????"http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include?file=""></include> <package?name=""?extends=""?namespace=""?abstract=""?externalReferenceResolver=""> <interceptors> <interceptor?name=""?class=""></interceptor> <interceptor-stack?name=""> <interceptor-ref?name=""></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref?name=""></default-interceptor-ref> <global-results> <result?name="">/xxx.jsp</result> </global-results> ?<action?name=""?class=""?method=""?converter=""> ? <interceptor-ref?name=""></interceptor-ref> ? ? <result?name=""?type="">/xxx.jsp</result> ? ? <param?name="">值</param> ?</action> </package> <constant?name=""?value=""></constant> </struts>
查看全部 -
@Struts2---工作原理圖
查看全部 -
@Struts2---代碼實(shí)現(xiàn)
1.要導(dǎo)入的包:(共9個(gè))
commons-fileupload(上傳下載包)
commons-io(輸入輸出包)
commons-lang 3-3.2(基礎(chǔ)包)
commons-logging(日志包)
freemarker(模板引擎,通過模板生成文本輸出的通用工具)
structs2-core(核心包)
xwork-core(一些類基于xwork)
ognl(表達(dá)式)
javassist-3.11.0.GA.jar(解析java類文件的一個(gè)包)2.配置web.xml文檔
web項(xiàng)目在啟動(dòng)tomcat時(shí)第一個(gè)啟動(dòng)的文件就是web.xml
首先定義過濾器
<filter>
<filter-name>struct2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
這里寫完后按住ctrl點(diǎn)擊鼠標(biāo)左鍵如果可以跳轉(zhuǎn)則證明正確
</filter>
filter的映射
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
/*是所有的都需要過濾
</filter-mapping>
映射與文件的filter-name應(yīng)該保持一致
3.在src中創(chuàng)建struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
??? "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
4.創(chuàng)建action包
創(chuàng)建action類讓其繼承ActionSupport
Struts2中有一個(gè)默認(rèn)的方法不指定方法名的話有一個(gè)execute()方法
之后去配置struts.xml中的action文件5.注意點(diǎn)
編譯環(huán)境問題,類名問題,導(dǎo)包問題查看全部
舉報(bào)