Note/JAVA/JAVA EE/Web程序设计笔记15——第十一章:Spring MVC.md
2023-08-31 11:30:31 +08:00

191 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第十一章Spring MVC
第一个spring应用
## 0.创建项目,导包
```java
FirstController 类的包 实现HttpServletResponse HttpServletRequest两个方法
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
```
### 1.main->webapp->WEB-INF->web.xml文件中配置前端控制器
> DispatcherServlet:就是一个Servlet
>
> 配置前端控制器就是给DispatcherServlet配置一个访问的url
如何给一个java类配置访问它的url呢
```java
<servlet>
<servlet-name>逻辑名</servlet-name>
<servlet-class>Java类的全类名物理名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>逻辑名</servlet-name>
<url-pattern>url</url-pattern>
</servlet-mapping>
```
> 补充:
>
> Java Web中有一个概念Servlet:是什么本质就是Java类但是此类是通过url来访问的
```java
<servlet>
<servlet-name>apringmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>apringmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
```
### 2.创建控制器 FirstController
首先在 java 下创建包 com.gzh.controller ,然后创建 FirstController 类,实现接口选择 Controller 第一个
![image-20220430213958181](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430213958181.png)
```java
public class FirstController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","这是我的第一个Spring MVC程序");
modelAndView.setViewName("/WEB-INF/jsp/first.jsp");
return modelAndView;
}
}
```
### 3.创建first.jsp
在 WEB-INF 文件下创建 jsp 文件夹然后在下面创建一个名为 first 的 jsp 文件
然后在 body 标签中创建一个 `${msg}` 在上面的 FirstController 类中 `modelAndView.addObject("msg","这是我的第一个Spring MVC程序");`相对应
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
```
### 4.在resources下创建springmvc-config.xml
```java
<?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-4.3.xsd">
<!-- name中 / 表示为根目录-->
<bean name="/firstController" class="com.gzh.controller.FirstController"/>
<!-- 处理器映射器 通过一个名字 将一个 url 和 java 类进行映射-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 适配器 去找控制器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析器 把 first.jsp 渲染到浏览器上-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
```
## 5.在 Tomcat 服务器上部署项目
首先将 Tomcat 解压到盘符下然后在idea中添加 Tomcat
1首先点击 add Configurations 添加 Tomcat 服务器
2点击加号添加服务器
3选择 Tomcat 服务区 本地服务Local 本地 remote 远程服务)
![image-20220430215445248](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430215445248.png)
4点击配置服务器选择 Tomcat 服务器的主目录
![image-20220430215956914](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430215956914.png)
5点击部署点击添加服务选择工件Artifact
![image-20220430220220555](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430220220555.png)
6随便选择一个即可
![image-20220430220452741](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430220452741.png)
7最好将 应用程序上下文 改为项目名称
![image-20220430220832300](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430220832300.png)
8然后启用服务器就可以了
![image-20220430221340859](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430221340859.png)
## 6.项目部署
`http://localhost:8080/c11/firstController` 链接中能够看到实现的语句
![image-20220430221617115](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430221617115.png)
项目根目录:`http://localhost:8080/c11/`
在上面中的 `/` 表示 `http://localhost:8080/c11/`
`/firstController` 就代表 `http://localhost:8080/c11/firstController`
![image-20220430221939788](https://yovinchen-1308133012.cos.ap-beijing.myqcloud.com/image-20220430221939788.png)
1用户通过客户端向服务器发送请求请求会被Spring MVC的前端控制器DispatcherServlet所拦截。
2DispatcherServlet拦截到请求后会调用HandlerMapping处理器映射器。
3处理器映射器根据请求URL找到具体的处理器生成处理器对象及处理器拦截器如果有则生成一并返回给DispatcherServlet。
4DispatcherServlet会通过返回信息选择合适的HandlerAdapter处理器适配器
5HandlerAdapter会调用并执行Handler处理器这里的处理器指的就是程序中编写的Controller类也被称之为后端控制器。
6Controller执行完成后会返回一个ModelAndView对象该对象中会包含视图名或包含模型和视图名。
7HandlerAdapter将ModelAndView对象返回给DispatcherServlet。
8DispatcherServlet会根据ModelAndView对象选择-个合适的ViewResolver视图解析器
9ViewResolver解析后会向DispatcherServlet中返回具体的View视图
10DispatcherServlet对View进行渲染即将模型数据填充至视图中
11视图渲染结果会返回给客户端浏览器显示。