SpringMVC知识盘点及总结1初识SpringMVC
学习目标:SpringMVC
1.创建一个java项目,删除src目录(目的:当一个父文件夹使用,方便统一管理每个学习模块)
2.选中父目录SpringMVC右键-> new ->Module创建一个子模块,选择maven项目
3.给子模块起一个名字,点击finish,创建成功
4.在pom文件中,分别添加spring-webmvc、logback-classic、javax.servlet-api、thymeleaf-spring5
依赖。作用分别为:springMVC、日志管理、编译需要(服务器自带)、spring5和thymeleaf整合。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.st.mvc</groupId>
<artifactId>springMVC-demo01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!--添加MVC依赖-->
<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,设置作用域scope为provided(已被服务器提供)
因为编译需要,(运行时不需要),tomcat自带servlet-api
项目打成war包后,不会存在于lib下-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--添加spring5和Thymeleaf的整合包-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
5.选中main文件夹,右键新建名为webapp的文件夹。(也可以右键子模块直接使其变为web项目)
6.点击File选择Project Structure(项目结构),点击Module,选择web,在最上面一栏点击+号
添加一个web.xml,然后把路径修改。(让web.xml文件处于webapp\WEB-INF下就可以了。)
*(也可以在最初创建子模块时,选择webapp模板,省事)
7.在web.xml文件中配置SpringMVC的前端控制器:
<!--配置SpringMVC的前端控制器,对浏览器发送的请求进行统一处理-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
8.配置servlet-mapping:
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(1)需要注意名字与上面的servlet名字一致
(2)
<url-pattern>此处只加一个/(此处路径不能写死,否则只对此处的一个进行处理)</url-pattern>
(3)设置springMVC核心控制器所能处理请求的请求路径,
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径,
但是/不能匹配.jsp请求路径的请求。
web.xml完整代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置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>
</init-param>
<!--将前端控制器DispatcherServlet的初始化时间提前到服务器启动时-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--设置springMVC核心控制器所能处理请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求-->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
9.以上是springMVC的默认配置方式,最优的配置方式是扩展配置方式。
10.在第七步的配置中增加:init-param (配置springMVC配置文件的位置和名称)
<init-param>
<!--上下文配置路径-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
11.此行会报红:
<param-value>classpath:springMVC.xml</param-value>
因为没有此文件。所以我们需要创建springMVC.xml
点击resources右键new xml文件,当创建之后就不会报红了。
12. 在第七步的配置中增加:<load-on-startup>1</load-on-startup>
目的:将前端控制器DispatcherServlet的初始化时间提前到服务器启动时
<load-on-startup>1</load-on-startup>
13.开始配置springMVC.xml文件
(1).创建HelloController类,加@Controller注解
(2).在springMVC中配置组件扫描:
<context:component-scan base-package="com.st.springmvc.controller"></context:component-scan>
当配置组件扫描后,当前加了@controller注解的类的对象就交给了IOC容器来管理了
(3).配置Thymeleaf的视图解析器(servlet只需配置前缀和后缀)
(4)此处放上完整的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
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!--配置组件扫描-->
<context:component-scan base-package="com.st.springmvc.controller"></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>
</beans>
14.在WEB-INF下创建一个文件夹templates用来存放html网页文件。
(1).新建一个index.html文件,里面加入Thymeleaf的命名空间
xmlns:th="www.thymeleaf.org"
在body里写一个简单的h1标签,例:<h1>Hello SpringMVC<h1>
完整html页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1> Hello SpringMVC</h1>
</body>
</html>
(2).在HelloController中写一个方法,用来返回视图。名字随意,我这里起名index
(3).在方法上面加@RequestMapping创建映射关系,给一个value值,即value = "/"。
解释一下"/",因为当前只有一个返回视图,所以只需写一个/
package com.st.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Author: 尚廷
* @Date: 2021/12/21/ 12:17
* @Description:
*/
@Controller
public class HelloController {
//"/"-->/WEB-INF/templates/index.html
//创建映射关系
@RequestMapping(value = "/")
public String index(){
//返回视图名称: index
return "index";
}
}
15.接下来添加Tomcat服务器(我是用的是9.0.54版本):
1.点击IDEA右上角Add configuration,出现的页面
2.点击+号来配置Tomcat,找到Tomcat选择local起个名字,如:Tomcat9
3.找到Application server 点击右面的Configure,选择TomcatHome 选择你自己的Tomcat路径,然后确定。
如果之前你配置过Tomcat就不需要配置了。
4.选择Deployment点击小+号,选择Artifact,出现两个后面带有war的选项,随便选择一个,我选择第一个。
URL路径最后那个太长了,可以按照你的喜好改一个,比如springmvc
5.点击apply,点击ok
16.启动你的Tomcat服务器
IDEA默认自动打开浏览器,你也可以自己设置手动打开。
然后就访问成功了,页面中出现了你写好的h1标签里面的内容:Hello SpringMVC
17.至此第一个SpringMVC demo就学习完毕了。
注意!
*此练习中我遇到的错误:“通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明”
*启动Tomcat,页面报500错误,按照控制台错误提示,判断是在springMVC中命名空间缺少了context,上下都需要写
*url中的命名空间必须为偶数个。一定要注意!!!
18.访问指定页面:
1.接着上述过程,在index.html中写一个超链接用来访问目标页面
*使用Thymeleaf,它自动帮我们添加了上下文路径
*所以只需要这样写:<a th:href="@{/target}">访问目标首页target.html</a>
*th:修饰当前属性(href),@{}来写绝对路径
2.然后创建一个target.html文件
内容:<h1>我是目标页面!</h1>
3.想要访问需要去控制层写一个方法:在HelloController中写一个toTarget方法
public String toTarget(){
return "target";
}
4.在方法上加@RequestMapping(value="/target")
@RequestMapping(value = "/target") public String toTarget(){ return "target"; }
完整代码:
package com.st.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @Author: 尚廷 * @Date: 2021/12/21/ 12:17 * @Description: */ @Controller public class HelloController { //"/"-->/WEB-INF/templates/index.html //创建映射关系 @RequestMapping(value = "/") public String index(){ //返回视图名称: index return "index"; } @RequestMapping(value = "/target") public String toTarget(){ return "target"; } }
5.启动Tomcat看效果

将鼠标悬停在超链接上,浏览器左下角出现完整地址,即Thymeleaf自动添加了上下文路径,点击链接
访问成功!
![]()
总结:
1.浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器DispatcherServlet处理。
前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中
@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方
法。
2.处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成
视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视图所对应页面


浙公网安备 33010602011771号