-
MVC。。。。。
查看全部 -
處理結(jié)果類(lèi)型——type屬性(result標(biāo)簽的屬性)
type的默認(rèn)值為dispatcher,這個(gè)類(lèi)型支持JSP視圖技術(shù)(跳轉(zhuǎn)到相應(yīng)JSP)。
struts2支持多種視圖技術(shù),例如JSP、Valocity(模板引擎)、FreeMarker(模板引擎)等。
struts2-core核心包:struts-default.xml有個(gè)包聲明了返回的結(jié)果類(lèi)型,
chain:鏈?zhǔn)浇Y(jié)果類(lèi)型,將action和另外一個(gè)action鏈接起來(lái)。
dispatcher:相當(dāng)與forward服務(wù)器內(nèi)部轉(zhuǎn)發(fā)。
redirect和redirectAction:相當(dāng)于請(qǐng)求重定向,重要問(wèn)題——>重定向會(huì)丟失請(qǐng)求參數(shù)。
plainText:顯示某一界面的原始代碼。
stream:一般用于文件的下載。
查看全部 -
處理結(jié)果類(lèi)型(處理結(jié)果是通過(guò)在struts.xml使用<result/>標(biāo)簽配置結(jié)果)
根據(jù)位置的不同,分為兩種結(jié)果:
局部結(jié)果:將<result>標(biāo)簽作為<action/>元素的子元素來(lái)處理。
全局結(jié)果:將<result/>作為<global-result/>元素的子元素的來(lái)處理,<global-result/>相當(dāng)于公共的處理結(jié)果集。
例如:<package name="">
<global-results>
? ? ? <result name="">..</result>
? ? ? <result ?name="">..</result>
<global-results>
</package>
<result>標(biāo)簽的子元素<param name="loaction" parse="">resource</param>:
name屬性的location:定義了該視圖對(duì)應(yīng)的實(shí)際視圖資源。
parse屬性:是否可以在實(shí)際視圖名字中使用OGNL表達(dá)式,struts默認(rèn)是true。
OGNL:Object-Graph ?Navigation ?Language,很強(qiáng)大的表達(dá)式語(yǔ)言。
${#request.path獲取值},前提是已經(jīng)對(duì)request存入值。(可以在struts.xml中使用,也可以在JSP中使用。(實(shí)際項(xiàng)目中不是很常用)
查看全部 -
處理結(jié)果類(lèi)型
struts2處理流程
用戶請(qǐng)求(前提在web.xml中配置攔截,通過(guò)路徑)——>Struts框架(通過(guò)struts.xml配置)——>控制器Action(返回string類(lèi)型邏輯視圖字符串)——>Struts框架(通過(guò)result標(biāo)簽)——>視圖資源。
Struts1返回結(jié)果類(lèi)型:ActionForward。
Struts2返回結(jié)果類(lèi)型:String(提供代碼復(fù)用性,有利于框架分離)。
result標(biāo)簽帶/和不帶/的區(qū)別
?帶/表示項(xiàng)目的上下文路徑。
不帶/表示執(zhí)行action的namespace指定的路徑。
處理結(jié)果類(lèi)型(com.opensymphony.xwork2.Action)
SUCCESS:Action正確的執(zhí)行返回,返回相應(yīng)試圖,success是name屬性的默認(rèn)值。
NONE:表示Action正確的執(zhí)行完成,但并不返回任何視圖。
ERROR:表示Action執(zhí)行失敗,返回到錯(cuò)誤處理視圖。
LOGIN:Action因?yàn)橛脩魶](méi)有登陸的原因沒(méi)有正確執(zhí)行,將返回該登陸視圖,要求用戶進(jìn)行登陸驗(yàn)證。
INPUT:Action的執(zhí)行,需要從前端界面獲取參數(shù),一般在應(yīng)用中,會(huì)對(duì)這些參數(shù)進(jìn)行驗(yàn)證,如果驗(yàn)證沒(méi)有通過(guò),將自動(dòng)返回到該視圖。
查看全部 -
處理結(jié)果類(lèi)型(com.opensymphony.xwork2.Action)
INPUT:Action的執(zhí)行,需要從前端界面獲取參數(shù),一般在應(yīng)用中,會(huì)對(duì)這些參數(shù)進(jìn)行驗(yàn)證,如果驗(yàn)證沒(méi)有通過(guò),將自動(dòng)返回到該視圖。
自動(dòng)跳轉(zhuǎn)到input界面方式:
1、傳入的參數(shù)類(lèi)型轉(zhuǎn)換錯(cuò)誤,自動(dòng)跳轉(zhuǎn)INPUT界面(int——>String)
舉例:前端輸入的數(shù)據(jù)被賦值給實(shí)體類(lèi)時(shí)類(lèi)型不一致。
?2、校驗(yàn)時(shí),調(diào)用的this.addFieldError(fieldName,errorMessage)它是添加表單的錯(cuò)誤,這里面有值,如果被執(zhí)行,代表校驗(yàn)不通過(guò),也會(huì)自動(dòng)跳轉(zhuǎn)INPUT界。
如果不想手動(dòng)返回INPUT,則要把代碼寫(xiě)在validate()方法里。
user.getUsername()==null和"".equals(user.getUsername())這兩個(gè)條件判斷的區(qū)別?
因?yàn)槲唇?jīng)第一個(gè)判斷直接進(jìn)行第二個(gè)判斷,當(dāng)用戶名為null時(shí)會(huì)發(fā)生空指針異常
第一個(gè)判斷用戶名是否為null(空)
第二個(gè)判斷用戶名是否為""(空字符串)""并不等于null
查看全部 -
ServletAPI:HttpServletRequest、HttpServletResponse,和ServeltContext對(duì)應(yīng)JSP內(nèi)置對(duì)象為Request、Response、Application(Servlet可以直接調(diào)用HttpServletRequest和HttpServletResponse,因?yàn)閐oGet、doPost方法)。
Struts:Struts不提供ServletAPI耦合,Struts的Action的execute方法不存在任何參數(shù)。
Struts提供的三種訪問(wèn)ServeltAPI方式:
方式一:ActionContext(上下文類(lèi),通過(guò)它可以獲得servletAPI ,所有的對(duì)象都是以Map進(jìn)行存儲(chǔ)的)。
方式二:實(shí)現(xiàn)***Aware接口。
方式三:ServletActionContext(與方式一相似)。
查看全部 -
動(dòng)態(tài)方法調(diào)用:解決一個(gè)Action對(duì)應(yīng)多個(gè)請(qǐng)求,以免Action太多。
方法一:指定method屬性。
編寫(xiě)多個(gè)action標(biāo)簽,編寫(xiě)多個(gè)name和method屬性。
方法二:感嘆號(hào)方式。(官方不推薦)
步驟1:開(kāi)啟常量值——<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
步驟二:<action>標(biāo)簽里不寫(xiě)method屬性,訪問(wèn)方式——http://localhost:8080/項(xiàng)目名/action名+!+方法名.action
方法三:通配符方式。(官方推薦使用)
查看全部 -
導(dǎo)入包
web.xml添加
<filter> ??<filter-name>struts2</filter-name> ??<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> ??</filter> ??<filter-mapping> ??<filter-name>struts2</filter-name> ??<url-pattern>*.action</url-pattern> ??</filter-mapping>
.src下創(chuàng)建struts.xml
<struts> ????<package?name="default"?namespace="/"?extends="struts-default"> ????????<action?name="helloworld"?class="com.action.HelloWorldAction"> ????????<result>/result.jsp</result> ????????</action> ????</package> </struts>
創(chuàng)建action類(lèi)
public?class?HelloWorldAction?extends?ActionSupport?{ ????@Override ????public?String?execute()?throws?Exception?{ ????????System.out.println("HelloWorldAction"); ????????return?SUCCESS; ????} }
查看全部 -
Struts2動(dòng)態(tài)方法調(diào)用
? 1. 通過(guò)method 指定方法
? 2. 使用!? 例如: http:localhost:8080/Struts/helloworld!add.action
???? 必須設(shè)置<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
?3.使用通配符 * (推薦使用)
?? 例如:<action name="helloworld_*_*" method="{1}" class="xxx">
????????? <result name="{1}">{1}.jsp</result>
??? </action>
查看全部 -
MVC模式
查看全部 -
struts.xml里標(biāo)簽package里元素必須按照一定的順序排列:
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*(就是所有的action放到最后)??查看全部 -
struts2.5 為了增加安全性,在 struts.xml 添加了這么個(gè)屬性:<global-allowed-methods>regex:.*</global-allowed-methods>
即
<package name="default" namespace="/" extends="struts-default">
?? <global-allowed-methods>regex:.*</global-allowed-methods>
?<action name="helloworld" class="com.imooc.action.HelloWorldAction">
????? <result>/result.jsp</result>
????? <result name="add">/add.jsp</result>
????? <result name="update">/update.jsp</result>
?</action>
查看全部 -
版本:struts-2.5.16
1.代碼:<!DOCTYPE struts PUBLIC
? ?"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
? ?"http://struts.apache.org/dtds/struts-2.5.dtd">
2.路徑調(diào)整了:web.xml包路徑
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
3.多導(dǎo)個(gè)log4j個(gè)jar包查看全部 -
第三步里 的request 是實(shí)現(xiàn)了 ServletRequestAware里的setServletRequest方法
具體如下@Override public?void?setServletRequest(HttpServletRequest?arg0)?{ //?TODO?Auto-generated?method?stub request?=?arg0; }
查看全部 -
struts2工作原理
查看全部
舉報(bào)