沒有做不到,只有想不到

          常用鏈接

          統計

          最新評論

          2007年8月20日 #

          struts2(2.0.9)(學習一)HelloWorld篇

          本文參考struts-2.0.9-all\struts-2.0.9\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.9.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返回一個結果的名字字符串,例如SUCCESSERROR以及INPUT等,從struts.xml中獲取映射信息。一個給定的結果字符串將選擇一個頁面或其他資源(圖片或PDF)來返回給用戶。

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

          六.             問題匯總

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

          posted @ 2007-08-20 09:23 井底之蛙 閱讀(292) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 固安县| 九台市| 噶尔县| 晋宁县| 腾冲县| 台前县| 抚松县| 怀远县| 德江县| 旅游| 乐清市| 昂仁县| 城固县| 鄂温| 广饶县| 鹤壁市| 沂源县| 依安县| 安丘市| 鄂尔多斯市| 西吉县| 沐川县| 永安市| 特克斯县| 桐梓县| 桦川县| 荥经县| 高淳县| 岑溪市| 曲阳县| 沿河| 赣榆县| 彰化市| 凌源市| 石棉县| 麦盖提县| 汝南县| 隆回县| 怀远县| 塔城市| 苏尼特左旗|