tczengjin

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            2 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks
              本文為本人第一次寫作,當(dāng)時正是本人準(zhǔn)備考研時期(10月,我估計那時我瘋了,線性代數(shù)還沒看完呢!!!),哪怕寫得再爛也請轉(zhuǎn)載的給留個出處,謝謝!!!留兩個QQ群,歡迎共同學(xué)習(xí)814047    47385435

              今天寫篇關(guān)于struts2入門的文章吧,如有不妥或不對之處,請于http://bbs.heyjava.com/bbs/index.asp?boardid=2留言回復(fù),我會盡快改正的,該文章主要參考struts2官方入門文檔,原文請參看http://struts.apache.org/2.x/docs/bootstrap.html,我的系列文章會對原文做適當(dāng)增改,以我這樣的一個初學(xué)者的角度行文,那么還是照老規(guī)矩,我們的struts2旅程從Hello World開始吧!

               

          首先簡要介紹下我使用的開發(fā)環(huán)境吧:Eclipse3.3 IDE For Java EE Developers下載地址:http://www.eclipse.org/downloads/JDK5或以上版本,Struts2.0.9(呵呵,在我寫作的同時Struts2.0.11已經(jīng)發(fā)布,下載地址http://struts.apache.org/download.cgi#struts206)將下載的struts-2.0.11-all.zip解壓將struts2開發(fā)所必需的jar包加入你的classpath(在Eclipse wtp項目結(jié)構(gòu)下拷貝到WebContent/WEB-INF/lib目錄下即可),我的做法是在Eclipse下創(chuàng)建了一個struts庫如圖所示:

           

          struts2-core.jar

           Struts2的核心api,也是我們以后打交道最多的

          xwork.jar

          Struts2(同Webwork一樣)建立在XWork 2庫的基礎(chǔ)上

          ognl.jar

          Object Graph Navigation Language (OGNL), 類似于jsp2.0EL表達(dá)式的一門用于訪問對象的表達(dá)式語言

          freemarker.jar

          Struts2所有的ui標(biāo)記的模板均使用freemarker編寫,freemarker根據(jù)struts2 ui標(biāo)記的模板渲染,可通過修改或重寫模板使struts2ui標(biāo)記按你的要求渲染

          commons-logging.jar

          封裝了通用的日志接口(在Log4J or JDK 1.4+日志api的基礎(chǔ)上


              上圖中
          Xworkstruts2 core展開的Source attachingJavadoc location我分別配置了xworkstruts2 core的源代碼和其文檔的位置,方便開發(fā)中查看源代碼和api函數(shù)的說明。如果你是按照我這樣配置的話那么在Eclipse wtp下新建一個Dynamic Web Project取名為HelloWorld,選中該項目右鍵Build Path加入我們剛才配置好的Struts2庫如下圖

           

          選擇Add Library選擇User Library加入Struts2所需的庫。

          見上圖選擇J2EE Module Dependencies勾選struts2庫參看見下圖


           

          勾選struts2庫后當(dāng)Eclipse wtp將項目發(fā)布到Tomcat的時候strust2中的jar會拷貝項目WEB-INF下的lib目錄下(以后的文章將不在強(qiáng)調(diào),請切記將需要的庫勾選,否則運行時會出現(xiàn)找不到某某類的錯誤,因為發(fā)布的時候Eclipse wtp不會將所需的jar拷貝到WEB-INF/lib目錄下,所以程序在運行時位于該庫的jar中的類會找不到

           

          <?xml version="1.0"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
          "http://java.sun.com/dtd/web-app_2_3.dtd"
          >

          <web-app>
            
          <display-name>Hello World</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>
          </web-app>

           

          web.xml中注冊一個FilterDispatcherFilter攔截所有的請求(/*)使得struts2框架為您服務(wù)。

          在項目src目錄下新建一個struts.xml作為struts2的配置文件(項目發(fā)布到Tomcat的時候Eclipse會將src目錄下的文件對應(yīng)其目錄結(jié)構(gòu)中的文件拷貝到WEB-INF/classes下)如下所示:

           

          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >

          <struts><!-- Configuration for the default package. -->
              
          <package name="default" extends="struts-default">
              
          </package>
          </struts>

            Package類似于Java中的package,其實就是可以將Action分類,劃分到不同的package中。extends="struts-default"顧名思義繼承,那么繼承誰呢?請大家查看struts2-core.jar包里有個struts-default.xml文件里面為我們的應(yīng)用程序提供了默認(rèn)配置,應(yīng)用程序從classpath加載struts.xml的時候會從classpath中加載struts2-core中并讀取struts-default.xml,以后我也會經(jīng)常涉及這個struts-default文件(呵呵,其實我也不全了解這個文件里的配置,大家努力!!!)

          那么到此Struts2的基本環(huán)境配置的模板搭建好了!

          那么新建一個index.jsp

           

          <?xml version="1.0" encoding="UTF-8" ?>
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding
          ="UTF-8"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          <title>首頁</title>
          </head>
          <body>
          <h2><s:form action="HelloWorld">
              
          <s:textfield name="message" label="你的姓名"></s:textfield>
              
          <s:submit value="提交"></s:submit>
          </s:form></h2>
          </body>
          </html>

           

          在這個頁面中我將使用struts2標(biāo)記,先注個冊先如下:

          <%@ taglib prefix="s" uri="/struts-tags"%>(在struts2-core.jarMETA-INF/struts-tags.tld中的標(biāo)記<uri>/struts-tags</uri>剛好與上面uri屬性匹配, struts2的所有標(biāo)記的配置信息估計都在這文件里,大家一起研究研究吧!)

            新建一個Action代碼如下:

          package tutorial;
          import com.opensymphony.xwork2.ActionSupport;
          public class HelloWorld extends ActionSupport {

              
          public String execute() throws Exception {
                  
          return this.SUCCESS;
              }


              
          private String message;

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


              
          public String getMessage() {
                  
          return message;
              }

          }


           

          按我上面所說的struts.xmlpackage中把這個Action注冊進(jìn)去吧

           

                  <action name="HelloWorld" class="tutorial.HelloWorld">

                      
          <result name=”success”>/helloworld.jsp</result>

                  
          </action>

           

          我們回過頭來看看表單:

          <s:form action="HelloWorld">
              
          <s:textfield name="message" label="你的姓名"></s:textfield>
              
          <s:submit value="提交"></s:submit>
          </s:form>

           

          呵呵,看見message屬性沒,該表單發(fā)出的請求會被FilterDispatcherweb.xml配置的)攔截,然后讀取struts.xml配置信息并找到HelloWorld這個Action

          通過class屬性找到tutorial.HelloWorld對象,由于表單有個message屬性會調(diào)用set方法設(shè)置message的值(同webworkhibernate的持久類不也是這樣通過set對屬性賦值,通過get對屬性取值的嗎,這里也是一樣的)然后調(diào)用execute()方法返回一個字符串(我們在寫Action的時候可以覆寫這個方法,框架默認(rèn)調(diào)用這個方法,當(dāng)然我們也可以選擇不覆寫,定義自己的方法,以后在說好了),呵呵這個SUCCESS是個常量,它定義在所實現(xiàn)的Action接口中:public static final Sring SUCCESS = “success”;里面還定義了其它的常用的字符串,自己看看源碼吧!(實際上HelloWorld繼承ActionSupportActionSupport實現(xiàn)了Action接口,當(dāng)然還有其它接口,有興趣的去挖挖源碼吧!)扯了半天就是execute()返回個”success的字符串,然后從struts.xml的對應(yīng)action配置中找到所匹配的result,然后將請求轉(zhuǎn)發(fā)到/helloworld.jsp去(result中的name=”success”可以不寫,默認(rèn)的,老實說:到底struts默認(rèn)了哪些東東,真希望官方搞張表全給我們列出來就好)

          那么剩下的最后一個頁面就是helloworld.jsp

          <?xml version="1.0" encoding="UTF-8" ?>
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding
          ="UTF-8"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          <title>Hello World</title>
          </head>
          <body>
          你好:
          <s:property value="message" />
          </body>
          </html>

           

          <s:property value="message" />就這個東東了,很簡單輸出Action中的message屬性值。

          運行下看看結(jié)果:

           

          提交下


           

          呵呵,大功告成!!!我會接著寫的,下次也是老套路登錄,呵呵,請關(guān)注博客更新!!!


          posted on 2007-10-30 16:06 爪哇園主 閱讀(4916) 評論(6)  編輯  收藏

          Feedback

          # re: struts2入門之HelloWorld 2007-10-31 12:36 BeanSoft
          十分感謝!  回復(fù)  更多評論
            

          # re: struts2入門之HelloWorld 2007-10-31 15:17 jee新手
          樓主能留一個email么 我有一個很簡單struts hello 運行不了 能幫忙看一下么?  回復(fù)  更多評論
            

          # re: struts2入門之HelloWorld 2007-10-31 19:58 爪哇園主
          email:tczengjin@163.com  回復(fù)  更多評論
            

          # re: struts2入門之HelloWorld 2007-11-07 10:32 呂布
          論述的很好,感謝你的發(fā)表。我是一個新手,在這里我學(xué)到了很多。  回復(fù)  更多評論
            

          # re: struts2入門之HelloWorld 2007-11-11 20:58 cricy
          我也是按你的這樣子做,可是我點那個提交,是提交到:http://localhost:186/HelloWord/HelloWord,為什么后面沒有向你一樣的.action?
          如果我在后面加上action,就報HTTP Status 404 - There is no Action mapped for namespace / and action name HelloWord.錯誤,  回復(fù)  更多評論
            

          # re: struts2入門之HelloWorld 2015-05-18 16:18 MAR
          @cricy
          我也是這個問題,你解決了嗎  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 吉安县| 全州县| 江北区| 盖州市| 济南市| 梨树县| 会宁县| 远安县| 鸡东县| 诏安县| 永丰县| 宜城市| 溆浦县| 沙坪坝区| 岐山县| 东方市| 灵宝市| 天台县| 盘锦市| 焉耆| 西青区| 额尔古纳市| 浦北县| 绥中县| 西安市| 罗田县| 霍城县| 东莞市| 外汇| 冷水江市| 万荣县| 武陟县| 唐山市| 星子县| 清新县| 宁强县| 出国| 满洲里市| 来宾市| 罗山县| 靖安县|