上篇博客簡單說明了Struts2是如何傳值的。相對於普通servet,它更方便程序員使用,也奠基了在JavaWeb企業級應用開發的地位。就像上篇博客中最後提到的,Struts2也有缺點,從代碼角度講這個缺點源於它的請求是基於Action類的。下面咱們看一下在SpringMVC中的傳值狀況。程序員
仍是那個jsp頁面,不過表單的action的值改變了,input標籤的name值也做了相應的修改。eclipse
<form id="form0" name="form0" method="post" action="/user/save.do"> <input type="text" name="username" /> <input type="text" name="gender" /> <input type="text" name="age" /> <input type="text" name="height" /> <input type="submit" value="提交" /> </form>
能夠看到上面的代碼以前的Struts2最大的不一樣就是input標籤的name值的變化,再也不是對象.屬性,而是直接用屬性。 用戶點擊提交,表單裏的以下值:jsp
- username
- gender
- age
- height
會被髮送到名稱爲user(下稱爲UserController)的save方法裏,須要注意的是,此處UserControllern這個類中能夠沒有名爲user的實體對象(下稱UserEntity),只要UserEntity類型的變量在save()方法的參數中出現便可。以下:post
public void save(UserEntity user, @RequestParam(value="username", required=false) String username) { }
這樣,SpringMVC會自動把表單裏的數據封裝在user對象中,同時和user變量並列的username變量也會被填充上內容,它的內容和user.getUsername()相同。一樣,user對象中的屬性也能夠直接使用:ui
- user.getUsername()
- user.getGender()
- user.getAge()
- user.getHeight()
具體RequestParam的用法可自行查找。code
是否是更方便?用SpringMVC寫的Controller類不會有太多的屬性(就是有屬性也不須要有get/set方法,注入其它類的話可使用註解方式),不像Struts2的Action類那樣,在eclipse裏按ctrl+O出現不少的set/get,而且沒有業務含義,而SpringMVC把這些參數封裝在方法裏顯示更加優雅。orm
上篇博客也說過,Struts2在接值的時候是面向Action類的,這樣一個方法能夠訪問到該Action類的全部屬性而無論需不須要,而SpringMVC接值的時候是基於具體方法的,就能夠避免了這相問題。 本人是比較喜歡SpringMVC的,由於用SpringMVC寫的的代碼更方便閱讀,不會再有無用的set/get方法的干擾,對象
代碼少寫了,錯誤就會下降。
最重要的一點是,如今單獨使用Struts2的恐怕不多吧,仍是得依賴Spring這個黏合劑,而SpringMVC正好是Spring的子項目,何樂不爲呢。ip
下篇博客將一步步實現咱們本身的控制層(接值方面)。開發
最後附上UserController的僞代碼(代碼純手寫,不必定能運行):
public class UserController { public void save(UserEntity user, @RequestParam(value="username", required=false) String username) { new UserService().save(user); } }