阿里P7浅谈SpringMVC

一、前言

既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容:

1、三层结构介绍

2、MVC 设计模式介绍

3、SpringMVC 介绍

4、入门程序的实现

注:介绍方面的内容大多数摘录自互联网,找了一些说法比较严谨、明确的介绍内容进行整理。

二、三层结构介绍

我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于三层架构设计的。

1、表现层

1)也就是我们常说的web 层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。

2)表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。

3)表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。

4)表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)

2、业务层

1)也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。

2)业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的, 事务应该放到业务层来控制)

3、持久层

1)也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的。

大家可以点击加入群:【Java高级架构进阶群】:854180697  里面有Java高级大牛直播讲解知识点 走的就是高端路线,(如果你想跳槽换工作 但是技术又不够 或者工作上遇到了瓶颈,我这里有一个JAVA的免费直播课程,讲的是高端的知识点基础不好的误入哟,只要你有1-5年的开发经验可以加群找我要课堂链接,注意:是免费的 没有开发经验误入哦)

三、MVC 设计模式介绍

MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职:

1、Model(模型)

1)模型包含业务模型和数据模型,数据模型用于封装数据,业务模型用于处理业务。

2、View(视图)

1)通常指的就是我们的 jsp 或者 html,作用一般就是展示数据的。

2)通常视图是依据模型数据创建的。

3、Controller(控制器)

1)是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。

四、SpringMVC 介绍

1、Spring MVC是什么?

1)SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 SpringMVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。

2)它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。

3)SpringMVC 和 Struts2 一样,都是为了解决表现层问题的web框架,它们都是基于MCC设计模式的。而这些表现层框架的主要职责就是处理前端HTTP请求。

2、SpringMVC 如何处理请求?

SpringMVC 是基于 MVC 设计模式的,MVC 模式指的就是Model(业务模型)、View(视图)、Controller(控制器)。SpringMVC 处理请求就是通过 MVC 这三种角色来实现的。

不过千万不要把 MVC 设计模式和工程的三层结构混淆,三层结构指的是表现层、业务层、数据持久层。而 MVC 只针对表现层进行设计。

下面根据一张图来看一下 SpringMVC 具体的处理流程:

这张图只是把 SpringMVC 的基本执行流程,详细流程在后续章节中会进行分析。

五、入门程序的实现

1、如何配置前端控制器?

从上面的图可知,我们需要配置一个前端控制器,下面我们会在 web.xml 中进行配置。还有一点就是处理器的开发形式有很多种,有注解方式、实现HttpRequestHandler 接口和实现 Controller 接口,这里我们只讲解注解方式,其他两种方式使用的已经很少了,如果有想要了解的小伙伴,可以自行百度一下。

2、开发步骤

1)创建一个 web 工程,这里一定要注意是 web 工程,和前面的项目有所区别,因为要使用到 web.xml,需要使用 tomcat 进行启动。

2)编写POM文件,添加依赖

org.springframework spring-beans 5.0.7.RELEASE org.springframework spring-core 5.0.7.RELEASE org.springframework spring-context 5.0.7.RELEASE org.springframework spring-expression 5.0.7.RELEASE org.springframework spring-aspects 5.0.7.RELEASE aopalliance aopalliance 1.0 org.springframework spring-tx 5.0.7.RELEASE org.springframework spring-jdbc 5.0.7.RELEASE mysql mysql-connector-java 5.1.35 commons-dbcp commons-dbcp 1.4 org.mybatis mybatis 3.4.5 org.mybatis mybatis-spring 1.3.1 org.springframework spring-webmvc 4.3.13.RELEASE org.springframework spring-web 4.3.13.RELEASE jstl jstl 1.2 javax.servlet servlet-api 2.5

这里代码直接给出了,多添加了 SpringMVC 的依赖包,因为会用到 jsp 页面,最后还添加了 jstl 和 servlet-api 的依赖包。

3)配置前端控制器

在web.xml中添加DispatcherServlet的配置。

        springmvc    org.springframework.web.servlet.DispatcherServlet                  contextConfigLocation      classpath:springmvc.xml                2        springmvc        /  

这个地方有几个点需要说明:

(1)web.xml 中配置内容的加载顺序

