<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tczengjin

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

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

         

    首先簡(jiǎn)要介紹下我使用的開發(fā)環(huán)境吧:Eclipse3.3 IDE For Java EE Developers下載地址:http://www.eclipse.org/downloads/JDK5或以上版本,Struts2.0.9(呵呵,在我寫作的同時(shí)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項(xiàng)目結(jié)構(gòu)下拷貝到WebContent/WEB-INF/lib目錄下即可),我的做法是在Eclipse下創(chuàng)建了一個(gè)struts庫(kù)如圖所示:

     

    struts2-core.jar

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

    xwork.jar

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

    ognl.jar

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

    freemarker.jar

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

    commons-logging.jar

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


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

     

    選擇Add Library選擇User Library加入Struts2所需的庫(kù)。

    見上圖選擇J2EE Module Dependencies勾選struts2庫(kù)參看見下圖


     

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

     

    <?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中注冊(cè)一個(gè)FilterDispatcherFilter攔截所有的請(qǐng)求(/*)使得struts2框架為您服務(wù)。

    在項(xiàng)目src目錄下新建一個(gè)struts.xml作為struts2的配置文件(項(xiàng)目發(fā)布到Tomcat的時(shí)候Eclipse會(huì)將src目錄下的文件對(duì)應(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,其實(shí)就是可以將Action分類,劃分到不同的package中。extends="struts-default"顧名思義繼承,那么繼承誰(shuí)呢?請(qǐng)大家查看struts2-core.jar包里有個(gè)struts-default.xml文件里面為我們的應(yīng)用程序提供了默認(rèn)配置,應(yīng)用程序從classpath加載struts.xml的時(shí)候會(huì)從classpath中加載struts2-core中并讀取struts-default.xml,以后我也會(huì)經(jīng)常涉及這個(gè)struts-default文件(呵呵,其實(shí)我也不全了解這個(gè)文件里的配置,大家努力!!!)

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

    那么新建一個(gè)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>首頁(yè)</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>

     

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

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

      新建一個(gè)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;
        }

    }


     

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

     

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

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

            
    </action>

     

    我們回過(guò)頭來(lái)看看表單:

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

     

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

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

    那么剩下的最后一個(gè)頁(yè)面就是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" />就這個(gè)東東了,很簡(jiǎn)單輸出Action中的message屬性值。

    運(yùn)行下看看結(jié)果:

     

    提交下


     

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


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

    Feedback

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

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

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

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

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

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品白浆高清久久久久久| 亚洲AV中文无码乱人伦下载| 亚洲AV无码成人精品区天堂| 国产精品亚洲午夜一区二区三区| 特级毛片aaaa免费观看| 鲁大师在线影院免费观看| 日本不卡免费新一二三区| 婷婷亚洲综合五月天小说| 激情小说亚洲图片| 久久综合给合久久国产免费| 高清在线亚洲精品国产二区| 亚洲国产精品综合久久久| 一个人看的hd免费视频| 国产片AV片永久免费观看| 亚洲午夜久久久影院伊人| 亚洲色偷偷偷综合网| 无码精品国产一区二区三区免费 | 国产一级一片免费播放i| 亚洲福利在线观看| xxxxxx日本处大片免费看| A在线观看免费网站大全| 国产精品国产亚洲精品看不卡| 亚洲国产精品成人AV在线| 亚洲电影免费在线观看| www亚洲精品少妇裸乳一区二区| 亚洲国产精品成人久久久| 成人自慰女黄网站免费大全| 日本免费人成黄页在线观看视频 | av永久免费网站在线观看| 国产公开免费人成视频 | 亚洲天堂电影在线观看| 精品乱子伦一区二区三区高清免费播放 | 亚洲av麻豆aⅴ无码电影| 亚洲久悠悠色悠在线播放| 无码av免费一区二区三区| 国产亚洲精品线观看动态图| 亚洲AV无码一区二区三区网址| 国产卡二卡三卡四卡免费网址 | 久久亚洲精品无码aⅴ大香| 91免费在线视频| 亚洲精品国产综合久久一线|