实现本身的控制层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);
    }
}
相关文章
相关标签/搜索