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

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

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

    posts - 297,  comments - 1618,  trackbacks - 0
     

    說明:本文經過筆者對struts2.0.8自帶的實例struts2-blank-2.0.8學習而寫,對該例子進行了部分修改,希望對廣大象要學習struts2的朋友有所幫助。

    一.             實例說明

     本例是Struts2的簡單實例,通過本工程的學習,我們將會對struts2的表單以及表單驗證有一個初步的認識、了解struts2的配置以及初探Struts2的本地化輸出。

    二.             編碼準備

    1. 包的引入

    MyEclipseNetBeans中建立web工程,將所需的包放入WebRoot/lib目錄中,本實例所需的包有:

     commons-logging-1.1.jar

     freemarker-2.3.8.jar

     ognl-2.6.11.jar

     struts2-core-2.0.8.jar

     xwork-2.0.3.jar

     這些包在struts-2.0.8-all\struts-2.0.8\lib目錄下都可以找到,請讀者自行下載。

    2. web.xml的配置

    要使struts能正常工作,需修改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>Struts Blank</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>

    3. 建立源碼目錄和jsp存放目錄

     src目錄下建立example文件夾,用于存放本實例的java文件等。在WebRoot文件夾下建立子文件夾example,用于存放本工程的jsp文件。

    三.             編碼

    1.       Welcome.jspLogin.jsp的編寫

    首先我們建立Welcome.jsp,該文件包含兩個鏈接,點擊“登錄”鏈接后跳轉到登錄信息輸入頁面,點擊“注冊”按鈕跳轉到注冊頁,為了學習struts2配置中的通配符使用,我們暫不實現注冊功能。Welcome.jsp的代碼如下:
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        
    <title>歡迎界面</title>
        
    <link href="<s:url value="/css/examplecss"/>" rel="stylesheet" type="text/css"/>
    </head>

    <body>
        
    <h3>導航</h3>
        
    <ul>
            
    <li><href="<s:url value="/example/Login.jsp"/>">登錄</a></li>
            
    <li><href="<s:url action="Register"/>">注冊</a></li>
        
    </ul>
    </body>
    </html>
     

    在該頁面的頂部,我們需要將struts2的標簽庫引入,語句為:<%@ taglib prefix="s" uri="/struts-tags" %>

    在該頁面,主要用到struts2<s:url>標簽,該頁面主要用到該標簽的兩個屬性,分別為valueaction,其中action屬性表示用action來產生url,而value表示使用的目標值。在頁面上點擊“查看源文件”按鈕,可看到生成的語句分別變為:

    <link href="/struts2-blank-2.0.8/css/examplecss" rel="stylesheet" type="text/css"/>

    <a href="/struts2-blank-2.0.8/example/Login.jsp ">

    <a href="/struts2-blank-2.0.8/example/Register.action">

    由此可知使用該標簽時,struts2會自動為我們帶上下文路徑,對于加了屬性action<s:url>標簽,后面會自動帶上“.action”作為后綴。

     點擊“登錄”鏈接后,跳轉到Login.jsp頁面,該頁包含一個登錄表單,讓用戶輸入用戶名和密碼信息,用戶點擊提交按鈕,跳轉到指定的Action——Login進行處理。Login.jsp的內容如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        
    <title>登錄</title>
    </head>
    <body>
    <s:form action="Login">
        
    <s:textfield name="username" label="用戶名"/>
        
    <s:password name="password"  label="密碼"/>
        
    <s:submit/>
    </s:form>
    </body>
    </html>

    該頁用到Struts2的表單標簽<s:form><s:textfield><s:password>

     <s:form>action屬性表示表單提交后跳轉的action的名稱,此處為Login,該標簽最終將生成HTMLform

     <s:textfield>標簽類同于HTML<input type=”text” …>,其中name表示屬性域的名稱,label表示其前的提示名;

     <s:password>標簽類同于HTML<input type=”password” …>,其namelabel類同于<s:textfield>,在此略。

    2.       配置文件struts.xmlexample.xml

    在上述jsp頁面,我們需跳轉到兩個Action地址,需在struts2的配置文件中配置,因當工程變大時,一個龐大的struts2的配置極難維護,建議按包路徑分開配置文件,所以本實例除了struts.xml配置文件外,還新增了一個額外的配置文件example.xml。該文件在struts.xml中引用。struts.xml放在src目錄下,該文件的內容如下:
    <?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>
        
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        
    <constant name="struts.devMode" value="false" />
        
    <include file="example.xml"/>
        
    <!-- Add packages here -->
    </struts>

    可看到該文件通過<include file="example.xml"/>example.xml也作為struts2的配置文件。

    接下來,讓我們看看example.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="example" namespace="/example" extends="struts-default">
            
    <action name="Login_input" class="example.Login">
                
    <result name="input">/example/Login.jsp</result>
                
    <result type="redirect-action">Menu</result>
            
    </action>
            
    <!-- 為學習struts2配置文件中通配符的使用,我們將未定義的action的引用都定向到example.ExampleSupport這個Action中, -->
            
    <!-- 需定向的Action的名字傳到{1}中,eg.若請求Register這個action,當ExampleSupport返回success時,跳轉到/example/Register.jsp -->
            
    <action name="*" class="example.ExampleSupport">
                
    <result>/example/{1}.jsp</result>
            
    </action>
        
    </package>
    </struts>

    3.       LoginExampleSupport類以及驗證配置類Login-validation.xml的編寫

    在配置文件example.xml中,定義了兩個Action,下面我們用代碼來實現這兩個Action

    首先讓我們來看看ExampleSupport這個Action,這個Action不做任何操作,集成自ActionSupport,是本工程的各Action類的基類,該類的代碼如下:

    package example;
    import com.opensymphony.xwork2.ActionSupport;
    public class ExampleSupport extends ActionSupport {
    }


    接著讓我們來看看Login這個Action,該類繼承自ExampleSupport類,該Action需實現的業務邏輯如下:

    1)       當用戶名(username)或密碼(password)有一者或兩者為空時,登錄不成功,跳轉到登錄信息輸入頁面;

    2)       當用戶名(username)和密碼(password)都不為空時,登錄成功,跳轉到主菜單頁。

     對于用戶名和密碼的驗證,我們可以先考慮在Login類中用代碼實現的方式,此時該類的代碼如下:
    package example;

    public class Login extends ExampleSupport {
        
    public String execute() throws Exception {
            
    if (isInvalid(getUsername())) 
                
    return INPUT;
            
    if (isInvalid(getPassword())) 
                
    return INPUT;
            
    return SUCCESS;
        }


        
    private boolean isInvalid(String value) {
            
    return (value == null || value.length() == 0);
        }


        
    private String username;

        
    public String getUsername() {
            
    return username;
        }


        
    public void setUsername(String username) {
            
    this.username = username;
        }


        
    private String password;

        
    public String getPassword() {
            
    return password;
        }


        
    public void setPassword(String password) {
            
    this.password = password;
        }


    }


    當工程變得愈發復雜時,這一小段一小段驗證代碼將會變得難以維護,出于此原因,我們可以考慮采用struts2提供的驗證機制來實現。在src目錄下建立實現驗證的xml文件Login-validation.xml,為Login Action中的usernamepassword屬性增加非空驗證,驗證配置如下:

    <!DOCTYPE validators PUBLIC
            "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
    >

    <validators>
        
    <field name="username">
            
    <field-validator type="requiredstring">
                
    <message key="requiredstring"/>
            
    </field-validator>
        
    </field>
        
    <field name="password">
            
    <field-validator type="requiredstring">
                
    <message key="requiredstring"/>
            
    </field-validator>
        
    </field>
    </validators>

    當驗證未通過時,將不會進入Login Action中的execute方法,此時可刪除掉Login這個Action中的驗證內容,該類的execute方法直接跳轉到SUCCESS即可,修改后的代碼略。

    4. 本地化輸出——資源文件package.properties

    為了本地化的輸出驗證錯誤信息,我們可以將參數信息和錯誤信息放入資源文件中,資源文件package.properties位于src/example目錄下,內容如下:

    requiredstring = ${getText(fieldName)}不能為空.

    password = 密碼

    username = 用戶名

    Missing.message = 該部分尚未構建,請稍候訪問...

    src/example目下下建立對應的中文資源文件package_zh_CN.properties,為了避免中文亂碼問題,我們編寫一個批處理文件code.bat來對package.properties進行編碼處理,主要用到native2ascii命令,其內容如下:

    del package_zh_CN.properties

    copy package.properties package_zh_CN.properties.gbk

    native2ascii -encoding GBK package_zh_CN.properties.gbk package_zh_CN.properties

    del package_zh_CN.properties.gbk

    del *.bak

    運行該批處理文件,可在package_zh_CN.properties中可看到編碼后的資源文件信息,如下:

    requiredstring = ${getText(fieldName)}\u4e0d\u80fd\u4e3a\u7a7a.

    password = \u5bc6\u7801

    username = \u7528\u6237\u540d

    Missing.message = \u8be5\u90e8\u5206\u5c1a\u672a\u6784\u5efa\uff0c\u8bf7\u7a0d\u5019\u8bbf\u95ee...

    5. Register.jspMissing.jsp的編寫

    2中的example.xml中,我們配置了通配符映射,在Welcome.jsp中,我們使用

    <a href="<s:url action="Register"/>">注冊</a>

    其中的Registerexample中找不到相關映射,于是在用戶點擊“注冊”按鈕時,將映射到通配符所映射的Actionexample. ExampleSupport.而后跳轉到Register.jsp頁面,其代碼如下:
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <s:include value="Missing.jsp"/>

    該頁面包含Missing.jsp頁面,其代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head><title>未構建頁面</title></head>

    <body>
    <p>
        
    <!-- 讀取配置文件中的對應信息. -->
        
    <s:text name="Missing.message"/>
    </p>
    </body>
    </html>

    四.總結

     到此為止,我們的實例已構建完,可通過瀏覽器訪問:http://localhost:8080/struts2-blank-2.0.8/example/Welcome.jsp看到我們的勞動成果。下面總結一下我們在該實例中學到的東西。

    1. 常用的一些標簽的使用

    在本實例中,我們學習了<s:textfield><s:password><s:form>以及<s:url>的使用。

    2. 表單數據的驗證

    本文描述了一個簡單的表單的數據非空驗證。

    3. 本地化輸出錯誤提示信息

    在驗證失敗時,用資源文件來輸出錯誤提示信息。

    4Strut2配置文件中通配符的使用

    對于某些地址,我們可以使用在struts2的配置通配符來使其映射到某個Action中去。

    下一篇:實例篇:struts2-mailreader-2.0.8實例學習

    上一篇:基礎篇:本地化輸出

    posted on 2007-08-02 15:25 阿蜜果 閱讀(10782) 評論(13)  編輯  收藏 所屬分類: Struts2


    FeedBack:
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-08-03 11:59 | ehe
    hehe....  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-08-03 17:11 | Thomas
    非常棒,繼續努力,加油!  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-08-06 11:39 | 五星-六日
    摟主寫的東西對我的工作幫助很大。感謝的說  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-08-22 12:15 | 何紹親
    很好,我也正在學習  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-08-29 16:21 | 阿干
    不錯。。。!
    謝謝 謝星星。!
    ^_^!
    luky-52@163.com  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-09-04 16:42 | tlb
    我覺得,因該把學習中的BUG提出來,我學習這個例子遇到好多困難,最后還是各個擊破了。現在spring struts2 結合起來,遇到問題,怎樣定制錯誤葉面,根據exception 不同而現實msg,有興趣可以討論下 tlbfpx@163.com  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-09-22 08:24 | 阿信
    樓主JJ,你好啊,有幾個問題不懂,向你請教。

    1:Welcome.jsp中,
    <link href="<s:url value="/css/examplecss"/>" rel="stylesheet" type="text/css"/>
    是不是要找一個CSS文件,好象沒有啊。

    2:example.xml中的{1}代表什么意思啊?
    method="{1}" ,<result>/example/{1}.jsp</result>

    3:為什么Login.jsp中的<s:form action="Login">的action名字和 .xml文件中<action name="Login_input" method="{1}" class="example.Login">不一樣呢。  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-10-10 20:59 | lancy
    提出樓主給的這個例子的幾個錯誤:驗證的xml文件應該放在包中;那個method={1}在這里應該去掉,否則出錯;還有就是jsp中的那個action應該與xml中的action中的那個name一樣,否則也會出錯。
      回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習[未登錄]
    2007-10-11 08:45 | 阿蜜果
    @lancy
    這篇是對struts2.0.8自帶的實例struts2-blank-2.0.8學習而寫,驗證的xml文件應該放在包中,忘了說明了,呵呵
    那個method={1}的是要去掉的,寫文章的時候忘了
    多謝提醒阿  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-11-01 18:29 | 中華信鴿
    寫的真不錯呀.  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2007-11-10 16:33 | arewei
    很不錯!
    謝謝啦!!  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2008-03-19 18:12 | tarzan
    謝謝,做得很好  回復  更多評論
      
    # re: Struts2學習進階(實例篇一)——struts2-blank-2.0.8實例學習
    2008-03-20 09:30 | df
    @ehe
    hehe  回復  更多評論
      
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294288
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 色吊丝免费观看网站| 亚洲国产精品线观看不卡| 亚洲中文字幕无码不卡电影| 免费人妻av无码专区| 亚洲成?v人片天堂网无码| 亚洲AV无码乱码在线观看性色扶 | 青草久久精品亚洲综合专区| 久久亚洲色WWW成人欧美| 美女免费精品高清毛片在线视| 免费无码又爽又黄又刺激网站| 一级人做人a爰免费视频 | 天堂亚洲国产中文在线| 亚洲爆乳无码精品AAA片蜜桃| 噼里啪啦免费观看高清动漫4| 69影院毛片免费观看视频在线| 精品免费人成视频app| 一个人看的www在线观看免费| 在线中文高清资源免费观看| 全部免费国产潢色一级| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 一个人免费播放在线视频看片| 东北美女野外bbwbbw免费| 日韩视频在线观看免费| 91成年人免费视频| 日韩免费视频播播| 亚洲中文字幕无码爆乳av中文| 久久国产亚洲精品麻豆| 亚洲成人免费电影| 337p日本欧洲亚洲大胆人人| 亚洲第一视频在线观看免费| 久草免费福利视频| 免费观看黄网站在线播放| 一本色道久久88综合亚洲精品高清| 亚洲国产精品VA在线看黑人| 亚洲另类春色校园小说| 亚洲欧美在线x视频| 免费人成网站在线观看不卡| 啦啦啦高清视频在线观看免费 | 日本亚洲欧洲免费天堂午夜看片女人员 | 国产午夜免费福利红片| 日本亚洲欧洲免费天堂午夜看片女人员 |