西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)java → 使用Action類別

使用Action類別

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2010/11/17 11:10:03字體大。A-A+

作者:佚名點(diǎn)擊:45次評(píng)論:0次標(biāo)簽: Java

  • 類型:行業(yè)軟件大小:7.3M語(yǔ)言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載
在Struts中,ActionServlet擔(dān)任分配工作的控制器角色,實(shí)際上的工作是交給 Action物件來(lái)進(jìn)行,ActionServlet由ActionMapping得知所使用的Action物件,將工作交給它,并在最後由Action 物件得到一個(gè)ActionForward物件,ActionServlet使用這個(gè)ActionForward來(lái)知道下一個(gè)forward的對(duì)象。

 對(duì)於Struts,一個(gè)ActionMapping只會(huì)生成一個(gè)Action物件,當(dāng)請(qǐng)求到達(dá)時(shí),會(huì)檢查所需的Action物件是否存在,如果不存在則生成一個(gè),之後一直使用它,由於Action物件會(huì)一直存在,所以使用Action物件必須注意到執(zhí)行緒安全問(wèn)題。

 我們透過(guò)繼承Action類別來(lái)使用它,在Struts 1.1中,我們會(huì)重新定義execute()方法,在Struts 1.0中的perform()方法已經(jīng)不建議使用;execute()方法有兩個(gè)接收不同參數(shù)的版本:

public ActionForward execute(ActionMapping mapping,
ActionForm form,
ServletRequest request,
ServletResponse response)
throws Exception;
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception; 由於Action通常處理HTTP相關(guān)請(qǐng)求,所以我們通常會(huì)使用第二個(gè),execute()方法最後要傳回ActionForward物件給ActionServlet。

 在MVC/Model 2中,理想上所有的請(qǐng)求都經(jīng)由ActionServlet來(lái)協(xié)調(diào)轉(zhuǎn)發(fā),客戶端不會(huì)直接指定真正的位址來(lái)請(qǐng)求資源,我們下面直接來(lái)看個(gè)例子,使用Action物件處理這個(gè)功能,首先撰寫(xiě)一個(gè)Action類別:

GetAction.java
package onlyfun.caterpillar;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class GetAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String resource = request.getParameter("resource");
if(resource != null && resource.length() != 0) {
request.setAttribute("resource", resource);
return mapping.findForward("resource");
// return new ActionForward("resource");
}

return mapping.findForward("welcome");
}
} 在這個(gè)類別中,如果客戶端的請(qǐng)求中包括了請(qǐng)求參數(shù)resource,則直接返回一個(gè)ActionForward,對(duì)象為請(qǐng)求參數(shù)的內(nèi)容,原本我們應(yīng)該是return new ActionForward("resource"),不過(guò)為了說(shuō)明方便,我們將查找struts-config.xml中的forward對(duì)象,如果客戶端沒(méi)有包括resource對(duì)象,則直接查找"welcome"的forward對(duì)象。

 這個(gè)類別編譯過(guò)後,應(yīng)該位於WEB-INF下并包括package階層,接著我們要在struts-config.xml中加以定義:

struts-config.xml
<struts-config>
<global-forwards>
<forward
name="welcome"
path="/Welcome.do"/>
</global-forwards>

<action-mappings>
<action
path="/Welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Welcome.jsp"/>

<action
path="/GetAction"
type="onlyfun.caterpillar.GetAction">
<forward
name="resource"
path="/pages/showres.jsp"/>
</action>
</action-mappings>

<message-resources parameter="resources.application"/>
</struts-config> 在<action-mappings>定義中,如果是/GetAction開(kāi)頭的URI請(qǐng)求,都會(huì)交給GetAction物件來(lái)處理,其中<forward>標(biāo)簽定義了如果查找"resource"的forward對(duì)象,實(shí)際該forward的路徑, showres.jsp的內(nèi)容如下,只是簡(jiǎn)單的顯示請(qǐng)求資源的路徑而已:

showres.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

<H1>請(qǐng)求資源 ${ resource }</H1>

</body>
</html:html> 啟動(dòng)Servlet容器,并使用http://localhost:8080/HelloStruts/GetAction.do?resource=/images/struts.jpg來(lái)瀏覽,您會(huì)得到以下的內(nèi)容:

<html lang="zh">
<head>
<title>哈羅!Struts!</title>
<base href="http://localhost:8080/HelloStruts/pages/showres.jsp">
</head>
<body bgcolor="white">
<H1>請(qǐng)求資源 /images/struts.jpg</H1>
</body>
</html> Action物件是執(zhí)行工作的物件,它主要的工作通常有:
*驗(yàn)證使用者的進(jìn)程狀態(tài)
*進(jìn)一步驗(yàn)證表單物件的資訊
*更新應(yīng)用程式中物件的狀態(tài)
*處理客戶端的請(qǐng)求
*返回ActionForward給ActionServlet

 為了要能夠重用Action物件,通常建議不要在Action中加入過(guò)多的邏輯,普遍認(rèn)為Action物件也應(yīng)屬於控制器角色,除了以上必要的工作之外,建議將與業(yè)務(wù)相關(guān)的工作交給輔助類別,減少Action物件中的邏輯,以使得Action物件容易理解它的職責(zé)。

 基本上不只有Action物件應(yīng)保持職責(zé)清晰,就Struts而言,它的工作是輔助建議MVC/Model 2架構(gòu),每個(gè)相關(guān)的組件除了這個(gè)目的之外,沒(méi)有其它的目的,Struts建立起來(lái)的架構(gòu)也鼓勵(lì)重用,應(yīng)當(dāng)將業(yè)務(wù)相關(guān)的邏輯交由其它的物件來(lái)處理,而不是交給Struts組件。
    PPT圖表
    (111)PPT圖表
    我們?cè)谥谱鞲黝惖臅r(shí)候,或多或少的都能用到圖表。圖表它可以直觀的展示出各種信息數(shù)據(jù),有了圖表你就可以很好的將數(shù)據(jù)更直觀準(zhǔn)確的表達(dá)出來(lái)。小編在這里為大家搜集整理了一些大家可能會(huì)用到的圖表模板,歡迎有需要的各位前來(lái)下載。...更多>>

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)