1. 程式人生 > >【SSH快速進階】——struts2呼叫action的三種方式

【SSH快速進階】——struts2呼叫action的三種方式

經過前段時間對struts2的學習與實踐,總結了一下在struts2中呼叫action的三種方式。

1、直接呼叫

我前面的部落格【SSH快速進階】系列第一篇《【SSH快速進階】——struts2簡單的例項》採用的就是這種方式。

有兩種情景:

(1) 在form中指定訪問的action

<form action="userLogin">
    username:<input type="text" name="username" /><br>
    password:<input type="password" name="password"
/>
<br> <input type="submit" value="submit" /><br> </form>

struts.xml中的配置為:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="userLogin" class="com.danny.user.action.UserAction">
                <result
name="success">
/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>

這時,頁面點選提交會直接訪問UserAction.java中的execute方法:

    public String execute() {
        if("admin".equals(username) &&
"admin".equals(password)) { return "success"; }else{ return "error"; } }

(2) 直接在瀏覽器通過地址訪問action:

對應的struts.xml為:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="index" class="com.danny.user.action.IndexAction">
                <result name="index">/index.jsp</result>
            </action>
        </package>          
    </struts>

這時,也會直接訪問IndexAction.java中的execute方法:

public String execute() {
        return "index";
    }

2、在配置檔案中指定action的方法名稱

通過第一種訪問action的方式可以發現一個弊端,每個action中只有一個execute方法,如果我想在一個action中處理多個請求呢? 下面這種方法就派上用場啦!

比如註冊和登陸這兩個場景,想在同一個action中處理,那麼struts.xml可以這樣配:

    <struts>
        <package name="struts2" extends="struts-default">
            <!--處理使用者註冊-->
            <action name="userRegister" class="com.danny.user.action.UserAction" method="Register">
                <result name="success">/registersuccess.jsp</result>
            </action>
            <!--處理使用者登入-->
            <action name="userLogin" class="com.danny.user.action.UserAction" method="Login">
                <result name="success">/loginsuccess.jsp</result>
            </action>           
        </package>          
    </struts>

這樣,在同一個action—UserAction中可以寫兩個方法 Register和Login:

public String Register(){
    //處理註冊
    return "registersuccess";
}
public String Login(){
    //處理登入
    return "loginsuccess";
}

然後我們處理註冊時,呼叫userRegister這個action;處理登入時,呼叫userLogin這個action即可。

3、萬用字元方式的呼叫

看了上面第二種方法,還會有一個問題:處理一個請求除了再action中建立相應的方法外,還需要在struts.xml中配置一個對應的action標籤,這樣下來,一個系統中會有多少個呼叫啊?struts.xml的複雜程度大大提高了。這是可以用這種方法來簡化struts.xml的複雜程度。

同樣以上面的註冊和登入兩個場景來舉例。

struts.xml中可以這樣配置:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="user_*" class="com.danny.user.action.UserAction" method="{1}">
                <result name="registersuccess">/registersuccess.jsp</result>
                <result name="loginsuccess">/loginsuccess.jsp</result>
            </action>
        </package>          
    </struts>

UserAction不變,還是對應的Register和Login兩個方法。

在action的name屬性中,user_後面是 * 號,method的值是{1},代表前面第一個萬用字元的內容,當訪問user_*時,會呼叫對應action(這裡是UserAction)中名為 * 的方法。

比如處理使用者註冊時訪問user_Register,那麼呼叫的就是UserAction中的Register方法;處理使用者登入時訪問user_Login,那麼呼叫的就是UserAction中的Login方法。

這種方法的好處就是,可以簡化struts.xml的配置,同時還可以統一系統開發的標準,比如系統中處理使用者的各種請求統一由名為“ user_* ”的action來處理,處理訂單的各種請求統一由名為“ order_* “的action來處理。

相關推薦

SSH快速——struts2呼叫action方式

經過前段時間對struts2的學習與實踐,總結了一下在struts2中呼叫action的三種方式。 1、直接呼叫 我前面的部落格【SSH快速進階】系列第一篇《【SSH快速進階】——strut

SSH快速——struts2的模型驅動—ModelDriven

上篇部落格《SSH快速進階——struts2簡單的例項》中,處理使用者登陸的action—LoginAction為: package com.danny.user.action; public cl

SSH快速——Hibernate一對一對映(one-to-one)——主鍵關聯對映

  現實生活中,有很多場景需要用到一對一對映,比如每個學生只有一個學生證,每個公民只有一張身份證等。這裡用公民-身份證來舉例說明。      在Hibernate中實現一對一對映,有兩種實現方式:1

SSH快速——探索Hibernate物件的狀態:Transient、Persistent、Detached

  學習過作業系統的朋友,腦子裡肯定都會有這張程序的狀態轉換圖:      當所有條件就緒,程序被排程執行,時間片到的時候,程序被掛起,進入就緒狀態……對程序進行的不同操作會導致程序進入到不同的狀

SSH高速——Hibernate 多對多映射

