【WEEK1】 【DAY2】 【DAY3】【DAY4】新建SpringMVC项目【中文版】
2024.2.27 Tuesday
1. 新建SpringMVC项目
使用的开发工具为IntelliJ IDEA
1.1 创建空白Project
大体如下截图:
1.2 pom中添加依赖
(等待下载并检查)
<!--导入依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.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-Dependencies检查
1.3 建立一个module:名为 springmvc-01-servlet, 添加Web app的支持
1.4 导入servlet 和 jsp 的 jar 依赖
点开刚才新建的module的pom.xml文件添加相应的依赖,注意要在原本的<dependencies>之内添加</dependencies>
。这里再次添加依赖是为了更加保险(因为本身springmvc-01-servlet子文件已经继承了SpringMVC部分依赖)
2024.2.28 Wednesday
1.5 新建并编写HelloServlet类,用于处理用户请求
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//要变成Servlet类型只需要继承它
public class HelloServlet extends HttpServlet { //实现Servlet接口
//此处重写快捷键 ctrl+o
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端参数
String method = req.getParameter("method");
if (method.equals("add")){
req.getSession().setAttribute("msg","执行了add方法");
}
if (method.equals("delete")){
req.getSession().setAttribute("msg","执行了delete方法");
}
//2.调用业务层
//此例子没有业务
//3.视图转发或者重定向 到页面,用户不可见的页面位于WEB-INF,用户可见的页面位于web文件夹
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用doGet实现复用
doGet(req,resp);
}
}
1.6 新建名称为jsp的directory包,位于WEB-INF文件夹下
在这个包下新建test.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 取数据--%>
${msg}
</body>
</html>
1.7 新建Helloservlet.java文件
Src-main-java中建包
1.8 在web.xml中注册Servlet
<?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">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern> <!-- 请求hello的页面,会跳转到HelloServlet文件 -->
</servlet-mapping>
<!-- 其他配置如下 -->
<!-- <session-config>-->
<!-- <session-timeout>15</session-timeout> //15mins为超时时间-->
<!-- </session-config>-->
<!-- 配置欢迎页,默认为index.jsp
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>-->
</web-app>
在web文件夹下新建jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--请求处理表单相关的,需要提交到Servlet--%>
<form action="/hello" method="post">
<input type="text" name="method">
<input type="submit">
</form>
</body>
</html>
1.9 下载并配置Tomcat,启动测试
参考了以下教程:
IDEA 添加 Tomcat
全网最详细的Tomcat安装和配置教程,图文详解
点击artifact,点击apply
试运行如果产生address localhost:1099 is already in use,先尝试把没有成功打开网页的窗口都关闭,然后重新clean-package-run
1.10 打开(链接因人而异)
http://localhost:8080/springmvc_01_servlet_war_exploded/
http://localhost:8080/springmvc_01_servlet_war_exploded/hello
http://localhost:8080/springmvc_01_servlet_war_exploded/hello?method=add
http://localhost:8080/springmvc_01_servlet_war_exploded/hello?method=delete
2024.2.29 Thursday
1.11 MVC框架要做哪些事情
- 将url映射到java类或java类的方法 .
- 封装用户提交的数据
- 处理请求–调用相关的业务处理–封装响应数据 .
- 将响应的数据进行渲染
. jsp
/html
等表示层数据 .
常见的服务器端MVC框架
Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM 等等…
MVC与MVVM的区别
2 什么是SpringMVC
2.1.概述
2.1.1.Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
2.1.2.查看官方文档:
https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web
查看历史版本:
https://docs.spring.io/spring-framework/docs/4.3.24.RELEASE/spring-framework-reference/html/
2.1.3.为什么要学习SpringMVC
- 因为 Spring MVC的特点
- 轻量级,简单易学
- 高效,基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合(因为Spring是一个容器,可以将SpringMVC中所有要用到的bean(类)注册到Spring中)
- 约定优于配置(只使用时几乎是不可修改)
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
- Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计
- DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁
- 正因为SpringMVC好,简单,便,易学,天生和Spring无缝集成(使用SpringIoC和Aop),使用约定优于配置。能够进行简单的junit测试。支持Restful风格。异常处理,本地化,国际化,数据验证,类型转换,拦截器 等等…所以我们要学习
- 最重要的一点还是用的人多,使用的公司多
2.2.中心控制器
2.2.1.Spring的web框架围绕DispatcherServlet设计
DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。
2.2.2.Spring MVC框架像许多其他MVC框架一样
以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。
官方文档中的解释如下:
Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed around a central Servlet that dispatches requests to controllers and offers other functionality that facilitates the development of web applications. Spring’s DispatcherServlet however, does more than just that. It is completely integrated with the Spring IoC container and as such allows you to use every other feature that Spring has.
The request processing workflow of the Spring Web MVC DispatcherServlet is illustrated in the following diagram. The pattern-savvy reader will recognize that the DispatcherServlet is an expression of the “Front Controller” design pattern (this is a pattern that Spring Web MVC shares with many other leading web frameworks).
2.2.3.查看随便一个文件的dispatcherServlet步骤
- 双击shift键,输入dispatcherServlet
已封装了许多定义
以doService为例(仅示例)
2.2.4.SpringMVC的原理
- 当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
2.3.SpringMVC执行原理
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
2.3.1.简要分析执行流程(是以上图1~12步骤为顺序解释)
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
- http://localhost:8080服务器域名
- SpringMVC部署在服务器上的web站点
- hello表示控制器
- 通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。(如果还有项目名,也会在url中显示)
-
HandlerMapping为处理器映射。DispatcherServlet调用
HandlerMapping,HandlerMapping根据请求url查找Handler(处理器)
-
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
-
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
-
Handler让具体的Controller执行。
点开controller显示是一个函数接口,在HelloController方法中已重写该函数接口 -
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
-
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
- 总结的回答(面试回答):前端控制器接受用户的请求并拦截,根据对应的请求找到对应的Controller处理器,处理器调用业务层并返回信息给前端控制器,然后前端控制器调用视图解析器找到对应视图并将数据渲染.