Struts 2簡單配置分析,讓Struts 2運行起來!

要配置Struts 2,首先先要有Struts 2的Jar包,可以去Struts的官網下載(http://struts.apache.org/),這裏有3個GA版本可以選擇下載,我選擇的是最新的2.2.3.1版本。

若你的硬盤空間比較大,建議下載struts-2.2.3.1-all.zip版本的,因爲裏面包含了Struts 2給我們的示例(非常有用)和許多文檔。下載struts-2.2.3.1-all.zip完畢後,將其解壓到一個文件夾下,解壓後的樣子:

apps文件夾下,有struts 2提供給我們的示例,可以直接運行,在這些示例裏面有大量我們需要的配置信息(特別對配置信息不熟悉的朋友)。

docs文件夾下,有關於struts 2的一些文檔說明。

lib文件夾下,是開發struts 2需要的類庫文件和依賴庫文件

src文件夾下,爲struts 2的源代碼,你可以使用IDE包含這個文件夾,這樣你就可以在IDE裏面看到Struts 2的源代碼了 

 

下面,就以一個簡單不過的例子,說明怎麼簡單配置Struts 2,讓其運行起來:

程序的大致流程爲:用戶輸入一個名字,Struts 2返回一個歡迎頁面。

首先,創建一個Java Web項目,我使用的是(MyEclipse 9.0的開發環境),我將項目命名爲hello。

第二步,將Struts 2的包導入到項目中,千萬別把lib包裏面的包全導入到項目中(大概77個jar文件....)那樣雖然也可以讓Struts 2運行起來,但是包含了大量現階段用不到的包,最佳的做法是導入現階段最需要的包,因爲我的例子很簡單不需要高級功能,所以只需要導入Struts 2支持最小的包就可以了,也許許多教程或書籍介紹的最小包與我們下載的版本不一樣,那麼要怎麼準確無誤的知道一個版本的最小包呢?這時候apps文件夾下的項目就起大作用了

 看到apps文件夾下有5個項目,選擇"struts2-blank.war"項目,該項目名稱爲blank意思就是空的項目,就是剛好可以讓Struts跑起來的最小配置,用解壓軟件(WinRAR之類)解壓出來

打開該解壓文件夾下的"WEB-INF"文件夾:

打開lib文件夾,裏面包含了支持最小配置Struts 2的包,將裏面的包導入到你的項目中,這時候你就可以使用基本的Struts 2功能。 

第三步,在你的項目中找到"web.xml"文件,配置它,使用戶發送給服務器的請求能夠被Struts 2框架接收攔截

對於對配置文件不熟悉的朋友來說,可能不知道應該怎麼配置,這時候我們依然可以不用去翻開書籍和網上搜索資料,只需要打開我們剛剛解壓的項目,在"struts2-blank.war"項目中找到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.ng.filter.StrutsPrepareAndExecuteFilter</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>
複製代碼

這就是在我們項目中web.xml文件需要配置的信息,你可以直接copy過去,完全沒問題,我們連寫代碼的時間都省了(-_-!!我比較懶),但建議還是多敲幾遍。下面解釋一下這些標籤的含義,filter標籤,是用於定義一個過濾器的,filter-name爲該過濾器的名稱,可以任意起;filter-class爲該過濾器使用什麼類實現。filter-mapping標籤,是過濾器的映射,filter-name表示使用哪一個過濾器,url-pattern表示要過濾什麼類型的請求,"/*"表示所有請求。display-name標籤和welcome-file-list標籤沒有什麼大影響,你也可以不用他們。這些標籤組合在一起後表示的全文信息爲:將瀏覽器發來的所有請求,交給名爲"struts2"的過濾器處理,該過濾器是由org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter類實現的,這樣即實現了Struts 2框架全面接管Web請求的環境。

第四步,創建接收數據的表單:

<s:form action="welcome">
    <s:textfield name="username" label="Enter your name"></s:textfield>
    <s:submit value="submit"></s:submit>
</s:form>

注意,在使用Struts2標籤庫的時候,請再頁面上加上對Struts2標籤庫的導入

<%@ taglib prefix="s" uri="/struts-tags"%>

第五步,創建接收數據的動作類:

複製代碼
public class WelcomeAction extends ActionSupport
{
    private static final long    serialVersionUID    = -6256745897215180249L;

    private String                username;

    public String getUsername()
    {
        return username;
    }

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

    @Override
    public String execute()
    {
        return SUCCESS;
    }

}
複製代碼

第六步,創建接收數據成功的頁面:

<body>
    Welcome,<s:property value="username"/>
</body>

Struts2的標籤庫運用了強大的對象圖導航語言(OGNL),這裏只是展示一個問候語頁面,裏面的邏輯內容很多,有機會我會總結一下OGNL的知識點(當然本人水平有限,也許表達的不好或者不全面,到時候請諒解,大家一起學習嘛)。

第七步,創建struts.xml配置文件

又遇到了不熟悉的配置文件,這時候表示又可以偷懶了:) ,打開"struts2-blank.war"項目的WEB-INF/classes文件夾下的一個名爲"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>

    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="false"/>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index"/>

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>

    <!-- Add packages here -->

