posts - 5,  comments - 0,  trackbacks - 0
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

              寫教程的目的并不是為了顯示自己的高深,而是幫助他人快速入門,因此我這里不強(qiáng)調(diào)太多struts2底層的東西,但是也會(huì)介紹一些必須了解的東西。好了,廢話少說(shuō),開(kāi)始吧!
              首先介紹下我的開(kāi)發(fā)環(huán)境:eclipse3.5+jetty6+maven2+struts2.1.6。按照maven2規(guī)范,我們新建一項(xiàng)目Struts2Demo,建立源文件夾src/main/java和src/main/resources,建立webapp目錄src/main/webapp,在webapp目錄下建立WEB-INF目錄,并創(chuàng)建一個(gè)web.xml文件。當(dāng)然這些你完全可以使用maven2的Archetype插件創(chuàng)建。建立好的目錄如下圖:
             
              之后就應(yīng)該先引入struts2依賴了,我們使用m2eclipse可以方便地引入struts2依賴的包,首先enable maven dependency management,然后就自動(dòng)生成了pom.xml,接下來(lái)引入struts-core-2.1.6.jar,可以看到,struts2-core所依賴的jar包都給自動(dòng)下載下來(lái)了,用maven2就是方便,而且能最大程度避免版本沖突問(wèn)題。struts2.1.6依賴的包如下圖(不用maven的可以一個(gè)個(gè)下):
             
              依賴問(wèn)題解決后,就該開(kāi)始開(kāi)發(fā)了,在我們的web.xml配置struts2的filter(注意:版本不同filter可能不一樣,詳細(xì)可以看struts2官方的guide)。我的web.xml代碼:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app id="Struts2Demo" 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">

              
          <filter>
                  
          <filter-name>struts2</filter-name>
                  
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
              
          </filter>
              
          <filter-mapping>
                  
          <filter-name>struts2</filter-name>
                  
          <url-pattern>/*</url-pattern>
              
          </filter-mapping>
              
              
          <welcome-file-list>
                  
          <welcome-file>home.action</welcome-file>
              
          </welcome-file-list>
          </web-app>
              然后我們?cè)趕rc/main/resources下創(chuàng)建struts.xml,敲入以下代碼:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts PUBLIC 
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >
          <struts>
              
          <package name="GettingStarted" extends="struts-default" namespace="/">
                  
          <action name="home">
                      
          <result>/index.jsp</result>
                  
          </action>
                  
          <action name="gettingStarted">
                      
          <result>/WEB-INF/pages/getting_started/first_action_input.jsp</result>
                  
          </action>
                  <action name="myFirstAction" class="org.mickey.struts2demo.GettingStarted.MyFirstAction">
                      
          <result name="success">/WEB-INF/pages/getting_started/first_action_result.jsp</result>
                  
          </action>

              
          </package>
          </struts>
              稍作解釋哈,前四行照搬就可以了,然后一個(gè)struts配置文件必須是以<struts>為根的,<package>是包,主要包括name和namespace,name只是一個(gè)普通標(biāo)識(shí)而已,保證全局唯一即可,namespace就是我們通過(guò)url訪問(wèn)時(shí)的所謂的名空間,比如namespace="/mickey",package下有一個(gè)action名為test,那么我們通過(guò)url訪問(wèn)的時(shí)候就是http://host:port/mickey/test.action。namespace不一定只有一個(gè)/,如"/mickey/minnie"都可以。我這里的package繼承了struts-default包,這個(gè)包能在struts-core-2.1.6.jar中找到,在struts-default.xml里面,這個(gè)default包包含了一些攔截器,一些result types等,深入的東西請(qǐng)留意以后的文章。
              <action>標(biāo)簽主要包括name,class,method屬性,name就是通過(guò)url訪問(wèn)的action的名字,如剛剛的例子就是name="test", class就是定位處理這個(gè)action的Action類,struts2中的Action只是pojo而已,十分簡(jiǎn)單。method就是指定用Action類中的哪個(gè)方法來(lái)處理這個(gè)action,如果不指定method,默認(rèn)使用execute方法,看看我的struts.xml吧,綠色底那塊,我們把class指向了org.mickey.struts2demo.GettingStarted.MyFristAction,下面我們來(lái)看看這個(gè)類吧:
          /**
           * 
           
          */
          package org.mickey.struts2demo.GettingStarted;

          import com.opensymphony.xwork2.ActionSupport;

          /**
           * 
          @author mickey.shao
           *
           
          */
          public class MyFirstAction extends ActionSupport {
              
          /**
               * 
               
          */
              
          private static final long serialVersionUID = -6911104681578292245L;

              
          private String myName;
              
              
          public String getMyName() {
                  
          return myName;
              }
              
          public void setMyName(String myName) {
                  
          this.myName = myName;
              }

              
          public String execute(){
                  
          return SUCCESS;
              }
          }
              一般我們寫Action可以不繼承任何類,但是繼承ActionSupport是更好的選擇,這樣可以獲得框架更好的支持??吹絜xecute方法了吧?一般action的method需要滿足以下特點(diǎn):1.必須是public,2.必須返回String,3.必須不帶任何參數(shù)。SUCCESS其實(shí)是一個(gè)字符串"success",struts2已經(jīng)定義好了。action myFirstAction沒(méi)有指定method方法,默認(rèn)就執(zhí)行execute了,當(dāng)然我們完全可以不寫execute方法,因?yàn)楦割愐呀?jīng)有了默認(rèn)的實(shí)現(xiàn)。
              寫完Action類,然后該寫頁(yè)面了,我這里用jsp,在src/main/webapp/WEB-INF下建立文件夾pages/getting_started,新建兩個(gè)jsp:first_action_input.jsp和first_action_result.jsp。先貼下這兩個(gè)文件的代碼哈:
          first_action_input.jsp:
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding
          ="UTF-8"%>
          <%@ taglib uri="/struts-tags" prefix="s" %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>輸入你的名字</title>
          </head>
          <body>
              
          <s:form action="myFirstAction" namespace="/" method="post">
                  
          <s:textfield name="myName"></s:textfield>
                  
          <s:submit value="提交"></s:submit>
              
          </s:form>
          </body>
          </html>
          first_action_result.jsp:
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding
          ="UTF-8"%>
          <%@ taglib uri="/struts-tags" prefix="s" %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>看看結(jié)果?</title>
          </head>
          <body>
              struts2跑通了嗎,
          <font color="red"><s:property value="myName"/></font>?呵呵!
          </body>
          </html>
              first_action_input.jsp用于輸入任意的字符串,然后first_action_result.jsp顯示你輸入的字符串,很簡(jiǎn)單。在瀏覽器敲入http://host:port/appName/gettingStarted.action,進(jìn)入到first_action_input.jsp,輸入“米老鼠”,點(diǎn)擊提交,看看結(jié)果吧~看到“struts2跑通了嗎,米老鼠?呵呵!”,恭喜你,你已經(jīng)入門了。
              下面解釋下action和jsp的關(guān)系是如何映射的。往上看回我們的struts.xml文件,action gettingStarted的<result>標(biāo)簽配置的是first_action_input.jsp的相對(duì)于webapp根目錄的完整路徑,當(dāng)我們?yōu)g覽器敲入http://host:port/appName/gettingStarted.action,struts根據(jù)配置,把視圖轉(zhuǎn)向了所配置的jsp去了。然后看看另一個(gè)action myFirstAction,<result>標(biāo)簽中多了個(gè)屬性name,這個(gè)其實(shí)就是Action類的方法返回的字符串了,<result>標(biāo)簽主要包括name和type屬性,name默認(rèn)是"success",所以看到gettingStarted的result沒(méi)有配置name,其實(shí)是默認(rèn)了。type默認(rèn)是dispatcher,普通分發(fā)而已,無(wú)需贅述。當(dāng)然type還有redirect,plain text,chain等很多,這些深入的請(qǐng)看后面的文章,呵呵!
              現(xiàn)在的問(wèn)題是,如何使得action myFirstAction執(zhí)行呢?這就看看我們的first_action_input.jsp代碼吧,頁(yè)面中我使用了struts的tags,請(qǐng)從struts-core包META-INF目錄下將struts-tags.tld拷貝到WEB-INF目錄下,在頁(yè)面用taglib將其導(dǎo)入。頁(yè)面有主要由一個(gè)form組成,form里面有一個(gè)input文本框和一個(gè)提交按鈕,文本框和提交按鈕我都用的struts的tag,當(dāng)然也可以不用的,關(guān)于struts-tags的更多內(nèi)容可以參考后面的文章。
              <s:form action="myFirstAction" namespace="/" method="post">
                  
          <s:textfield name="myName"></s:textfield>
                  
          <s:submit value="提交"></s:submit>
              
          </s:form>
          看到這段,是不是已經(jīng)豁然開(kāi)朗了?呵呵!看到myName了吧,這就是我們Action類中的域了!那么這個(gè)myName是如何設(shè)置到Action類中的呢?這就要?dú)w功于偉大的攔截器機(jī)制了,關(guān)于攔截器的更多內(nèi)容,請(qǐng)參看后面的文章,呵呵!
              提交數(shù)據(jù)后,struts找到myFirstAction的配置,把結(jié)果導(dǎo)向到了first_action_result.jsp中,結(jié)果頁(yè)面通過(guò)<s:property />標(biāo)簽將myName打印到頁(yè)面上了。
              看了這篇文章,應(yīng)該覺(jué)得struts2開(kāi)發(fā)很簡(jiǎn)單吧?
              下一篇文章將深入介紹struts.xml,敬請(qǐng)關(guān)注。
          posted on 2009-10-22 20:49 Mickey.Shao 閱讀(633) 評(píng)論(0)  編輯  收藏 所屬分類: struts2

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 道孚县| 弋阳县| 凯里市| 德州市| 辽源市| 越西县| 津南区| 嘉义市| 商城县| 霸州市| 洱源县| 湖口县| 文安县| 苍梧县| 伊川县| 女性| 即墨市| 敦煌市| 蓬溪县| 政和县| 高邮市| 且末县| 通辽市| 曲水县| 新蔡县| 商丘市| 乐陵市| 无棣县| 景宁| 德兴市| 军事| 华坪县| 社旗县| 香格里拉县| 图们市| 郑州市| 青州市| 鄂托克旗| 福海县| 宜州市| 合肥市|