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 框架分析相关推荐

  1. springmvc流程_基于Spring MVC框架的Http流程分析

    一.问题提出 我们可以方便的利用Spring MVC进行业务开发,请求的大部分工作都被框架和容器封装,使得我们只需要做很少量的工作.但是整个http请求流程是怎么样的?Spring MVC框架在其中起 ...

  2. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  3. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  4. 【Java学习路线之JavaWeb】Spring MVC框架入门教程

    文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...

  5. 2022/5/3 Spring MVC框架

    目录 1丶什么是MVC 1.1丶回顾MVC 1.2丶MVC设计模式 1.3丶SpringMVC架构 1.4丶概述 1.5丶中心控制器(DispatcherServlet) 1.6丶SpringMVC执 ...

  6. Spring MVC 框架搭建及详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  7. spring mvc框架设计与实现

    spring mvc框架通过DispatcherServlet来作请求分发,主要由HandlerMapping,HandlerAdapter,HandlerInterceptor三个抽象来完成.通过H ...

  8. 搭建基于spring MVC框架 + RESTful架构风格技术总结

    2019独角兽企业重金招聘Python工程师标准>>> 实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的 ...

  9. 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架

    如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...

  10. local tomcat 找不到springmvc里的包_唰唰的手撕一个简单的Spring Mvc 框架

    @[TOC] 自定义实现Spring Mvc框架 前言 在使用Spring Mvc时候我们需要配置一个中央处理器DispatcherServlet用于分发请求,根据url查找处理器,然后再根据处理器 ...

最新文章

  1. java kinect 人体识别_深度图像的Kinect骨架算法
  2. Xshell相关优化
  3. 2020 我的C++学习之路 C++PrimerPlus第九章课后习题
  4. excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
  5. Matcher类的简单使用
  6. 关于mysql内存表的一个帖子(转载)
  7. 《天天数学》连载43:二月十二日
  8. python contextlib closing
  9. Ubuntu(Deban)中安装VirtualBox
  10. 操作系统中的hosts文件
  11. 平面与网页设计中关于颜色搭配的问题
  12. 基于P5.js的动态绘板
  13. 2011-07-13 wince上面plg插件生成
  14. 分享一种Android端IM即时通讯智能心跳算法
  15. DNS域名解析服务--Named服务
  16. 史上第一个虫洞,被谷歌量子计算机造出来了 | Nature封面
  17. 高端访谈实录:访思科英国CEO菲尔·史密斯
  18. 【Geoserver】GeoServer安装GDAL扩展的方法总结
  19. fedora 16 x64 安装anjuta,在编译时提示libtool、glib、intltool包不存在
  20. 有一种执行力叫做“海娃”

热门文章

  1. HUAWEI华为MateBook 14s 2021款i5集显触屏(HKD-W56)原装出厂windows10系统恢复原厂OEM系统
  2. 怎么考一级建造师?备考经验有什么?
  3. iMac使用点滴(不断更新中)
  4. 发票核验的新篇章:探讨基于 API 的自动化发票验证技术
  5. 百度在线笔试题-裁减网格纸
  6. 独立站平台选哪个好呢?
  7. 爬取豆瓣电影 TOP 250
  8. 【职场新贵】职场小白如何快速适应职场环境
  9. 前端Q的第二次B站直播来啦(顺便发个红包)~
  10. 智能车学习日记【三】————车库判别