实现自己的控制层do-c (仿Struts2和SpringMVC)(四)
2016-07-05 00:00
260 查看
上篇博客简单说明了Struts2是如何传值的。相对于普通servet,它更方便程序员使用,也奠定了在JavaWeb企业级应用开发的地位。就像上篇博客中最后提到的,Struts2也有缺点,从代码角度讲这个缺点源于它的请求是基于Action类的。下面我们看一下在SpringMVC中的传值情况。
可以看到上面的代码之前的Struts2最大的不同就是input标签的name值的变化,不再是对象.属性,而是直接用属性。
用户点击提交,表单里的如下值:
username
gender
age
height
会被发送到名称为user(下称为UserController)的save方法里,需要注意的是,此处UserControllern这个类中可以没有名为user的实体对象(下称UserEntity),只要UserEntity类型的变量在save()方法的参数中出现即可。如下:
这样,SpringMVC会自动把表单里的数据封装在user对象中,同时和user变量并列的username变量也会被填充上内容,它的内容和user.getUsername()相同。同样,user对象中的属性也可以直接使用:
user.getUsername()
user.getGender()
user.getAge()
user.getHeight()
具体RequestParam的用法可自行查找。
是不是更方便?用SpringMVC写的Controller类不会有太多的属性(就是有属性也不需要有get/set方法,注入其它类的话可以使用注解方式),不像Struts2的Action类那样,在eclipse里按ctrl+O出现很多的set/get,并且没有业务含义,而SpringMVC把这些参数封装在方法里显示更加优雅。
上篇博客也说过,Struts2在接值的时候是面向Action类的,这样一个方法可以访问到该Action类的所有属性而不管需不需要,而SpringMVC接值的时候是基于具体方法的,就可以避免了这相问题。
本人是比较喜欢SpringMVC的,因为用SpringMVC写的的代码更方便阅读,不会再有无用的set/get方法的干扰,
最重要的一点是,现在单独使用Struts2的恐怕很少吧,还是得依赖Spring这个黏合剂,而SpringMVC正好是Spring的子项目,何乐不为呢。
下篇博客将一步步实现我们自己的控制层(接值方面)。
最后附上UserController的伪代码(代码纯手写,不一定能运行):
使用SpringMVC接值
还是那个jsp页面,不过表单的action的值改变了,input标签的name值也作了相应的修改。<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值的变化,不再是对象.属性,而是直接用属性。
用户点击提交,表单里的如下值:
username
gender
age
height
会被发送到名称为user(下称为UserController)的save方法里,需要注意的是,此处UserControllern这个类中可以没有名为user的实体对象(下称UserEntity),只要UserEntity类型的变量在save()方法的参数中出现即可。如下:
public void save(UserEntity user, @RequestParam(value="username", required=false) String username) { }
这样,SpringMVC会自动把表单里的数据封装在user对象中,同时和user变量并列的username变量也会被填充上内容,它的内容和user.getUsername()相同。同样,user对象中的属性也可以直接使用:
user.getUsername()
user.getGender()
user.getAge()
user.getHeight()
具体RequestParam的用法可自行查找。
是不是更方便?用SpringMVC写的Controller类不会有太多的属性(就是有属性也不需要有get/set方法,注入其它类的话可以使用注解方式),不像Struts2的Action类那样,在eclipse里按ctrl+O出现很多的set/get,并且没有业务含义,而SpringMVC把这些参数封装在方法里显示更加优雅。
上篇博客也说过,Struts2在接值的时候是面向Action类的,这样一个方法可以访问到该Action类的所有属性而不管需不需要,而SpringMVC接值的时候是基于具体方法的,就可以避免了这相问题。
本人是比较喜欢SpringMVC的,因为用SpringMVC写的的代码更方便阅读,不会再有无用的set/get方法的干扰,
代码少写了,错误就会降低。
最重要的一点是,现在单独使用Struts2的恐怕很少吧,还是得依赖Spring这个黏合剂,而SpringMVC正好是Spring的子项目,何乐不为呢。
下篇博客将一步步实现我们自己的控制层(接值方面)。
最后附上UserController的伪代码(代码纯手写,不一定能运行):
public class UserController { public void save(UserEntity user, @RequestParam(value="username", required=false) String username) { new UserService().save(user); } }
相关文章推荐
- 实现自己的控制层do-c (仿Struts2和SpringMVC)(五)
- Java 解决采集UTF-8网页空格变成问号乱码
- JAVA 获取音频/视频长度
- java用户角色权限设计
- 观察者设计模式 Vs 事件委托(java)
- Java 中的"=="和equals()方法比较总结。
- java调色板的代码
- Java中的常用异常处理方法
- java中的static
- SpringBoot + Thymeleaf实现邮件发送功能
- java异常处理练习(1)
- Spring MVC 之基本配置
- Eclipse常用快捷键
- 《Java编程思想》第四版读书笔记 第十六章 数组
- Spring扫描配置文件的两种方式及获取配置文件属性参数的方式
- spring 事务管理的bug
- [java]Java Web应用中调优线程池的重要性(转)
- Java unicode 转中文 或者 中文 转 unicode
- JDK源码学习之ThreadLocal
- java中finally与return的测试方法