動態方法的開啓
2種方法
1、<action name="helloAction_*" class="com.hd.action.hello" method=”{1}”>
*號佔位符
2.開啓常量
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
Method不寫,然後在地址欄地址名和方法名用!號隔開
注意:
在高版本的struts2不能使用
<allowed-methods>hello</allowed-methods>
默認設置
屬性的默認值
<!—
method 如果不寫 自動匹配該類中的execute方法
class 默認的是ActionSupport
result -> name 不寫 默認的是success
type 默認的是轉發
-->
默認訪問的action
<default-action-ref name="defaultAction"></default-action-ref>
Struts2的訪問流程
1、
到達web.xml struts2過濾器
過濾器會自動過濾src目錄下的struts.xml文件
進入到該類,並執行對應的方法
返回結果
Struts.xml中
讀取result中的type屬性 打開後面的頁面
Action類的創建
1、Pojo類
2、繼承 ActionSupport 比接口多了一些action的優化 推薦使用
3、實現接口:Action接口
Struts2接收參數
1、struts2是一個線程安全
它的生命週期是每次請求到來,都會重新創建action
接收參數的方式
1、屬性驅動
在action類中創建屬性,屬性的名字必須和參數的名字保持一致
自動接收參數
給該屬性創建對應的get-set方法
2、對象驅動
屬性中添加對象並設置get-set方法
在傳參數過程中,必須使用對象導航的方式
對象user 參數 user.name 這樣name屬性會自動封裝到對象user中
3、模型驅動
實現modelDriver<Object>接口 泛型傳遞要轉換的對象類型
實現它的方法, 方法中有個返回值,返回對應的屬性
在action彙總定義一個屬性,並給它new出來一個對象
模型驅動不能轉換集合, 對象驅動可以轉換集合
響應請求
1、轉發
2、重定向
3、轉發自己的action chain
<result name="success" type="chain">
<param name="actionName">toAction_add</param>
<param name="namespace">/</param>
<param name="name">${name}</param>
</result>
4、重定向到自己寫的action
<result name="success" type="redirectAction">
<param name="actionName">toAction_add</param>
<param name="namespace">/</param>
<param name="name">${name}</param>
</result>
5、ajax
Ajax請求
1、 Servlet常用的對象
request 生命週期 請求到來創建
response
session request.getSession() 生命週期 30分鐘後銷燬
servletContext 服務器開啓對象就創建 服務器關閉就銷燬
2、struts2中action
ActionContext對象
Request原生對象
Response原生對象
ServletContext原生對象
Request域
Session域
ServletContext域 applicationContext
Param 域
Attr域 三合一 (Request域、Session域、ServletContext域)
2、steam流的方式
Action中添加屬性 InputStream inputStream 給他添加對應的get-set方法
將json字符串轉化爲字節流並賦值給inputStream
private InputStream inputStream;
@Override
public String execute() throws Exception {
JSONObject jsonObject = new JSONObject();
jsonObject.put("code",0);
jsonObject.put("msg","你好,訪問成功");
String str = jsonObject.toJSONString();
inputStream = new ByteArrayInputStream(str.getBytes("GBK"));
return super.execute();
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
在配置文件中設置type 爲steam
加一個響應的的參數就是這個屬性
<action name="steamAction" class="com.hd.SteamAction.SteamAction">
<result name="success" type="stream">
<param name="inputStream">inputStream</param>
</result>
</action>