SpringMVC简介及入门
最近开始学SpringMVC了,首先记点笔记带自己了解一下SpringMVC。
SpringMVC简介
一、什么是MVC
MVC是一种软件架构的思想,将软件按照横型、视图、控制器来划分
M:即Model,模型层,特指工程中的JavaBean,作用是处理数据。
JavaBean分为两类:
- 实体类JavaBean:专门存储业务数据的,如Book、User等
- 业务处理类Bean:指Service或Dao对象,专门用来处理业务逻辑和数据访问。
V:即View,视图层,指工程中的静态文件,如HTML页面或jsp页面等,作用是展示数据,用户交互。
C:即Controller,控制层,指工程中的servlet,作用是接收请求和响应。
MVC工作流程:
用户通过视图层向服务器发送请求,被服务器中Controller层接收后,Controller层会调用相关的Model层处理该请求,处理完毕后结果会返回到Controller层,然后Controller层会根据处理结果找到相应的View视图,渲染数据后响应给浏览器。
二、什么是SpringMVC
Spring MVC属于Spring框架的后续产品,是Spring的子项目,
已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。
三、SpringMVC的特点
- Spring家族原生产品,拥有强大的灵活性,非侵入性和可配置性,可与IOC容器无缝对接。
- 基于原生Servlet,提供了一个前端控制器 DispatcherServlet ,开发者无须额外开发控制器对象。
- 分工明确,功能齐全,包括控制器、验证器、命令对象、处理器映射器、视图解析器等,每一个功能实现由一个专门的对象负责。
- 代码清晰简洁,大幅度提升开发效率。
- 内部组件化程度高,可实现即插即用,提供全面解决方案。
- 性能卓越,尤其适合现代大型、超大型互联网项目要求。
SpringMVC入门(我的第一个SpringMVC程序)
这里我们通过一个国际知名程序Hello World来进行入门。
一、开发环境
IDE:idea2021.3
构建工具:maven3.8.1
服务器:Tomcat9.0.59
Spring版本:5.3.1
二、创建maven工程
-
创建一个空工程
-
在这个新工程上右键new一个Module
-
选择maven然后取名字,博主取的是SpringMVC-demo1,然后一路next,创建好后项目结构如下
-
在pom.xml里导入如下依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.19</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.12.RELEASE</version> </dependency> </dependencies>
-
点击File选择项目结构,然后右键添加web模块
-
点击这个Web,如图依次创建web目录和配置文件web.xml
我的路径是C:\Users\19638\Desktop\Neuedu\SprinMVC\SpringMVC-demo1\src\main\webapp
然后web.xml的路径是C:\Users\19638\Desktop\Neuedu\SprinMVC\SpringMVC-demo1\src\main\webapp\WEB-INF\web.xml 填上路径后点击apply然后ok就行了。 -
配置完成后就能看到配置的文件和里面的web.xml了
-
至此maven工程就创建完成了
三、配置web.xml
有两种配置方式,分别是
- 默认配置方式
- 拓展配置方式
两者皆可,二选一,一般都选拓展配置方式,后面会讲到原因。
默认配置方式
此配置下,springMVC的配置文件默认位于WEB-INF下,默认名称为<servlet-name>-servlet.xml,即配置文件为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的核心控制器所能处理的请求路径
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
注意
.jsp本质是一个servlet,它需要经过服务器中指定的servlet,一个特殊的servlet进行处理,不需要由DispatcherServlet进行处理,如果配置的路径能够处理.jsp的话,SpringMVC则会将.jsp当成普通的请求处理,这么一来就找不到相应的.jsp页面了。
“/”所匹配的请求可以是/login或.html或.css方式的所有请求路径,但是“/”不匹配.jsp请求路径的请求。
“/*”所匹配的请求是所有请求,包括了.jsp
所以这里使用"/“而不使用”/*"
拓展配置方式
比默认配置方式多一些配置,而且我们常用的也是拓展配置方式。
-
首先在resources目录下new一个配置文件springMVC.xml
-
在默认配置文件的<servlet>标签中加上一个<init-parm>标签,具体如下
<!-- 配置springMVC的前端控制器,对浏览器的发送的请求进行同意处理 --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置SpringMVC配置文件的位置和名称--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> <!--将前端控制器DispatcherServlet的初始化时间提前到服务器启动时--> <load-on-startup>1</load-on-startup> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!--设置springMVC的核心控制器所能处理的请求路径--> <url-pattern>/</url-pattern> </servlet-mapping>
注意
servlet对所有的请求默认在第一次访问时初始化,而springMVC的前端控制器中封装了当前对所有请求的处理,初始化中需要处理很多的内容,如果全部放在第一次访问时初始化,那么就会严重影响第一次访问时的速度。所以我们需要加上<load-on-startup>1</load-on-startup>这一条配置将前端控制器DispatcherServlet的初始化时间提前到服务器启动时。
四、创建请求控制器
在如下目录中创建一个HelloController类
然后在类上加上@Controller
五、springMVC.xml配置文件配置
首先开启组件扫面
<context:component-scan base-package="springMVC"></context:component-scan>
配置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">
<bean class="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>
springMVC.xml的完整配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="springMVC"></context:component-scan>
<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">
<bean class="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>
</beans>
六、实现对首页的访问
首先创建一个首页的html
注意
如果需要使用thymeleaf的语法要加上红框中的那一行。然后配置Tomcat服务器,步骤如下图
点击ok以后就来到了下图窗口
点击第二个,ok
然后点击Server,做如下配置
注意
红框中需要配置自己本地的Tom服务器,只要点击Configure选择本地TomCat的安装路径,Idea就会自动识别本地Tomcat的版本。
最后点击ok
Idea里就多出来了这个,最后点右边的运行或者Debug都可。
可以看到,我的index已经访问成功了。
最后在控制台可以看到请求信息
七、访问目标页面
-
首先我们在首页加上一个a标签
注意
这里的路径用的是浏览器解析的绝对路径,需要用thymeleaf的语法,在运行时会自动给它加上上下文路径,另外,不需要加.html,这个属于下文,thymeleaf会自动给你加上。 -
然后创建一个target.html,在body中写上一HelloWorld。
-
在控制器中创建一个方法处理该跳转请求。
@RequestMapping(value = "/target") public String toTarget(){ return "target"; }
-
点击运行后出现如下页面
-
之后点击超链接进行跳转。