【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程

目录

[1.Spring MVC的基本介绍](#1.Spring MVC的基本介绍)

2.大致分析SpringMVC工作流程

3.SpringMVC的快速入门

首先大家先自行配置一个Tomcat

文件的配置

[配置 WEB-INF/web.xml](#配置 WEB-INF/web.xml)

创建web/login.jsp

创建com.ygd.web.UserServlet控制类

创建src下的applicationContext.xml文件

重点的注意事项和说明

!!!看看如果DispatcherServlet如果没在web.xml中指定Spring的上下文配置文件的路径。是如何去默认找到对应的xml文件的。


1.Spring MVC的基本介绍

1. SpringMVC WEB 层框架【老读 : SpringMVC 接管了 Web 层组件 , 比如控制器 , , 视图解析 , 返回给用户的数据格式 , 同时支持 MVC 的开发模式 / 开发架构】
2. SpringMVC 通过注解,让 POJO 成为控制器,不需要继承类或者实现接口
3. SpringMVC 采用低耦合的组件设计方式,具有更好扩展和灵活性 .
4. 支持 REST 格式的 URL 请求 .
5. SpringMVC 是基于 Spring , 也就是 SpringMVC 是在 Spring 基础上的。 SpringMVC 的核 心包 spring-webmvc-xx.jar spring-web-xx.jar

SpringMVC和SpringBoot的关系

1. Spring MVC 只是 Spring 处理 WEB 层请求的一个模块 / 组件 , Spring MVC 的基石是
Servlet[Java WEB]
2. Spring Boot 是为了简化开发者的使用 , 推出的封神框架 ( 约定优于配置,简化了 Spring
的配置流程 ), SpringBoot 包含很多组件 / 框架, Spring 就是最核心的内容之一,也包含 Spring MVC
3. 他们的关系大概是 : Spring Boot > Spring > Spring MVC

2.大致分析SpringMVC工作流程

1:浏览器会发出url请求通过Tomcat中间键发送给后端。被前端控制器(DispatcherServlet)首先拦截。

2:调用处理器映射器(HandlerMapping)。

3:处理器映射器会返回处理器执行器链(HandlerExecutionChain) 其中包含多个拦截器,以及处理器(Handler)(在下面的案例中Handler是UserServlet)。

4:前端控制器根据返回的处理器执行器链,调用处理器适配器(HandlerAdaptor)。

5:处理适配器才会去调用Handler处理器(Controller)

6: 调用处理器后返回ModelAndView(数据和视图)。

7:当ModelAndView返回给前端处理器后,前端处理器调用我们配置的视图解析器(InternalResourceViewResolver).

8:通过视图解析器返回view视图给前端控制器

9:前端控制器首先会进行一个视图的渲染(也就是对Jsp视图进行一些数据的加载啥的)

10:最后将真正的视图相应返回给客户端。


3.SpringMVC的快速入门

进入登录界面后,登录显示登陆成功的信息!

分析流程:

首先大家先自行配置一个Tomcat

文件的配置

导入SpringMVC需要的jar包

配置****WEB-INF/web.xml

1.配置前端控制器DispatcherServlet(包括初始化Spring上下文文件)

2.

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">
    <!--配置前端控制器/中央处理器/分发控制器
    1.用户的请求会经过他的处理
    -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置属性 contextConfigLocation,用来指定DispatcherServlet 去操作的Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:applicationContext-mvc.xml</param-value>
        </init-param>
        <!--在web项目启动时,就会自动的加载DispatcherServlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!--1. 在这里面我们配置的url-pattern是/,表示用户的请求都经过DispatcherServlet(中央处理器)
            2. 这样的配置也是rest风格的url请求
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

创建web/login.jsp

注意在JavaWeb中学的工程路径
在填写action="login"表示的url是http://localhost:8080/springmvc/login
如果我填写action="/login"表示的url是http://localhost:8080/login

html 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator :ygd
  Date: 2024/11/19
  Time: 23:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <h3>登录界面</h3>
<%--  注意在JavaWeb中学的工程路径
在填写action="login"表示的url是http://localhost:8080/springmvc/login
如果我填写action="/login"表示的url是http://localhost:8080/login
--%>
<form action="login">
    u:<input name="username" type="text"><br/>
    p:<input name="password" type="password"><br/>
    <input type="submit" value="登录">
</form>

</body>
</html>

创建com.ygd.web.UserServlet控制类

1.这个UserServlet相当于Hander处理器,是用来决定将返回的信息返回到哪里的(要结合视图解析器)

2.JavaWeb之前是Jsp页面的东西给Servlet处理,然后Servlet重定向或者请求转发到其他的Jsp界面或者Servlet中

3.现在这个内容交给中中央控制器,和视图解析器完成。

java 复制代码
package com.ygd.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author ygd
 * 1.如果我们使用了SpringMVC框架,在一个类上表明@Controller
 * 2.表示该类视为一个控制器,注入到容器中
 * 3.比原生的servlet开发要简化很多
 */
@Controller
public class UserServlet {
    //编写方法,相应用户的请求
    //1.login()方法是用于响应用户的登录请求
    //2.@RequestMapping(value="/login")类似我们在原生的Servlet配置的url-pattern
    //3.当用户在浏览器输入http://localhost:8080/web工程路径/login能够访问到login()方法
    //4.return "login_ok";表示返回结果给视图解析器(InternalResourceViewResolver)
    // 视图解析器会根据配置,来决定跳转到那个页面。
//        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
//        <property name="prefix" value="/WEB-INF/pages/"/>
//        <property name="suffix" value=".jsp"/>
//    </bean>
    // 这个方法返回给视图解析器时,视图解析器会返回给/WEB-INF/pages/login_ok.jsp的页面
    @RequestMapping(value="/login")
    public String login(){
        System.out.println("login ok");
        return "login_ok";
    }
}

创建src下的applicationContext.xml文件

1. 在Spring的上下文文件中,配置了InternalResourceViewResolver(视图解析器)。

2. 每个Servlet要返回到前端Jsp页面的操作都要经过视图解析器。

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 https://www.springframework.org/schema/context/spring-context.xsd">
<!--配置自动扫描的包-->
    <context:component-scan base-package="com.ygd.web"/>
<!--配置视图解析器(整个容器中只能有一个视图解析器)-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀和后缀-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>


</beans>

执行该文件输入login.jsp跳转到登录界面,点击登录。案例结果完成!

重点的注意事项和说明

1. 这里的 UserServlet 需要注解成@Controller ,我们称为一个 Handler 处理器
2. UserServlet 指定 url 时,还可以这样


3. 关 于 SpringMVC 的 DispatcherServlet 的 配 置 文 件 , 如 果 不 在 web.xml 指 定
applicationContext-mvc.xml, 默认在 /WEB-INF/springDispatcherServlet-servlet.xml 找这
个配置文件【简单看下 DispatcherServlet 的源码】。(推荐使用, 我们做下修改 , 并完成测
试)

下图是原本的项目的路径,以及在前端处理器中初始化属性contextConfigLocation。指定applicationContext路径。

下图就是如果不在web.xml中指定applicationContext.xml的路径。

(因为这个关于Spring的上下文路径是必须要有的)

他会默认去和web.xml一样目录下(也就是/WEB-INF/)去寻找配置的前端处理器中的

<servlet-name>也就是下图的springDispatcherServlet加上-servlet.xml 文件(系统会默认这个xml文件就是Spring的上下文文件)。

如果既没有在web.xml文件中配置applicationContext.xml 又在web.xml的同级目录下,没找到对应的xml文件。就会报500的错误

!!!看看如果DispatcherServlet如果没在web.xml中指定Spring的上下文配置文件的路径。是如何去默认找到对应的xml文件的。

DispatcherServlet的父类FrameworkServlet

绿色字体的意思是:WebApplicationContext命名空间的后缀。如果在上下文中将此类servlet命名为"test",则servlet使用的命名空间将解析为"test-servlet"+".xml"。

什么意思:就是这里的test就是DispatcherServlet配置的<servlet-name>的名字 然后加上

-servlet.xml 寻找到我们的applicationContext.xml。


相关推荐
小林学习编程26 分钟前
从零开始理解Spring Security的认证与授权
java·后端·spring
写bug的羊羊28 分钟前
Spring Boot整合Nacos启动时 Failed to rename context [nacos] as [xxx]
java·spring boot·后端
ad禥思妙想30 分钟前
如何运行python脚本
开发语言·python
Matlab程序猿小助手30 分钟前
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·嵌入式硬件·算法·matlab·机器人·无人机
威威猫的栗子31 分钟前
用 Python 与 Turtle 创作属于你的“冰墩墩”!
开发语言·python·turtle
IT古董37 分钟前
【机器学习】超简明Python基础教程
开发语言·人工智能·python·机器学习
黑客Ash39 分钟前
网络安全知识点
开发语言·php
努力的小陈^O^1 小时前
docker学习笔记跟常用命令总结
java·笔记·docker·云原生
童先生1 小时前
如何将java项目打包成docker 镜像并且可运行
java·开发语言·docker
feilieren1 小时前
SpringBoot 2.x 整合 Redis
java·开发语言·spring