⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 入門 06 - 使用action類別 - javaworld@tw.htm

📁 struts快速入门文章
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=424 -->
<HTML><HEAD><TITLE>入門 06 - 使用Action類別 - JAVAWORLD@TW</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><!-- CONFL-BEGIN standardHeader -->
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Expires content=-1>
<SCRIPT language=javascript>  var contextPath = '/confluence';</SCRIPT>
<LINK href="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/main-action.css" 
type=text/css rel=stylesheet><LINK href="/confluence/images/icons/favicon.ico" 
rel="shortcut icon"><LINK href="/confluence/images/icons/favicon.png" 
type=image/png rel=icon>
<SCRIPT src="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/effects.js"></SCRIPT>
<!-- CONF-END standardHeader -->
<META content="MSHTML 6.00.2800.1491" name=GENERATOR></HEAD>
<BODY onload=placeFocus()>
<DIV id=Content>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=logocell width="60%" rowSpan=2>
      <DIV class=spacenametitle><A 
      href="http://www.javaworld.com.tw/confluence/display/opensrc"><IMG 
      src="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/confluence_logo.gif" 
      align=bottom border=0></A> <A 
      href="http://www.javaworld.com.tw/confluence/display/opensrc">OpenSource 
      Project</A></DIV></TD>
    <TD vAlign=top align=right width="40%">
      <TABLE cellSpacing=1 cellPadding=2 align=right bgColor=#ffffff border=0>
        <TBODY>
        <TR>
          <TD class=navItem onmouseover="this.className='navItemOver'" 
          onclick="window.document.location='/confluence/'" 
          onmouseout="this.className='navItem'" vAlign=center noWrap 
          align=middle>&nbsp;&nbsp; <A title="Go to the Confluence Dashboard" 
            accessKey=h onclick="return false" 
            href="http://www.javaworld.com.tw/confluence/"><U>H</U>OME</A> 
            &nbsp;&nbsp;</TD>
          <TD class=navItem onmouseover="this.className='navItemOver'" 
          onclick="window.document.location='/confluence/spaces/listspaces.action'" 
          onmouseout="this.className='navItem'" vAlign=center noWrap 
          align=middle>&nbsp;&nbsp; <A title="The spaces available for you" 
            accessKey=s onclick="return false" 
            href="http://www.javaworld.com.tw/confluence/spaces/listspaces.action"><U>S</U>PACES</A> 
            &nbsp;&nbsp;</TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD vAlign=bottom align=right><SPAN class=smalltext><A 
      href="http://www.javaworld.com.tw/confluence/login.action?os_destination=/pages/viewpage.action?pageId=424">Log 
      In</A> &nbsp; </SPAN><A 
      href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=424&amp;decorator=printable"><IMG 
      title="View a printable version of the current page." height=16 
      alt="View a printable version of the current page." hspace=1 
      src="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/print_16.gif" width=16 
      align=absMiddle vspace=1 border=0></A> <A 
      href="http://confluence.atlassian.com/display/DOC"><IMG 
      title="Get help from the Confluence website." height=16 
      alt="Get help from the Confluence website." hspace=1 
      src="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/help_16.gif" width=16 
      align=absMiddle vspace=1 border=0></A> </TD></TR></TBODY></TABLE><!-- CONF-BEGIN breadcrumbsAndSearch -->
