第一节 概述
1、传统MVC架构缺点
2、传统MVC架构缺点的解决方案
3、表示层框架(更多的称为MVC框架)要解决的基本问题
4、SpringMVC 优势
5、SpringMVC 代码对比
①基于原生 Servlet API 开发代码片段
②基于 SpringMVC 开发代码片段

第一节 概述

1、传统MVC架构缺点

使用MVC架构(JSP/Thymeleaf+Servlet+JavaBean)进行分层开发,可以实现分工协作、可以实现组件重用、可以利于后期维护。
01.概述 - 图1

但是本身也是有缺点的,比如:

  • 每个功能都要声明对应的Servlet,Servlet数量多。即使让一个Servlet包括多个方法,也无法从根本上解决Servlet数量多的问题。
  • 在Servlet中获取请求数据较麻烦: 需要大量的request.getParameter(“name”)。
  • 手动的类型转换:比如int age = Integer.parseInt(request.getParameter(“age”))
  • 响应的方式的代码其实只想声明对应的响应数据。比如:request.getRequestDispatcher(path).forward(request,response); 中最关键的还是path。

2、传统MVC架构缺点的解决方案

如何解决这些问题呢?比如可采用这样的方案来解决(就是SpringMVC的解决方案)。
项目只声明一个Servlet,该Servlet作为项目请求的公共入口。并且在该Servlet中根据请求地址调用对应的控制代码处理请求。
如果将控制方法(之前Servlet调用业务层、指出跳转路径等功能)全部声明在Servlet中造成代码的体系结构不清晰。
将控制方法单独声明到控制类中(Controller类)
然后Servlet中根据请求动态的调用对应的控制类中的控制方法处理请求即可。
如何在Servlet中获取控制类对象呢?使用Spring容器的子容器,在子容器中存储所有的Controller的实例化对象,然后Servlet一次性从子容器中获取所有的对象即可。在init方法中实现即可。
这其实就引出了MVC框架的概念。常见的JavaEE开发领域 MVC框架: SpringMVC, Struts2,JFinal(中国人写的)。
SpringMVC3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
主流的JavaEE开源框架已经从SSH,SSH2(Spring+Struts2+Hibernate)发展到了SSM(Spring+SpringMVC+MyBatis)。

01.概述 - 图2

3、表示层框架(更多的称为MVC框架)要解决的基本问题

  • 请求映射
  • 数据输入
  • 视图界面
  • 请求分发
  • 表单回显
  • 会话控制
  • 过滤拦截
  • 异步交互
  • 文件上传
  • 文件下载
  • 数据校验
  • 类型转换
  • 所有这些问题,SpringMVC几乎都给出了堪称Perfect的表现。

4、SpringMVC 优势

SpringMVC (全称Spring Web MVC)是Spring提供给Web应用的框架设计,其实是Spring的一部分。它是一种基于Servlet的技术,提供了核心控制器和相关的组件,并制定了松散的结构,以适合各种灵活的需要。
01.概述 - 图3

SpringMVC 已经成为目前最主流的 MVC 框架之一。自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。随着 Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案。之所以能做到这一点,是因为 SpringMVC 具备如下显著优势:

  • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接
  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
  • 代码清新简洁,大幅度提升开发效率
  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
  • 性能卓著,尤其适合现代大型、超大型互联网项目要求
  • 支持RESTful 编程风格的请求。
  • 轻量级的框架,简单易学,进行更简洁的Web层开发
  • 可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)
  • 非常容易与其他视图技术集成,如:Velocity、FreeMarker等等
  • 因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
  • 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API
  • 更加简单、强大的异常处理
  • 对静态资源的支持
  • 支持灵活的本地化、主题等解析
  • 总之,简单易用,性能优良,同类技术中市场占有率最高,不用犹豫,就是它了。

5、SpringMVC 代码对比

①基于原生 Servlet API 开发代码片段

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  1. String userName = request.getParameter("userName");<br /> int age = Integer.parseInt(request.getParameter("age"));<br /> System.out.println("userName="+userName+",age="+age);
  2. request.getRequestDispatcher("/templates/result.html").forward(request,response);<br />}

②基于 SpringMVC 开发代码片段

@RequestMapping(“/user/login”)
public String login(String userName,Integer age){

System.out.println("userName="+userName+",age="+age);

return "result";<br />}

回目录 下一节