1、SpringMVC简介

1.1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
M:Model ,模型层,指工程中的 JavaBean ,作用是处理数据
JavaBean 分为两类
         一类称为实体类Bean :专门存储业务数据的,如 Student 、 User 等
         一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。  
V:View ,视图层,指工程中的 html 或 jsp 等页面,作用是与用户进行交互,展示数据
C:Controller ,控制层,指工程中的 servlet ,作用是接收请求和响应浏览器
        MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被 Controller 接收, Controller 调用相应的Model 层处理请求,处理完毕将结果返回到 Controller , Controller 再根据请求处理的结果找到相应的View 视图,渲染数据后最终响应给浏览器.

1.2、什么是SpringMVC

        SpringMVC是 Spring 的一个后续产品,是 Spring 的一个子项目
        SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust 、WebWork、 Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案

1.3、SpringMVC的特点

          Spring 家族原生产品 ,与 IOC 容器等基础设施无缝对接
           基于原生的 Servlet ,通过了功能强大的 前端控制器 DispatcherServlet ,对请求和响应进行统一 处理

         表述层各细分领域需要解决的问题 全方位覆盖 ,提供 全面解决方案

         代码清新简洁 ,大幅度提升开发效率

         内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可

         性能卓著,尤其适合现代大型、超大型互联网项目要求

2、入门案例

2.1、创建工程

创建Maven工程 --》添加web 模块 --》将打包方式改为 war

引入依赖

    <dependencies> <!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.1</version></dependency> <!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency> <!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency> <!-- Spring5和Thymeleaf整合包 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency></dependencies>

注:由于 Maven 的传递性,我们不必将所有需要的包全部配置依赖,而是配置最顶端的依赖,其他靠传递性导入。

2.2、 配置web.xml

        注册SpringMVC 的前端控制器 DispatcherServlet

① 默认配置方式

        此配置作用下,SpringMVC 的配置文件默认位于 WEB-INF 下,默认名称为 <servlet-name>-servlet.xml,例如,以下配置所对应 SpringMVC 的配置文件位于 WEB-INF 下,文件名为 springMVC-servlet.xml
   <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><!--设置springMVC的核心控制器所能处理的请求的请求路径/ 所匹配的请求可以是/login或.html或.js或.css方式的请求路径但是/不能匹配.jsp请求路径的请求--><url-pattern>/</url-pattern></servlet-mapping>

② 扩展配置方式

        可通过init-param 标签设置 SpringMVC 配置文件的位置和名称,通过 load-on-startup 标签设置SpringMVC前端控制器 DispatcherServlet 的初始化时间
   <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 --><init-param><!-- contextConfigLocation为固定值 --><param-name>contextConfigLocation</param-name><!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的 src/main/resources --><param-value>classpath:SpringMVC-servlet.xml</param-value></init-param><!--作为框架的核心组件,在启动过程中有大量的初始化操作要做而这些操作放在第一次请求时才执行会严重影响访问速度因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><!--设置springMVC的核心控制器所能处理的请求的请求路径/ 所匹配的请求可以是/login或.html或.js或.css方式的请求路径但是/不能匹配.jsp请求路径的请求--><url-pattern>/</url-pattern></servlet-mapping>

