Spring MVC
Author: 江南白衣
1.总体设计
MVC框架如Struts、Webwork,都在Servlet的基础上创建了一个自己的绝对空间,在自己的空间里定义MVC世界和规则。无论这个世界定义得是否漂亮,程序员都有一个学习世界的过程。
而Spring MVC则完全保留着Servlet概念中的request,response和session,并没有强制建立一个自己的概念模型(当然,他也有很烂的SimpleFormController,但你完全可以把它踢在一旁不管),也不强制需要FormBean和一堆XML定义。
同时,它透明完成了与Spring的集成,Multi-action的派发,提供了绑定request数据用的binder等基本API。
所以,如果想简单,使用Spring MVC的原始形态是一个很好的,类似于RoR中ActionPack的方案。
推荐使用一个Controller响应一组相关动作的MultiActionController。同时,虽然一点不喜欢FormController定义的概念模型,但还是不影响发挥拿来主义,在共性比较明显后台管理模块,定义MultiActionFormController,自动完成某些共同的Form流程。
你还是很喜欢WebWork?好在我们也提供了sample,见2.4 WebWork 。
2.写给在用其他MVC框架程序员的快速入门
也许,所有程序员都先放下自己框架里的概念模型,还原回一个JSP/Servlet程序员的角度,思考一个JSP/Servlet框架需要的功能。
0. 配置文件
Spring的配置文件默认为WEB-INF/xxxx-servelet.xml。
其中xxx为web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name。
1. 与Spring集成及IOC
天然兮,由DispatcherServlet完成。
2. Action及Multi-Action 分发
Spring将按照配置文件定义的URL,Mapping到具体Controller类,再根据URL里的action= xxx或其他参数,利用反射调用Controller里对应的Action方法。
3. 输入数据绑定
Spring提供Binder 通过名字的一一对应反射绑定Pojo,也可以直接从request.getParameter()取数据。
如果没有另外加入框架封装,需要手工调用Binder.
4. 输入数据验证
Sping 提供了Validator接口,而Spring Module还整合了Commons-Validaor 。
5. 结果数据放回View
有个ModelAndView的概念,代表了返回的View名及数据(Model,一个Map)。可以用modelAndView.addObject()放入数据。当然,也可以直接request.setAttribute()。
6. Interceptor
AOP概念,其实Servlet里面早有Filter概念,不过Inteceptor可以更灵活的Mapping,另提供postHandle的插入点
preHandle() handler开工之前。
postHandle() hander开工之后,但DispatchServlet还没有渲染页面。
afterCompletion() 一切完工之后。
7. Redirect,Forward页面及Token防止重复提交。
Spring提供 "redirect:index.jsp", "forward:index.jsp"这样的简写。
Spring Simple Form提供了防止重复提交的机制。
8. 如果想直接编写Response返回字符串, 而不是返回一个View
将函数的返回类型设为void,使用ss封装的 rendText(response,String text)函数。
3.Spring MVC Multi-action
3.1 基本配置
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName"> <value>method</value> </property> <property name="defaultMethodName"> <value>index</value>
</property>
</bean>
以上配置将按xxx.do?method= list 将调用controller的list()方法
不过还要争取早日改为Web2.0式的写法./book/list.htm 要优于/book.do?action= list。
其余配置和其他Spring MVC配置差不多,请看bookstore-servlet.xml,留意下面几个关键节点
<bean id="exceptionResolver">
<bean id="methodNameResolver">
<bean id="viewResolver">
<bean id="urlMapping">(留意最新的urlMapping简写语法.)
4.SpringSide BaseController
继承于Spring的MultiActionController, 对其作了少量扩展--主要是对数据绑定的扩展,还加了一个SaveMessage函数。
1.对数据绑定的扩展:
a.InitBinder() 初始化Binder,注册日期类并允许数字类为空。
b.对Bind and Validate函数的再包装
本来Spring已有bind函数完成bind and validate, 但这个函数一来没有使用BindException作返回值而是抛出一个ServletException只好自己另外实现一个bindObject()函数。
c.另外稍稍扩展了一些函数使其更好用。
2.SaveMessage():
如果是redirect的关系,message信息放在request.attribute()就会丢失,SaveMessage()将其放在session。
配合messageFilter,在渲染页面前,把它从session又移回request。
5.后台管理通用的BaseManageController
Spring MVC中的SimpleFormController中的交互机制有值得参考的部分,但其只有一个onSubmit函数不能很好的表达CRUD的语义,所以将两者结合成Multi-ActionFormController是比较好的方法。通过约定命名,在基类实现list(),create()等函数和默认流程,而在子类实现onList(),onCreate()函数。
目前只是初步结合两者,还有很大的改进空间。
参考了RoR中的命名。BaseManageController即按照此命名定义基类。
list 显示对象列表的页面
create新增对象的输入界面
edit 修改对象的输入界面
show 只读显示对象detai的页面
save 新增对象的保存
update 修改对象的保存
remove 删除单个对象
removeAll 批量删除对象
query 查询
分享到:
相关推荐
以下将详细分析Spring MVC的核心知识点。 一、前言:介绍了选择Spring MVC的原因和优势。Spring MVC简单易用,可以快速提高开发效率,且性能优秀,社区活跃,文档丰富。由于支持注解配置,使得框架更加易用。相较于...
总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了深入学习Spring MVC的机会,你可以通过阅读和分析源码来了解如何配置DispatcherServlet、怎样编写控制器、如何进行数据绑定与验证,以及如何利用拦截器等特性...
通过分析这些文件,你可以看到Spring MVC的实际应用,加深对其工作流程的理解。 总之,"Spring MVC使用Demo"是一个很好的学习资源,涵盖了从环境搭建到实际编码的全过程。通过学习和实践,开发者能够熟练掌握Spring...
这本书“看透Spring MVC源代码分析与实践”显然是为了帮助开发者深入理解Spring MVC的工作原理,并通过源码分析提升实战技能。在本文中,我们将探讨Spring MVC的关键概念、设计模式以及源码中的重要组成部分。 1. *...
Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...
**Spring MVC 4.2.4.RELEASE 中文文档** Spring MVC是Spring框架的一个核心组件,专注于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者组织和分离应用的业务逻辑、数据处理以及用户界面。...
通过分析这些源码,你可以更好地理解Spring MVC的工作流程和各个组件的作用。对于初学者来说,动手实践是最有效的学习方式,你可以尝试运行这些示例,观察它们如何响应不同请求,逐步掌握Spring MVC的基础知识。
标签"spring"、"spring_mvc"、"spring_mvc_源码"、"springmvc"进一步确认了内容的重点是Spring MVC框架及其源码分析。Spring MVC源码的深入理解有助于开发者更好地掌握框架的工作原理,优化代码性能,甚至为自定义...
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能的Web应用程序。而Web服务是一种基于开放标准的,使得不同系统之间能够相互通信的技术。在本示例中,我们将探讨如何将Spring MVC与Web服务(特别是...
Spring MVC、Spring和Mybatis是Java开发中非常流行的三大开源框架,它们的组合,通常被称为“SSM”框架。SSM框架的使用可以极大地提高Web应用的开发效率,通过合理的解耦,使得各组件能够更好地协同工作。接下来,...
看透Spring MVC源代码分析与实践 看透Spring MVC源代码分析与实践
这份【面试资料】-(机构内训资料)看透Spring MVC源代码分析与实践.zip文件很可能是为了帮助求职者准备相关面试问题而设计的,包含了对Spring MVC工作原理、关键组件和源码解读的详尽解析。 1. **Spring MVC基本...
Spring MVC 是一个广泛使用的Java Web框架,用于构建可维护、模块化且松散耦合的Web应用程序。在处理HTTP请求时,Spring MVC 提供了参数绑定功能,将HTTP请求中的参数映射到控制器方法的参数上,使得开发更加便捷。...
在本源码分析中,我们将探讨Spring MVC的工作原理、主要组件及其交互方式。 1. **DispatcherServlet**: 作为Spring MVC的前端控制器,DispatcherServlet是所有请求的入口点。它负责拦截请求,根据请求信息(如URL、...
8. **源码分析**:深入理解Spring和Spring MVC的源码,有助于优化配置和解决问题。例如,了解DispatcherServlet如何调度请求,以及HandlerMapping如何找到合适的处理器。 9. **工具**:IDEA、Eclipse等集成开发环境...
通过学习和分析这个示例,开发者可以进一步了解如何在实际项目中应用Spring MVC来实现安全的登录功能。在实际的`logindemo`压缩包中,应该包含了相关的配置文件(如`web.xml`、`spring-servlet.xml`)、Controller类...
通过分析这个"Spring MVC Beginner’s Guide"的源代码,你可以看到以上知识点的实际应用,从而加深对Spring MVC框架的理解,快速上手开发Web应用。这个源码涵盖了从基础到进阶的各个方面,对于初学者来说是一份宝贵...