沒有做不到,只有想不到

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          2007年8月20日 #

          struts2(2.0.9)(學(xué)習(xí)一)HelloWorld篇

          本文參考struts-2.0.9-all\struts-2.0.9\docs\docs\hello-world.html,并根據(jù)筆者在學(xué)習(xí)過程中的實(shí)踐增加了部分內(nèi)容。

           當(dāng)你提交一個(gè)HTML表單到這個(gè)框架中的時(shí)候,輸入并不是被發(fā)送到服務(wù)頁,而是被發(fā)送到你提供的Java類,這些類被稱為Action。在這些Action執(zhí)行完后,選擇某一個(gè)資源來呈現(xiàn)返回結(jié)果,這個(gè)資源一般是頁面,但也可以是PDF文件,或者是Excel文件,亦或是Java applet窗口。

           假設(shè)你想要?jiǎng)?chuàng)建一個(gè)“Hello World”的例子來呈現(xiàn)歡迎信息,在你準(zhǔn)備好開發(fā)環(huán)境后,為了創(chuàng)建一個(gè)“Hello World”的例子,你需要做如下三件事情:

          1.       創(chuàng)建一個(gè)jsp頁面來呈現(xiàn)歡迎信息;

          2.       創(chuàng)建一個(gè)Action類來創(chuàng)建信息;

          3.       在配置文件中配置action和頁面的映射關(guān)系。

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

          一.             準(zhǔn)備工作

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

           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>

          二.             代碼

           首先,我們需要一個(gè)jsp頁面來呈現(xiàn)信息,HelloWorld.jsp頁面代碼如下所示:

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

          接著,我們需要一個(gè)Action類來創(chuàng)建信息,代碼如下:

          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;
              }

          }

          第三步,我們需要在配置文件中進(jìn)行相應(yīng)配置來將兩者聯(lián)系起來。讓我們編輯src下的struts.xml文件,該文件內(nèi)容如下:

          <!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>

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

          三.             代碼是如何工作的?

           你的瀏覽器向Web服務(wù)器發(fā)送了的http://localhost:8080/tutorial/HelloWorld.action注:tutorial為部署Tomcat中的的項(xiàng)目名稱URL請(qǐng)求后,服務(wù)器做了如下工作:

          1.       容器接收到了Web服務(wù)器對(duì)資源HelloWorld.action的請(qǐng)求,根據(jù)web.xml中的配置,服務(wù)器將包含有.action后綴的請(qǐng)求轉(zhuǎn)到org.apache.struts2.dispatcher.FilterDispatcher類進(jìn)行處理。這個(gè)FilterDispatcher是框架的一個(gè)進(jìn)入點(diǎn);

          2.       框架在struts.xml配置文件中找到名為HelloWorldaction對(duì)應(yīng)的類。框架初始化該Action并且執(zhí)行該Action類的execute方法;

          3.       execute方法將信息放入message變量中,并返回成功。框架檢查配置以查看當(dāng)返回成功時(shí)對(duì)應(yīng)的頁面。框架告訴容器來獲得請(qǐng)求返回的結(jié)果頁面HelloWorld.jsp;

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

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

          四.             測(cè)試Action

           測(cè)試Action很簡(jiǎn)單,以下是上述HelloWorldAction類的測(cè)試類的代碼:

          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的表單以及其余請(qǐng)求。Action返回一個(gè)結(jié)果的名字字符串,例如SUCCESSERROR以及INPUT等,從struts.xml中獲取映射信息。一個(gè)給定的結(jié)果字符串將選擇一個(gè)頁面或其他資源(圖片或PDF)來返回給用戶。

           當(dāng)一個(gè)jsp被載入的時(shí)候,通常有一些動(dòng)態(tài)變化的元素需要Action來載入。為了更加容易的顯示動(dòng)態(tài)數(shù)據(jù),本框架提供了一些可以跟HTML配合使用的標(biāo)簽。

          六.             問題匯總

           對(duì)于出現(xiàn)啟動(dòng)失敗,例如Cannot locate the chosen ObjectFactory implementation: spring等錯(cuò)誤的朋友,請(qǐng)仔細(xì)檢查你引入的包。關(guān)于需引入的包,請(qǐng)參見第一節(jié)(準(zhǔn)備工作)。也希望遇到其余問題的朋友留言或發(fā)Email給我,在此進(jìn)行匯總。

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

          僅列出標(biāo)題  
          主站蜘蛛池模板: 木里| 建昌县| 阿拉善盟| 江孜县| 龙山县| 介休市| 团风县| 云南省| 佛教| 辽中县| 宜丰县| 桂林市| 瓮安县| 兰州市| 鄂伦春自治旗| 凤凰县| 东阿县| 昌图县| 武乡县| 南江县| 新乡县| 太和县| 启东市| 黄骅市| 昌宁县| 建昌县| 西贡区| 临沧市| 海安县| 水城县| 侯马市| 谢通门县| 宁海县| 宜宾县| 渭源县| 惠安县| 阳谷县| 江永县| 广汉市| 镇康县| 临沧市|