③ / 和 /* 的区别

<url-pattern>标签中使用/和 /*的区别:
 所匹配的请求可以是/login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求
因此就可以避免在访问jsp页面时,该请求被 DispatcherServlet 处理,从而找不到相应的页面
/*  则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写法

2.2、创建请求控制器

        由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要
创建处理具体请求的类,即请求控制器
        请求控制器中每一个处理请求的方法成为控制器方法
        因为SpringMVC 的控制器由一个 POJO (普通的 Java 类)担任,因此需要通过 @Controller 注解将其标识
为一个控制层组件,交给 Spring 的 IoC 容器管理,此时 SpringMVC 才能够识别控制器的存在
@Controller
public class HelloController {
}

2.3、创建SpringMVC的配置文件

    <!--自动扫描包--><context:component-scan base-package="com.chenyixin.ssm.controller"/><!-- 配置Thymeleaf视图解析器 --><bean id="viewResolver"class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><beanclass="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8" /></bean></property></bean></property></bean><!--处理静态资源,例如html、js、css、jpg若只设置该标签,则只能访问静态资源,其他请求则无法访问此时必须设置<mvc:annotation-driven/>解决问题--><mvc:default-servlet-handler/><!-- 开启mvc注解驱动 --><mvc:annotation-driven><mvc:message-converters><!-- 处理响应中文内容乱码 --><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="defaultCharset" value="UTF-8" /><property name="supportedMediaTypes"><list><value>text/html</value><value>application/json</value></list></property></bean></mvc:message-converters></mvc:annotation-driven>

2.4、测试HelloWorld

目录格式:

默认配置方式目录:

扩展配置方式目录:

① 实现对首页的访问

在请求控制器中创建处理请求的方法

@Controller
public class HelloController {// @RequestMapping注解:处理请求和控制器方法之间的映射关系// @RequestMapping注解的value属性可以通过请求地址匹配请求,/ 表示的当前工程的上下文路径// localhost:8080/springMVC/@RequestMapping("/")public String index() {// 设置视图名称return "index";}@RequestMapping("/hello")public String target() {return "target";}
}

② 通过超链接跳转到指定页面

在主页 index.html 中设置超链接
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"  xmlns:th="http://www.thymeleaf.org"><title>首页</title>
</head>
<body><h1>首页</h1><a th:href="@{/hello}">Hello World</a>
</body>
</html>

target.html 页面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Target</title>
</head>
<body><h1>Hello World</h1>
</body>
</html>

2.5、总结

        浏览器发送请求,若请求地址符合前端控制器的 url-pattern ,该请求就会被前端控制器 DispatcherServlet 处理。前端控制器会读取 SpringMVC 的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中 @RequestMapping 注解的value 属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视 图所对应页面。

 

Java框架 SpringMVC介绍及入门案例相关推荐

  1. 【Spring】Spring Security介绍及其入门案例

    文章目录 前言 1. SpringSecurity 框架简介 1.1 概要 1.2 历史 1.3 同款产品对比 1.3.1 Spring Security 1.3.2 Shiro 1.4 模块划分 2 ...

  2. (转)SpringMVC学习(一)——SpringMVC介绍与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/72231272 SpringMVC介绍 SpringMVC是什么? SpringMVC和Stru ...

  3. SpringMVC(一):SpringMVC简介、入门案例

    目录 一.SpringMVC概述 二. SpringMVC入门案例 1.案例实现步骤 2.案例类和注解 三.SpringMVC案例运行流程 1. 启动服务器初始化过程 2.单次请求过程 四.bean加 ...

  4. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

    目录 前言 1. 学习路线 2. 学习方法 前言 这篇文章主要总结我之前所学过的框架以及学习路线 从实打实的零基础到框架再到项目 之后实习工作 也在这篇博客中记录我的学习笔记 以及在笔记中遇到的配置安 ...

  5. 流式计算storm核心组件介绍以及入门案例---跟着就能在本地跑起来的storm项目

    关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参 ...

  6. MyBatisPlus(一)MyBatisPlus介绍和入门案例

    文章目录 MyBatis-Plus 简介 特性 框架结构 入门案例 MyBatis-Plus 简介 MyBatis-Plus(简称MP)是一个MyBatis增强工具,在MyBatis的基础上只做增强不 ...

  7. treegrid 与java交互_EXTJS实现的TREEGRID(后台java,框架SpringMVC)

    一.一些废话 近日来,有几个项目用到了EXTJS作为Web前端.也看到了一些童鞋苦苦在网上寻觅树形列表控件,碰巧项目中用到了一种,现在给大家分享一下. 二.前端 前端代码,用的是JS.主要就是指定数据 ...

  8. 响应式编程框架ReactiveCocoa介绍与入门

    ReactiveCocoa是Github团队开发的第三方函数式响应式编程框架,在目前市面上的很多iOS App都大量使用了这个框架.以下我简称这个框架为RAC.我下面会通过几篇博客来和大家一起学习这个 ...

  9. Java框架-SpringMVC的应用(json数据交互、控制器方法返回值、文件上传)

    1. 搭建SpringMVC开发环境 1.1 创建项目,添加依赖 <?xml version="1.0" encoding="UTF-8"?> &l ...

最新文章

  1. iOS 关于第三方键盘
  2. python电脑下载网址-python下载文件文件到本地电脑(基于requests)
  3. 餐饮O2O创业 有用户却难变现
  4. ios 常用数学函数
  5. Nginx源代码安装
  6. Jmeter录制app脚本
  7. jzoj4669-[NOIP2016提高A组模拟7.19]弄提纲【LCA,KMP,字符串】
  8. mysql sequence java_MySQL增加Sequence管理功能
  9. 海奥华预言--第一章 神秘邀请
  10. 这个保守的 RNA motif是病毒侵染的关键
  11. 关于 HttpServlet、GenericServlet 和 Servlet 的关系
  12. CUDA——调试“ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory”
  13. twisted python_Python爬虫Scrapy框架之Hello Word
  14. 移动开发或将被颠覆?
  15. Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办???(比如登陆页面)
  16. hdfs-大数据Week6-DAY2-2-hdfs
  17. React-Native 仿喜马拉雅APP项目笔记(多环境配置 项目配置路径 堆栈式导航)
  18. Codechef April Challenge 2019 游记
  19. iOS CNContactStore 与AddressBook
  20. flutter 屏幕截图,超出屏幕部分截图

热门文章

  1. R语言trimws函数与gsub函数的区别
  2. 为什么 VR/AR 越聚焦越远
  3. C#中使用OpenGL:(三)将.lib文件编译为.dll文件
  4. js 的对象--如何定义一个对象
  5. 【lssvm回归预测】基于遗传算法优化最小二乘支持向量机GA-lssvm实现数据回归预测附matlab代码
  6. xss漏洞-DVWA跨站攻击盗取用户cookie值
  7. 组态王与485串口设备通讯(485执行Modbus RTU协议)
  8. C#实现二进制转10进制
  9. deepstream源码
  10. 【稀饭】react native 实战系列教程之首页列表UI实现