用户发出请求,DispatcherServlet 接收请求并拦截请求。
我们假设请求的 URL 为 : http://localhost:8080/sm/hello
如上 URL 拆分成三部分:
-
http://localhost:8080
表示服务器域名 -
sm
表示部署在服务器上的 web 站点 -
hello
表示控制器
通过分析,如上URL表示为:
-
请求位于服务器
localhost:8080
上的sm
站点的hello
控制器,用户发出请求。 -
HandlerMapping 为处理器映射。
DispatcherServlet 调用 HandlerMapping,HandlerMapping 根据请求 url 查找 Handler。
-
HandlerExecution 表示具体的 Handler。
主要作用是根据 url 查找控制器,如上 url 被查找控制器为:
hello
。 -
HandlerExecution 将解析后的信息传递给 DispatcherServlet,如解析控制器映射等。
-
HandlerAdapter 表示处理器适配器,其按照特定的规则去执行 Handler。
-
Handler 让具体的 Controller 执行。
-
Controller 将具体的执行信息返回给 HandlerAdapter,如 ModelAndView。
-
HandlerAdapter 将视图逻辑名或模型传递给 DispatcherServlet。
-
DispatcherServlet 调用视图解析器 (ViewResolver) 解析 HandlerAdapter 传递的逻辑视图名。
-
视图解析器 将解析的逻辑视图名传给 DispatcherServlet。
-
DispatcherServlet 根据视图解析器解析的视图结果,调用具体的视图。
-
最终视图呈现给用户。
==========================================================================
xml 配置版就是体验一下,开发中不会使用,用的更多的是注解版。
新建一个 Moudle , springmvc-hello
, 添加 web 的支持。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
3、配置 web.xml,注册 DispatcherServlet
<?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">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4、编写 SpringMVC 的配置文件:springmvc-servlet.xml
resources
下创建配置文件springmvc-servlet.xml
,往其中添加以下配置:
-
处理映射器(BeanNameUrlHandlerMapping)
-
处理适配器(SimpleControllerHandlerAdapter)
-
视图解析器(InternalResourceViewResolver)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--添加处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--添加处理适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器:DispatcherServlet 给他的 ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--Handler-->
<bean id="/hello" class="com.yusael.controller.HelloController"/>
</beans>
Controller
要么实现 Controller
接口,要么使用 @Controller
注解;
- 实现
Controller
需要返回一个ModelAndView
,封装 数据 和 视图;
package com.yusael.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 实现 Controller 接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
// 封装对象, 放在 ModelAndView 中
mv.addObject("msg", "HelloSpringMVC!");
// 封装要跳转的视图,放在 ModelAndView 中
mv.setViewName("hello"); // 根据视图解析器, 自动拼接成 /WEB-INF/jsp/hello.jsp
return mv;
}
}
springmvc-servlet.xml
中将自己的类交给 SpringIOC 容器,注册 bean:
<!--Handler-->
<bean id="/hello" class="com.yusael.controller.HelloController"/>
编写一个要跳转 hello.jsp
页面,显示 ModelandView
存放的数据,以及我们的正常页面;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>yusael</title>
</head>
<body>
${msg}
</body>
</html>
URL:http:localhost:8080/hello
在 IDEA 的项目发布中,添加 lib 依赖!
- 重启 Tomcat 即可解决!
======================================================================
新建一个 Moudle,springmvc-hello-annotation
,添加 web 支持。
主要有 Spring 框架核心库、Spring MVC、servlet , JSTL 等。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
资源过滤 问题
由于 Maven 可能存在 资源过滤 的问题,pom.xml
增加如下配置:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
3、配置 web.xml,注册 DispatcherServlet
<?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">
<!--1.注册servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 关联 SpringMVC 配置文件 -->
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动顺序,数字越小,启动越早 -->
# 总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,[需要的话点击这里免费获取](https://gitee.com/vip204888/java-p7)
**目录:**
![](https://img-blog.csdnimg.cn/img_convert/a4a11d0df0fec352c3b4f0241e9111a7.png)
**部分内容截图:**
![](https://img-blog.csdnimg.cn/img_convert/3ffae7f576071b8680a9eba29656b739.png)
![](https://img-blog.csdnimg.cn/img_convert/fc1f6b5418d20b201120056dcf08ab6b.png)
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 关联 SpringMVC 配置文件 -->
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动顺序,数字越小,启动越早 -->
# 总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,[需要的话点击这里免费获取](https://gitee.com/vip204888/java-p7)
**目录:**
[外链图片转存中...(img-I3J1mYXw-1628600322209)]
**部分内容截图:**
[外链图片转存中...(img-KEMBRNJC-1628600322212)]
[外链图片转存中...(img-fn38q2xq-1628600322213)]