<DIV class=breadcrumbs width="100%">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD>&nbsp; Location: <A 
      href="http://www.javaworld.com.tw/confluence/dashboard.action">Dashboard</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/spaces/viewspacesummary.action?key=opensrc">opensrc</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/pages/listpages.action?key=opensrc">Pages</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/display/opensrc/Home">Home</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/display/opensrc/Struts">Struts</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=1958">Struts入門</A> 
      &gt; <A 
      href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=424">入門 
      06 - 使用Action類別</A> </TD>
    <FORM name=searchForm action=/confluence/dosearchsite.action 
    method=get><INPUT type=hidden value=true name=quickSearch> 
    <TD vAlign=bottom align=right width=200><A style="TEXT-DECORATION: none" 
      href="http://www.javaworld.com.tw/confluence/searchsite.action"><U>Q</U>uick 
      <U>Search</U></A>:<INPUT accessKey=q size=10 name=searchQuery.queryString><INPUT type=submit value=Go><BR><IMG height=1 
      src="入門 06 - 使用Action類別 - JAVAWORLD@TW.files/spacer.gif" 
    width=200></TD></FORM></TR></TBODY></TABLE></DIV><!-- CONF-END breadcrumbsAndSearch -->
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
  <TBODY>
  <TR>
    <TD>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD class=pagebody vAlign=top>
            <DIV class=pageheader><SPAN class=pagetitle>入門 06 - 
            使用Action類別</SPAN> </DIV>
            <SCRIPT language=javascript>        function toggle(id) {            var oldAttachmentVersionsBlock = document.getElementById('attachment' + id);            with (oldAttachmentVersionsBlock.style)            {                if ( display == "none" )                    display = ""                else                    display = "none"            }            var arrowIcon = document.getElementById('arrow' + id);            with (arrowIcon)            {                if (src != null && (src.indexOf('/confluence/images/icons/arrow_closed_active_16.gif') != -1 || src.indexOf('/confluence/images/icons/arrow_closing_active_16.gif') != -1))                {                    src = '/confluence/images/icons/arrow_opening_active_16.gif';                }                else                {                    src = '/confluence/images/icons/arrow_closing_active_16.gif';                }            }        }        </SCRIPT>

            <DIV class=pagesubheading>Last changed on Oct 27, 2004 by <A 
            href="http://www.javaworld.com.tw/confluence/display/~koji">koji 
            lin</A> 
            </DIV><!-- page content --> 在Struts中,ActionServlet擔任分配工作的控制器角色,實際上的工作是交給 
            Action物件來進行,ActionServlet由ActionMapping得知所使用的Action物件,將工作交給它,並在最後由Action 
            物件得到一個ActionForward物件,ActionServlet使用這個ActionForward來知道下一個forward的對象。<BR> 對於Struts,一個ActionMapping只會生成一個Action物件,當請求到達時,會檢查所需的Action物件是否存在,如果不存在則生成一個,之後一直使用它,由於Action物件會一直存在,所以使用Action物件必須注意到執行緒安全問題。<BR> 我們透過繼承Action類別來使用它,在Struts 
            1.1中,我們會重新定義execute()方法,在Struts 
            1.0中的perform()方法已經不建議使用;execute()方法有兩個接收不同參數的版本: 
            <DIV class=code 
            style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
            <DIV class=codeContent><PRE><SPAN class=java-keyword>public</SPAN> ActionForward execute(ActionMapping mapping,
                     ActionForm form,
                     ServletRequest request,
                     ServletResponse response)
<SPAN class=java-keyword>throws</SPAN> Exception;

<SPAN class=java-keyword>public</SPAN> ActionForward execute(ActionMapping mapping,
                     ActionForm form,
                     HttpServletRequest request,
                     HttpServletResponse response)
<SPAN class=java-keyword>throws</SPAN> Exception;</PRE></DIV></DIV><BR> 由於Action通常處理HTTP相關請求,所以我們通常會使用第二個,execute()方法最後要傳回ActionForward物件給ActionServlet。<BR> 在MVC/Model 
            2中,理想上所有的請求都經由ActionServlet來協調轉發,客戶端不會直接指定真正的位址來請求資源,我們下面直接來看個例子,使用Action物件處理這個功能,首先撰寫一個Action類別: 

            <DIV class=code 
            style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
            <DIV class=codeHeader 
            style="BORDER-BOTTOM-STYLE: solid"><B>GetAction.java</B></DIV>
            <DIV class=codeContent><PRE><SPAN class=java-keyword>package</SPAN> onlyfun.caterpillar;
                                                                               
<SPAN class=java-keyword>import</SPAN> javax.servlet.http.*;
<SPAN class=java-keyword>import</SPAN> org.apache.struts.action.*;
                                                                               
<SPAN class=java-keyword>public</SPAN> class GetAction <SPAN class=java-keyword>extends</SPAN> Action {
    <SPAN class=java-keyword>public</SPAN> ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
    <SPAN class=java-keyword>throws</SPAN> Exception {
        <SPAN class=java-object>String</SPAN> resource = request.getParameter(<SPAN class=java-quote>"resource"</SPAN>);
        <SPAN class=java-keyword>if</SPAN>(resource != <SPAN class=java-keyword>null</SPAN> &amp;&amp; resource.length() != 0) {
            request.setAttribute(<SPAN class=java-quote>"resource"</SPAN>, resource);
            <SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"resource"</SPAN>);
            <SPAN class=java-comment>// <SPAN class=java-keyword>return</SPAN>&nbsp;<SPAN class=java-keyword>new</SPAN> ActionForward(<SPAN class=java-quote>"resource"</SPAN>);</SPAN>
        }
                                                                               
        <SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"welcome"</SPAN>);
    }
}</PRE></DIV></DIV><BR> 在這個類別中,如果客戶端的請求中包括了請求參數resource,則直接返回一個ActionForward,對象為請求參數的內容,原本我們應該是return 
            new 
            ActionForward("resource"),不過為了說明方便,我們將查找struts-config.xml中的forward對象,如果客戶端沒有包括resource對象,則直接查找"welcome"的forward對象。<BR> 這個類別編譯過後,應該位於WEB-INF下並包括package階層,接著我們要在struts-config.xml中加以定義: 

            <DIV class=code 
            style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
            <DIV class=codeHeader 
            style="BORDER-BOTTOM-STYLE: solid"><B>struts-config.xml</B></DIV>
            <DIV class=codeContent><PRE>&lt;struts-config&gt;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -