Spring MVC
来源:互联网 发布:日本美国动画 知乎 编辑:程序博客网 时间:2024/06/10 16:06
Spring MVC是Spring框架中用于Web应用快速开发的一个模块,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。个人目前用的是spring-framework-4.1.6。
英文文档:docs→spring-framework-reference→pdf→PartV.The Web→Web MVC framework
Web MVC framework 也俗称Spring MVC
中文文档自行下载 spring-mvc4.2.4.RELEASE中文API.pdf
Spring MVC遵循开闭原则,贯穿整个spring-web框架(甚至整个Spring框架)的一个重要设计原则:对扩展开发,对修改关闭,即OCP,
The open-closed principle。之所以提到这个设计原则,是因为Spring MVC 核心类库的许多方法都被定义为final方法,就无法通过override来改变。
MVC框架要做的事情:
- 将URL映射到java的类或者java类的方法中
- 封装用户已经提交的数据
- 处理请求——调用相关的业务处理——封装响应的数据
- 将响应的数据进行渲染,如jsp,html,freeMarker等
Struts2将2和3交给属性(get/set)去处理,不用管,IOC依赖注入实现了,即在action 里面定义要接收的参数,并提供相应的setter,getter,和提交参数的名称一致,并不用做数据类型的转换,响应的数据也用此方式封装在属性中,存放在Action Container的值栈中,如下图。只需要实现1和4。
public class TestAction extends ActionSupport{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
freeMarker是一个用纯java编写的一个模块引擎,一个基于模板生成文本输出的通用工具,被设计用来生成HTML Web页面,特别是基于MVC模板的应用程序。虽然freeMarker具有一些编程的能力,但是通常有java程序准备要显示的数据,由freeMarker生成页面,通过模板显示准备的数据。如下图:
freemarker不是一个web应用框架,而是适合作为web应用框架的一个组件,freemarker与容器无关,因为它并不知道是HTTP或者Servlet,也可用于非Web环境。FreeMarker更适合作为Modle2(MVC模式)的视图组件,也可以在模板中使用JSTL(JSP标准标签库),还可以通过Eclispe插件编辑FreeMarker,目前FreeMarker最好的Eclipse编辑插件是JBoss Tools。
Spring MVC是一个轻量级的框架,是基于请求响应的MVC框架,这种框架有很多,如Struts1,Struts2,Spring MVC等,这些都是请求一个URL来映射到一个地方。
轻量级框架的好处:
- 没有侵入性的API(代码中不用继承此框架的类或者提供的接口)
- 对容器没有依赖性(依赖小,也就是你想换一个框架了随时换,复杂度不高,如重量级开EJB就是依赖性高,加入你的应用使用的是EJB 然后你想换个框架 不用EJB了 你就会觉得痛苦无比……因为大量的代码包含EJB特定的东西 你不得不重构它们)
- 易于配置,易通用,启动时间短
轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。而作为重量级框架EJB框架则强调高可伸缩性,适合与开发大型企业应用。
为什么学习Spring MVC
- 性能比Struts2好(Struts2是开发效率高,但是性能低,Spring MVC是基于方法的设计,而Struts2是基于类的设计,Struts2每次发送请求都会创建一个ActionContainer,也可以说是ActionContext,即Action上下文,包含一次请求的所有信息,所以性能较之低)
- 简单,便捷,易学
- 天生与Spring无缝集成(本身就是Spring的后续产品,使用Spring的核心IOC,aop无缝集成)
- 能够进行简单的junit测试
- 支持restful风格
- 异常处理
- 本地化,国际化
- 数据验证,类型转换等
- 拦截器
- 最重要的原因——使用的人多,或者使用的公司多
- 使用约定优于配置(也称按约定编程,一种软件设计范式,本质来说,就是开发人员仅需要规定应用中不符约定的部分,例如,模型中有个妹为sale的类,那么数据库对于表就会默认为sale。只有偏离这个约定,如将命名为products_sale时,才需要写相关配置,使用按约定编程,可以减少很多配置,是代码简洁又不失灵活)
Struts2是线程安全的,但是Struts1不是线程安全的
如上文1所叙,因为每次都会新创,所以是线程安全的,默认是多例的,但是Struts1是单例的,当第一次请求会new一个放到缓存中,后面请求这个的时候还是会找原来创建好的,不会重新创建,默认单例,所以存在线程不安全问题,顺便提到Servlet也是单例的,只实例化一次。在单例模式上,要想解决线程安全问题,需要在关键部分加synchronized.
struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入
struts2实际上是通过setter getter方法与request打交道的
struts2中,一个Action对象对应一个request上下文
spring mvc不同,spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去
在spring mvc中,一个方法对应一个request上下文
所以 说spring mvc是基于方法的设计,Struts2是基于类的设计
在Spring IOC管理中,每次bean定义只生成一个对象实例,要保证每次getBean请求获得的都是此实例,所以要保证单例(scope)
- spring mvc
- spring mvc
- spring mvc
- spring,MVC
- Spring MVC
- spring mvc
- Spring-MVC
- Spring MVC
- Spring MVC
- Spring MVC
- SPring MVC
- spring mvc
- Spring mvc
- spring MVC
- spring mvc
- spring mvc
- spring mvc
- Spring MVC
- 回归分析及参数介绍
- @Transient
- 数据库第十七周学习攻略
- springMVC登录验证码
- 数论——组合数(基础)
- Spring MVC
- tableView 的cell不铺满整个屏幕时,下面多余分割线消失处理
- python_文件的处理
- 记忆化搜索:POJ1579-Function Run Fun(最基础的记忆化搜索)
- 关于BASIS_MOLOPT以及BASIS_MOLOPT_UCL基组的说明
- 因式分解梳理
- php数组array_merge例子
- complex类
- HTTP请求的GET与POST方式的区别