【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的支持

在这里插入图片描述
在这里插入图片描述
添加web支持
添加web支持

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框架要做哪些事情

  1. 将url映射到java类或java类的方法 .
  2. 封装用户提交的数据
  3. 处理请求–调用相关的业务处理–封装响应数据 .
  4. 将响应的数据进行渲染 . 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

  1. 因为 Spring MVC的特点
  • 轻量级,简单易学
  • 高效,基于请求响应的MVC框架
  • 与Spring兼容性好,无缝结合(因为Spring是一个容器,可以将SpringMVC中所有要用到的bean(类)注册到Spring中)
  • 约定优于配置(只使用时几乎是不可修改)
  • 功能强大:RESTful、数据验证、格式化、本地化、主题等
  • 简洁灵活
  1. 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步骤

  1. 双击shift键,输入dispatcherServlet
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    已封装了许多定义
    在这里插入图片描述
    以doService为例(仅示例)
    在这里插入图片描述
    在这里插入图片描述

2.2.4.SpringMVC的原理

  1. 当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
    在这里插入图片描述
    在这里插入图片描述

2.3.SpringMVC执行原理

在这里插入图片描述
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

2.3.1.简要分析执行流程(是以上图1~12步骤为顺序解释)

  1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
    我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
    在这里插入图片描述
  • http://localhost:8080服务器域名
  • SpringMVC部署在服务器上的web站点
  • hello表示控制器
  • 通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。(如果还有项目名,也会在url中显示)
  1. HandlerMapping为处理器映射。DispatcherServlet调用
    HandlerMapping,HandlerMapping根据请求url查找Handler(处理器)
    在这里插入图片描述
    在这里插入图片描述

  2. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
    在这里插入图片描述

  3. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  4. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  5. Handler让具体的Controller执行。
    在这里插入图片描述
    点开controller显示是一个函数接口,在HelloController方法中已重写该函数接口

  6. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
    在这里插入图片描述

  7. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

  8. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
    在这里插入图片描述

  • 视图解析器将解析的逻辑视图名传给DispatcherServlet。
  • DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
  • 最终视图呈现给用户。
  1. 总结的回答(面试回答):前端控制器接受用户的请求并拦截,根据对应的请求找到对应的Controller处理器,处理器调用业务层并返回信息给前端控制器,然后前端控制器调用视图解析器找到对应视图并将数据渲染.
  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值