創(chuàng)新互聯專業(yè)為企業(yè)提供蔚縣網站建設、蔚縣做網站、蔚縣網站設計、蔚縣網站制作等企業(yè)網站建設、網頁設計與制作、蔚縣企業(yè)網站模板建站服務,十年蔚縣做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。>動態(tài)方法調用
在Struts2中動態(tài)方法調用有三種方式,動態(tài)方法調用就是為了解決一個Action對應多個請求的處理,以免Action太多
第一種方式:指定method屬性
這種方式我們前面已經用到過,類似下面的配置就可以實現
<action name="chainAction" class="chapter2.action.Chapter2Action"
method="chainAction">
<result name="chainAction" type="chain">redirect</result>
</action>
<action name="plainText" class="chapter2.action.Chapter2Action"
method="plainText">
<result name="plainText" type="plainText">/WEB-INF/JspPage/chapter2/plaintext.jsp</result>
</action>
第二種方式:感嘆號方式(需要開啟),官網不推薦使用這種方式,建議大家不要使用.
用這種方式需要先開啟一個開關
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
將此常量設置為true,這種方式才能使用,使用見示例
Action
package chapter3.action;
public class Chapter3Action {
public String result1(){
return "result1";
}
public String result2(){
return "result2";
}
}
Jsp中訪問方式
<body>
<a href="${basePath}/chapter3/chapter3Action!result1">result1</a><br>
<a href="${basePath}/chapter3/chapter3Action!result2">result2</a><br>
</body>
如果配置了后綴,必須這樣寫:
/chapter4/chapter4Action!create.action
XML中配置方式
<package name="chapter3" namespace="/chapter3" extends="struts-default">
<action name="chapter3Action" class="chapter3.action.Chapter3Action">
<result name="result1">/WEB-INF/JspPage/chapter3/result1.jsp</result>
<result name="result2">/WEB-INF/JspPage/chapter3/result2.jsp</result>
<result name="chapter3">/WEB-INF/JspPage/chapter3/chapter3.jsp</result>
</action>
</package>
第三種方式:通配符方式(官網推薦使用)
首先得關閉開關
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
這一種方式是由第一種轉變過來的,我們可以看到,第一種方式有很多重復的代碼,那么我們可以進行變形,看下面的代碼
<action name="chapter3_*" class="chapter3.action.Chapter3Action"
method="{1}">
<result name="test">/…/test.jsp</result>
</action>
chapter3_*這里的*就是你呆會要匹配的字符串,即你在后面的請求中得這樣寫
http://...../ chapter3_create 或 http://...../ chapter3_update注意,這時你action中必須有create和update方法與之匹配,甚至還可以這樣匹配
<action name="chapter3_*" class="chapter3.action.Chapter3Action"
method="{1}">
<result name="test">/…/{1}.jsp</result>
</action>
但是這時一定要有對應的JSP頁面存在,并且相應的路徑不能錯,這就對我們的命名進行了強制性的規(guī)定,一定要規(guī)范.
課堂示例:
Action
public class Chapter4Action extends ActionSupport {
public String list(){
return "list";
}
public String create(){
return "create";
}
public String index(){
return "index";
}
}
XML:
<action name="chapter4_*" class="chapter4.action.Chapter4Action" method="{1}">
<result name="{1}">/WEB-INF/JspPage/chapter4/chapter4_{1}.jsp</result>
</action>
訪問Servlet API
有時我們需要用到Request, Response, Session,Page, ServletContext這些我們以前常用的對象,那么在Struts2中怎么樣使用到這些對象呢,通常有三種方式.
間接訪問1
//向Session中放 ActionContext.getContext().getSession().put("wdpc", "Session中的WDPC");
//向request中放 ActionContext.getContext().put("wdpc","request中的WDPC");
//向application中放 ActionContext.getContext().getApplication().put("wdpc", "Application中的WDPC");
取值方式:
ActionContext.getContext().getSession().get("wdpc");
間接訪問2
Struts2中提供了一個靜態(tài)類,他里面的方法可以獲取到我們的HttpServletResponse, HttpServletRequest, 然后呢就可以還原到我們以前的使用方式了.
直接訪問
雖然Struts2提供了ActionContext來訪問Servlet API,但是這種方式畢竟不能直接獲取Servelt API實例,為了在Action中直接訪問Servlet API,Struts2還提供了一系列接口
ServletContextAware 實現此接口后,可以取得ServletContext
ServletRequestAware 實現此接口后,可以取得HttpServletRequest
ServletResponseAware 實現此接口后,可以取得HttpServletResponse
SessionAware 實現此接口后,可以取得HttpSession,注意,這里有點特殊,取得的是一個Map<String,Object> session,攔截器負責將session中存儲的鍵值進行解析,并一一對應.
所以我們通常的做法是:
public class BaseAction implements ServletResponseAware, ServletRequestAware,
SessionAware {
protected HttpServletResponse response;
protected HttpServletRequest request;
protected Map<String, Object> session;
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public Map<String, Object> getSession() {
return session;
}
}
為了讓BaseAction能有驗證的功能,并且不能被實例化,開發(fā)中我們會這樣做:
public abstract class BaseAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware, SessionAware
然后讓我們每個模塊的Action來繼承這個BaseAction類,然后我們就可以在Action中直接使用Servelt的API了.
分享標題:struts2動態(tài)方法-創(chuàng)新互聯
當前URL:http://jinyejixie.com/article16/dedcgg.html
成都網站建設公司_創(chuàng)新互聯,為您提供網頁設計公司、服務器托管、網站設計公司、電子商務、網站營銷、網站排名
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