實現本身的控制層do-c (仿Struts2和SpringMVC)(四)

上篇博客簡單說明了Struts2是如何傳值的。相對於普通servet,它更方便程序員使用,也奠基了在JavaWeb企業級應用開發的地位。就像上篇博客中最後提到的,Struts2也有缺點,從代碼角度講這個缺點源於它的請求是基於Action類的。下面咱們看一下在SpringMVC中的傳值狀況。程序員

使用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);
    }
}
相關文章
相關標籤/搜索