</struts>
複製代碼

這次,不能直接copy過來使用了-_-!!,我們最需要的是文檔頭部的dtd文件的聲明,因爲他實在難記,你可以將它保存在一個容易獲取的地方,下次開發就不用再去找它了。該文檔的其他部分大致展示了以struts.xml配置文件的大體樣貌,你可以參照一下,裏面許多標籤我們這次並不會用到。也許你會奇怪裏面的標籤爲什麼叫這些名字,爲什麼不能叫其他名字,我爲什麼會知道其實我以前也很困惑,那些第一次開發的人怎麼知道的,後面有個前輩告訴我了,其實那個dtd文件是可以下載下來看的,那裏面說明了有什麼標籤可以用,該怎麼用。下載地址就是聲明字段那裏的網址( http://struts.apache.org/dtds/struts-2.0.dtd )。下載下來大致成這模樣:

View Code

看這個文檔需要一定的正則表達式的基礎,有興趣的可以去看一看。

瞭解了上面的知識後,創建我們自己struts.xml文件,還有一點要注意該文件需要創建在src目錄下(使用IDE的情況下),不然需要創建在WEB-INF/classes目錄下。

複製代碼
<?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="welcomePackage" extends="struts-default">
        <action name="welcome" class="struts2.suxiaolei.action.WelcomeAction">
            <result name="success">/welcome_success.jsp</result>
            <result name="input">/welcome.jsp</result>
        </action>
    </package>
</struts>
複製代碼

package元素,作用類似於Java包的機制,他是用於分門別類的一個工具,extends屬性如他的名字一樣,它繼承了struts-default這個包的所有信息,一般我們自己創建一個包最好都繼承它,因爲他爲我們提供了絕大部分的功能,你可以在struts2-core的jar包中的struts-default.xml文件中找到這個包。action元素對應與你的表單,例如你的表單的action="welcome",那麼該表單提交後就會將參數交予action的name="welcome"的實現類處理。result元素爲action的結果,它由動作類返回的控制字段選擇。

最後,測試項目

在瀏覽器中輸入:http://localhost:8081/hello/welcome.jsp,獲得如下界面

輸入一個名稱"Tom",點"submit"按鈕,結果如下:

可以看到Struts 2已經成功運行了。

還有一點,要是提交的是中文怎麼辦,下面先看看會是什麼效果:

可以看到中文變成看不懂的一串字符了,要解決這個問題可以查看org.apache.struts2包下的default.properties文件,該默認屬性文件有一行表示國際化的屬性

### This can be used to set your default locale and encoding scheme
# struts.locale=en_US
struts.i18n.encoding=UTF-8

你可以在你的struts.xml文件中的package標籤下加入:

<constant name="struts.i18n.encoding" value="gbk"></constant>

重新啓動服務器,瀏覽器輸入: http://localhost:8081/hello/welcome.jsp

IE效果:

FireFox效果:

Opera效果:

貌似這個方法只有,IE纔會有效果-_-!!

原來還要把頁面的編碼方式改爲gbk,默認的方式爲"ISO-8859-1",這個不支持中文

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

看看效果

現在終於成功了!原來編碼問題也是如此麻煩。。。,表述不好請見諒,若有錯誤歡迎指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章