posts - 297,  comments - 1618,  trackbacks - 0
            說明:本文翻譯自struts-2.0.8-all\struts-2.0.8\docs\docs\hello-world.html,并根據筆者在學習過程中的實踐增加了部分內容。

           當你提交一個HTML表單到這個框架中的時候,輸入并不是被發送到服務頁,而是被發送到你提供的Java類,這些類被稱為Action。在這些Action執行完后,選擇某一個資源來呈現返回結果,這個資源一般是頁面,但也可以是PDF文件,或者是Excel文件,亦或是Java applet窗口。

           假設你想要創建一個“Hello World”的例子來呈現歡迎信息,在你準備好開發環境后,為了創建一個“Hello World”的例子,你需要做如下三件事情:

          1.       創建一個jsp頁面來呈現歡迎信息;

          2.       創建一個Action類來創建信息;

          3.       在配置文件中配置action和頁面的映射關系。

          注意:為了創建這個組件,我們將工作流分成幾乎無人不曉的三部分:視圖、模型和控制器。分離這三部分的原因是當系統變得越來月復雜的時候,我們能夠更好的管理。

          一.             準備工作

           建立web工程,其中工程名為tutorial,在WebRoot下引入struts2lib下的如下4個包:

           commons-logging-1.1.jar

           freemarker-2.3.8.jar

           ognl-2.6.11.jar

           struts2-core-2.0.8.jar

           xwork-2.0.3.jar

          web.xml文件中增加struts2FilterDispatcher,修改后的web.xml如下:

          <?xml version="1.0" encoding="UTF-8"?>

          <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
              
          <display-name>tutorial</display-name>
              
          <filter>
                  
          <filter-name>struts2</filter-name>
                  
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
              
          </filter>

              
          <filter-mapping>
                  
          <filter-name>struts2</filter-name>
                  
          <url-pattern>/*</url-pattern>
              
          </filter-mapping>

              
          <welcome-file-list>
                  
          <welcome-file>index.html</welcome-file>
              
          </welcome-file-list>
          </web-app>

          二.             代碼

           首先,我們需要一個jsp頁面來呈現信息,HelloWorld.jsp頁面代碼如下所示:

          <%@ taglib prefix="s" uri="/struts-tags" %>
          <html>
              
          <head>
                  
          <title>Hello World!</title>
              
          </head>
              
          <body>
                  
          <h2><s:property value="message" /></h2>
              
          </body>
          </html>

          接著,我們需要一個Action類來創建信息,代碼如下:

          package tutorial;
          import com.opensymphony.xwork2.ActionSupport;
          public class HelloWorld extends ActionSupport {
              
          public static final String MESSAGE = "Struts is up and running ";
              
          public String execute() throws Exception {
                  setMessage(MESSAGE);
                  
          return SUCCESS;
              }

              
          private String message;
              
          public void setMessage(String message){
                  
          this.message = message;
              }

              
          public String getMessage() {
                  
          return message;
              }

          }

          第三步,我們需要在配置文件中進行相應配置來將兩者聯系起來。讓我們編輯src下的struts.xml文件,該文件內容如下:

          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >
          <struts>
              
          <package name="tutorial" extends="struts-default">
                  
          <action name="HelloWorld" class="tutorial.HelloWorld">
                      
          <result>/HelloWorld.jsp</result>
                  
          </action>
                  
          <!-- Add your actions here -->
              
          </package>
          </struts>

          代碼已經完成,讓我們來嘗試運行它。部署該應用程序并打開http://localhost:8080/tutorial/HelloWorld.action,我們可以看到標題欄為:Hello World,并且顯示“Struts is up and running!”的頁面呈現在我們面前。

          三.             代碼是如何工作的?

           你的瀏覽器向Web服務器發送了的http://localhost:8080/tutorial/HelloWorld.action注:tutorial為部署Tomcat中的的項目名稱URL請求后,服務器做了如下工作:

          1.       容器接收到了Web服務器對資源HelloWorld.action的請求,根據web.xml中的配置,服務器將包含有.action后綴的請求轉到org.apache.struts2.dispatcher.FilterDispatcher類進行處理。這個FilterDispatcher是框架的一個進入點;

          2.       框架在struts.xml配置文件中找到名為HelloWorldaction對應的類??蚣艹跏蓟?/span>Action并且執行該Action類的execute方法;

          3.       execute方法將信息放入message變量中,并返回成功。框架檢查配置以查看當返回成功時對應的頁面。框架告訴容器來獲得請求返回的結果頁面HelloWorld.jsp;

          4.       HelloWorld.jsp執行完后,<s:property value="message" />標簽調用HelloWorldAction類中的getMessage方法來獲得message的值,并將合并了值的頁面呈現給用戶;

          5.       一個純粹的HTML頁面顯示在用戶的瀏覽器上。

          四.             測試Action

           測試Action很簡單,以下是上述HelloWorldAction類的測試類的代碼:

          package tutorial;
          import junit.framework.TestCase;
          import com.opensymphony.xwork2.Action;
          import com.opensymphony.xwork2.ActionSupport;
          public class HelloWorldTest extends TestCase {
           
          public void testHelloWorld() throws Exception {
              HelloWorld hello_world 
          = new HelloWorld();
              String result 
          = hello_world.execute();
              assertTrue(
          "Expected a success result!",
                ActionSupport.SUCCESS.equals(result));
              assertTrue(
          "Expected the default message!",
                HelloWorld.MESSAGE.equals(hello_world.getMessage()));
              }

          }

          五.             需要記住的東西

           本框架利用Action來處理HTML的表單以及其余請求。Action返回一個結果的名字字符串,例如SUCCESS、ERROR以及INPUT等,從struts.xml中獲取映射信息。一個給定的結果字符串將選擇一個頁面或其他資源(圖片或PDF)來返回給用戶。

           當一個jsp被載入的時候,通常有一些動態變化的元素需要Action來載入。為了更加容易的顯示動態數據,本框架提供了一些可以跟HTML配合使用的標簽。

          六.             問題匯總

           對于出現啟動失敗,例如Cannot locate the chosen ObjectFactory implementation: spring等錯誤的朋友,請仔細檢查你引入的包。關于需引入的包,請參見第一節(準備工作)。也希望遇到其余問題的朋友留言或發Email給我,在此進行匯總。

           下一篇:基礎篇:使用Struts2的標簽
           上一篇:基礎篇:序言

          posted on 2007-07-27 00:01 阿蜜果 閱讀(4143) 評論(21)  編輯  收藏 所屬分類: Struts2


          FeedBack:
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 08:30 | vagrant
          記得上次看到寫的關于spring的aop,今天又看到關于struts2,好強......學習中  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 08:36 | chenge
          不錯!  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 08:57 | Tortoise
          技術強。e文也牛。厲害!  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 09:35 | sterning
          加油.支持  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 09:43 | cresposhi
          厲害厲害
          up  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 11:00 | kenzhang
          寫的很詳細,看的很明白。支持!  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-27 11:56 | Hmilyld
          不錯,支持下.
          等待下一篇.:)  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇[未登錄]
          2007-07-27 12:54 | beansoft
          友情支持一下.  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇[未登錄]
          2007-07-27 21:12 | -274°C
          好文章,好人。  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-07-28 11:14 | Blake
          期待下文  回復  更多評論
            
          # re: Struts2學習進階(二)——Hello World篇
          2007-08-01 11:49 | kittow
          好貼,學到了,頂一下  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-12 22:34 | 夏日火雞
          PLMM
          你好厲害
          小生佩服  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-21 14:34 | liulin
          我運行了你的例子 ,怎么不行啊。  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-21 21:20 | 阿蜜果
          @liulin
          可以的,我等下把那個工程的源碼發到你郵箱吧。你核對一下什么地方弄錯了  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-23 17:44 | liulin
          好的。謝謝啊!!!  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-24 10:19 | liulin
          嚴重: Error filterStart
          2007-8-24 10:00:27 org.apache.catalina.core.StandardContext start
          嚴重: Context startup failed due to previous errors
          你發我的好象不是那個HelloWorld 的例子 ,但是這個列子也報了這個錯誤。不好意思,問一下。  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-08-26 23:26 | 大佑
          我做你那個範例~HelloWorld.jsp運行不了~
            回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World[未登錄]
          2007-08-27 09:03 | 阿蜜果
          @ liulin
          不好意思,上次發錯了,剛才又發了一次helloworld的例子,請查收!
          @大佑
          你一個運行不了,我無法給你確定答復,要不留下郵箱,我將那個hello world工程發給你。  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-10-08 19:38 | beijixuem
          我也想要代碼
          郵箱地址:dragonmxg@163.com
          謝謝了!  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2007-10-09 08:51 | 阿蜜果
          @beijixuem
          已經發了,請查收!  回復  更多評論
            
          # re: Struts2學習進階(基礎篇二)——Hello World
          2009-08-14 10:48 | pnpe
          我的也要出錯
          org.apache.catalina.core.StandardContext start
          嚴重: Error filterStart
          org.apache.catalina.core.StandardContext start
          嚴重: Context [/helloworld] startup failed due to previous errors

          麻煩你也發給我哈吧 謝謝!
          pnpe@163.com  回復  更多評論
            
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296322
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 调兵山市| 山西省| 凤城市| 通河县| 普兰店市| 永新县| 红河县| 滦南县| 六枝特区| 汪清县| 濉溪县| 任丘市| 蒲江县| 海口市| 芒康县| 永靖县| 石棉县| 延津县| 麻栗坡县| 东城区| 措勤县| 梁平县| 大足县| 如皋市| 霸州市| 江津市| 冀州市| 都江堰市| 寿宁县| 康定县| 仙游县| 白玉县| 应城市| 阿尔山市| 遵义市| 育儿| 睢宁县| 广丰县| 渝北区| 措勤县| 昌都县|