struts引數傳遞演化

2021-08-19 02:28:07 字數 4239 閱讀 8522

寫服務端比較頭疼的事情就是從前端往後臺傳遞引數了,一般的套路是:

前端頁面寫一大堆亂七八糟的引數 --> 傳遞到後台 --> 後台接收並且提取封裝為乙個物件,然後拿這個物件去進行各種業務操作。

v0.1最早的時候是使用的servlet,它是這樣子的:

前端**:

<

form

action

="loginservlet"

method

="post"

>

使用者名稱:

<

input

type

="text"

name

="username"

/><

br/>

密  碼:<

input

type

="password"

name

="passwd"

/><

br/>

<

input

type

="submit"

value

="登入"

/>

form

>

接收引數的servlet**:

這種方式需要我們手動的乙個個把引數扣出來然後打包成物件。

v0.2後來有了struts2,它有乙個引數***可以自動地將引數

拍進去:

前端頁面:

<

form

action

="loginaction"

method

="post"

>

使用者名稱:

<

input

type

="text"

name

="username"

/><

br/>

密  碼:<

input

type

="password"

name

="passwd"

/><

br/>

<

input

type

="submit"

value

="登入"

/>

form

>

action**:

1

public

class loginaction extends

actionsupport

1617

public

string getusername()

2021

public

void

setusername(string username)

2425

public

string getpasswd()

2829

public

void

setpasswd(string passwd)

3233 }

這個時候可以在login()中直接使用username和passwd,因為引數***已經把它們的值拍進去了,但是仍然需要我們手動的把引數組合成物件。 

v0.3既然都已經可以拍進去,為什麼不乾脆徹底一點呢?

前端**:

<

form

action

="loginaction"

method

="post"

>

使用者名稱:

<

input

type

="text"name="user.username"/><

br/>

密  碼:<

input

type

="password"name="user.passwd"/><

br/>

<

input

type

="submit"

value

="登入"

/>

form

>

action**:

1

public

class loginaction extends

actionsupport

1112

public

user getuser()

1516

public

void

setuser(user user)

1920 }

但是這樣子的話在前端頁面寫的時候還是多了一級導航,還能更好嗎?

v0.4原來還有更酷更優雅的辦法呢~  modeldriven

前端**:

<

form

action

="loginaction"

method

="post"

>

使用者名稱:

<

input

type

="text"name="username"/><

br/>

密  碼:<

input

type

="password"name="passwd"/><

br/>

<

input

type

="submit"

value

="登入"

/>

form

>

後台**:

1

public class loginaction extends actionsupport implements modeldriven

1112

public user getuser()

1516

public void setuser(user user)

1920

@override21public object getmodel()25

26 }

啊哈返璞歸真了,從v0.2開始依賴的就是struts2的引數***把引數拍進來,而最後乙個v0.4依賴的則是modeldriven***將物件設定到valuestack的棧頂,因為valuestack有暴露棧中物件屬性可直接使用屬性名訪問的特性,所以在前台可以直接使用username和passwd傳遞引數。

總結:

通過四個版本可以看出引數傳遞的發展趨勢,(v0.1)最開始的時候我們是乙個屬性乙個屬性的往後面傳,然後到了後面手動的扣出來組合成物件,後面發展了一下,既然都過來了為什麼還要手動的扣呢?不如你直接給我拍進來吧,引數***應運而生(v0.2),再後來發現引數***也只是省去了request.getparameter()這種步驟,但是還是要我們自己手動組合成物件啊,這樣不好,於是就想乾脆拍進來之後就是物件吧,於是就持有乙個物件型別的成員屬性,然後拍進來之後直接就是物件了(v0.3),但是這樣還有有乙個弊端啊,在前端頁面上傳遞的時候寫名字要深入一層,好麻煩的啊,於是modeldriven應運而生,這個東西在傳遞引數的時候把成員屬性物件放到值棧的棧頂,借助其暴露棧中物件屬性的特性就可以在前端直接訪問成員屬性物件的屬性了(v0.4)。

Struts和SpringMVC傳遞引數比較

struts和springmvc預設均是使用的請求 進行引數傳遞 jsp 1.jsp 2.jsp 1 方法引數直接傳遞 public string demo02 string username,string password 2 方法物件傳遞時,1.jsp和2.jsp均可 與struts的強制要求不...

struts2 引數傳遞問題

struts2的引數傳遞應用3個方法。舉乙個例子,通過頁面ext的呼叫,傳遞引數的時候。action是如何得到引數的。ext.ajax.request 這個是前台ext呼叫struts2的action 後台得到引數有三種方法,一 在action中對這個些引數進行setter getter,然後在呼叫...

struts2中的引數傳遞

這個問題其實一直很困惑我的,在寫平常的jsp程式時,傳遞引數很容易,通過表單,request,鏈結等都可以傳遞,但是到了struts2中,在寫的各個地方,都看不到任何的request或是response,不知道該怎麼傳遞引數了,到了今天學習了struts2中的引數傳遞這一節,終於解開了疑惑,但是還不...