Struts請求處理流程java
請求先被struts過濾器攔截下來,而後在struts中作處理,若是處理中未發現請求的地址,再發回tomcat服務器 讓tomcat處理tomcat
自定義action安全
給在struts.xml中 action類添加class屬性,指定處理的類,默認會調用這個類的execute方法,這個類能夠是一個普通的java類。服務器
若是不配置class,默認的用actionSupport來處理。jsp
還能夠實現action接口來定義一個action實現類,不常常用。spa
若是想運行自定義方法而不是execute方法,那麼直接能夠在action定義該方法,這個方法,的返回值是String類型,修飾字符串類型public 線程
若是返回字符串是’xxx’ ,那麼struts會在該action中尋找,result中name是’xxx’,若是沒有,會有錯誤。code
在action 中配置method 屬性 ,指定調用方法。xml
在struts2中每次請求都會建立一個action對象,因此不存在線程安全問題。對象
DMI 動態方法調用
用於開發或者企業內部軟件使用,由於很容易就會讓人發現是用struts,因此通常外部不用。
在struts.xml中 配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
通配符
<action name="*-*" class="struts.demo.DemoAction"> <result name="{1}">/{2}.jsp</result> </action>
這裏的*會按順序替換{1},{2},例如,請求的action 爲user-input
{1}是user {2}是input 減小result的配置
NameSpace
Namespace決定了訪問路徑,默認爲」」,能夠接受全部路徑的action
Struts請求action默認帶後綴名action,能夠不寫。
Namespcce能夠寫爲」/」, 」/xxx」,」/xxx/yy」,對應的action訪問路徑爲/index.action.
Namespace通常用模塊來進行命名
Package 標籤的做用和java中的package做用一致,區分重複的狀況,package的名字與namespace的名字通常是一致的,以模塊的名稱來命名
路徑問題
Struts中,相對路徑是從action算起,因此使用絕對路徑。
JSP中’/’的地址表示的是服務器根地址,不是應用根地址
絕對路徑的獲取
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort + "/" + request.getContextPath() ;