这个并不属于 SpringMVC 的知识,但是这个地方用到了,就用上面这张图讲解一下。load-on-startup 的配置需要额外注意,配置与不配置的区别很重要,面试经常问道。这里说明一下,它的值需要是大于0的整数,值越小,加载越早,那么为什么我们这里设置了2呢,为什么不设置成1呢?其实设置成1也是完全可以的,但是1是有冲突的,我们可以打开 tomcat 中的 web.xml 看一下就明白了。这是我的个人习惯,这个值已经被占用了,所以就设置为2了。

(2)url-pattern 匹配 URL 详解

在代码中我们可以看到 url-pattern 配置的是 /,这里我们用一张图来看一看为什么这样配置。

这里有一个很经典的问题,为什么 url-pattern 配置 /* 会报错?从图中可以知道 url-pattern 的匹配顺序,如果配置的是 /*,tomcat 本身的配置(*.jsp(就是*.do),/)优先级都小于 /*,就会跳过 tomcat 自身的配置,直接匹配 /*,这样的话,它会接收 jsp 的请求,但是无法处理 jsp 的请求,导致页面访问出错。如果配置为 /,/ 的优先级小于 *.do,jsp 会优先被 tomcat 自身的 *.jsp 处理,这样就没有问题了。

4)创建 springmvc.xml

由于使用的是注解方式,这里直接添加扫描配置即可。

  

5)编写处理器

(1)注解方式使用到的注解主要有以下两个:

@Controller 注解:在类上添加该注解,指定该类为一个请求处理器,不需要实现任何接口或者继承任何类。

@RequestMapping 注解:在方法上添加该注解,指定请求的 url 由该方法处理。

处理器的返回值是ModelAndView对象,该对象的具体理解如下:

ModelAndView:方法返回值对象,该对象包含两个功能:一个是将数据存储到 Request 域中,一个是设置响应视图,比如将视图设置为"/WEB-INF/jsp/goodsList.jsp"。

@Controllerpublic class GoodsController {  @RequestMapping(value = "queryGoods")  public ModelAndView queryGoods() {    ModelAndView modelAndView = new ModelAndView();    // 构造演示数据    List goodsList = new ArrayList<>();    Goods goods1 = new Goods();    goods1.setName("小米8SE");    goods1.setPrice(1999f);    goods1.setDetail("全面屏智能手机 6GB+64GB 灰色 全网通4G 双卡双待");    Goods goods2 = new Goods();    goods2.setName("Apple iPad");    goods2.setPrice(3359f);    goods2.setDetail("平板电脑 2018年新款9.7英寸(128G WLAN版/A10 芯片/Retina显示屏/Touch ID MRJP2CH/A)金色");    goodsList.add(goods1);    goodsList.add(goods2);    // 设置数据和视图    modelAndView.addObject("goodsList", goodsList);    modelAndView.setViewName("/WEB-INF/jsp/goodsList.jsp");    return modelAndView;  }}

(2)这里直接把实体类和 jsp 页面给出:

Goods.javapublic class Goods {  private String name;  private double price;  private String Detail;  // 省略 setter 和 getter 方法}

goodsList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

六、小结

本章节主要是对 SpringMVC 进行了初步的讲解,让读者能够了解到什么是 MVC 模式、什么事 SpringMVC、SpringMVC 需要如何配置以及它具体的执行流程,目的在于让读者熟悉 SpringMVC,为后面的文章打好基础,后面的章节会更为深入的讲解 SpringMVC。

写在最后:欢迎留言讨论,需要Java架构师资料的,私信“Java”或“架构资料”有惊喜!加关注,持续更新!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 闲来无事想自定义酷炫的加载动画,看到大神的引力效果https://github.com/KelvinJin/Met...
    齐云霄霄阅读 893评论 0 5
  • 啥也布时阅读 473评论 2 7
  • 2017-10-9全局搜索文件的时候不需要显示某些文件夹里的同名文件的时候,将文件夹版本控制器中改变 如上图,在文...
    长弓简阅读 294评论 0 0
  • 3月24日 星期五 晴天 好不容易盼到礼拜五,就可以和宝贝好好团聚,没想到事情多的都想让自己...
    顾影自怜_e3ce阅读 221评论 0 0