【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圖例如以下:
【Struts2進階】Struts2攔截器實現基於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-SQL進階】02.理解SQL查詢的底層原理
本系列【T-SQL】主要是針對T-SQL的總結。 一、SQL Server組成部分 1.關係引擎:主要作用是優化和執行查詢。 包含三大元件: (1)命令解析器:檢查語法和轉換查詢樹。 (2)查詢優化器:優化查詢。 (3)查詢執行器:負責執行查詢。 2.儲存引擎:管理所有資料及涉及的IO
【Go unsafe進階】執行空介面中的函式:除了斷言與反射,你還有更好的選擇
開發十年,就只剩下這套架構體系了! >>>
【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。 總結了一下自己目前所學的知識
【eclipse】myeclipse10安裝外掛三種方式
本文講解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