pen prop package 轉載 map tex test lec set   說到多對多關系。印象最深刻的就是大學的選修課。一個學生能夠選修多門課程,一門課程能夠有多個學生選修,學生所選的每一門課程還有成績。這個場景的E-R圖例如以下:  

Struts2Struts2攔截器實現基於Url的許可權管理

Struts2的攔截器只能攔截Action,攔截器是AOP的一種實現方式,可以使我們的系統架構更鬆散(耦合度低),可以插拔,容易互換,程式碼不改變的情況下很容易滿足客戶需求。 專案的許可權管理模組就使

01月05日 周四次Python基礎

是個 快速 files 函數 true 結果 lis pre 序列 1.8 遞歸列出目錄裏的文件1.9 匿名函數 1.8 遞歸列出目錄裏的文件 #### 遍歷目錄裏的文件(不支持子目錄文件) import os for i in os.listdir(‘C:/Users

01月11日 四周四次Python基礎

顯示 進階 col super 自定義 方法總結 總結 類方法 3.1 3.1/3.2 類的繼承3.3 類的屬性總結3.4 類的方法總結 3.1/3.2 類的繼承 類的繼承 繼承是面向對象的重要特點之一 繼承關系: 繼承是相對兩個類而言的父子關系,子類繼承父類所有的公有

01月12日 四周五次Python基礎

python3.5 rc腳本(類的定義與腳本的結構)3.6 rc腳本(start方法)3.7 rc腳本(stop和status方法)3.8 rc腳本(以daemon方式啟動) 3.5 rc腳本(類的定義與腳本的結構)/3.6 rc腳本(start方法)/3.7 rc腳本(stop和status方法) imp

mongoDB查詢聚合管道()--表達式操作符

ips www. name tostring 作用 數組操作 操作符 data seconds https://segmentfault.com/a/1190000010910985 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Operators)

菜鳥連結串列_C 結構體 共用體 列舉_遞推遞迴

座右銘 這些年我一直提醒自己一件事情,千萬不要自己感動自己。大部分人看似的努力,不過是愚蠢導致的。什麼熬夜看書到天亮,連續幾天只睡幾小時,多久沒放假了,如果這些東西也值得誇耀,那麼富士康流水線上任何一個人都比你努力多了。人難免天生有自憐的情緒,唯有時刻保持清醒,才能看清

RecyclerView原始碼解析()——深度解析快取機制

上一篇部落格從原始碼角度分析了RecyclerView讀取快取的步驟,讓我們對於RecyclerView的快取有了一個初步的理解,但對於RecyclerView的快取的原理還是不能理解。本篇部落格將從實際專案角度來理解RecyclerView的快取原理。

T-SQL02.理解SQL查詢的底層原理

本系列【T-SQL】主要是針對T-SQL的總結。 一、SQL Server組成部分 1.關係引擎:主要作用是優化和執行查詢。 包含三大元件: (1)命令解析器:檢查語法和轉換查詢樹。 (2)查詢優化器:優化查詢。 (3)查詢執行器:負責執行查詢。 2.儲存引擎:管理所有資料及涉及的IO

Linux安裝軟體的方式--rpm、yum、原始碼包

說明:此文首發於本人原創公眾號【媛測】中,如有轉載,請著明出處! 在windows系統下安裝軟體很簡單,下載軟體包後雙擊.exe檔案,點選下一步即可。然而在linux安裝軟體就沒那麼容易了,不同的Linux發行版有所差異,下面以centos7系統為例說明,如何在linux下安裝軟體

dubbo服務執行的方式

    dubbo服務的執行方式有三種,分別為:       1. 使用Servlet容器執行(Tomcat、Jetty等)       2. 自建Main方法類來執行(Spring容器)       3. 使用Dubbo框架提供的Main方法類來執行

框架[Spring]AOP攔截-方式實現自動代理

這裡的自動代理,我講的是自動代理bean物件,其實就是在xml中讓我們不用配置代理工廠,也就是不用配置class為org.springframework.aop.framework.ProxyFactoryBean的bean。 總結了一下自己目前所學的知識

eclipsemyeclipse10安裝外掛方式

本文講解MyEclipse(MyEclipse10)的三種方法,以SVN為例   一、通過MyEclipse Configuration Center線上安裝     1. 開啟MyEclipse10,在選單欄選擇MyEclipse→MyEclipse Co

機器學習線性迴歸梯度下降的方式(BGD+SGD+MSGD)以及調優方法(加快收斂速度)

1.梯度下降演算法梯度下降演算法的核心思路和公式推導,可以詳見前面的文章:梯度下降演算法的核心思路和公式推導如果代價函式是凸函式,用梯度下降演算法一定可以求得最優解。2.梯度下降的三種方式在ML中,梯度下降有三種方式:1)批量梯度下降(Batch Gradient  Desc

Struts2中動態方法呼叫方式

Jsp中訪問方式 <body>     <a href="basePath/chapter3/chapter3Action!result1">result1</a><br><ahref="basePath/chapter3/chapter3Action!r