当前位置: 首页 > news >正文

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

目录

1.Spring MVC的基本介绍

2.大致分析SpringMVC工作流程

3.SpringMVC的快速入门

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

文件的配置

 配置 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 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

<%--Created by IntelliJ IDEA.User: Administrator :ygdDate: 2024/11/19Time: 23:30To 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.现在这个内容交给中中央控制器,和视图解析器完成。

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 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。


http://www.lryc.cn/news/488077.html

相关文章:

  • vitepress博客模板搭建
  • Git入门图文教程 -- 深入浅出 ( 保姆级 )
  • Linux编辑器 - vim
  • Spring Security使用基本认证(Basic Auth)保护REST API
  • MySQL —— explain 查看执行计划与 MySQL 优化
  • 出海第一步:搞定业务系统的多区域部署
  • 二手手机回收小程序,一键便捷高效回收
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-性能分析(四)
  • 深入解析小程序组件:view 和 scroll-view 的基本用法
  • 【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读
  • opencv-python 分离边缘粘连的物体(距离变换)
  • 机器学习杂笔记1:类型-数据集-效果评估-sklearn-机器学习算法分类
  • Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能
  • 数据结构在二叉树Oj中利用子问题思路来解决问题
  • 华为openEuler考试真题演练(附答案)
  • 生成自签名证书并配置 HTTPS 使用自签名证书
  • 物联网核心安全系列——智能汽车安全防护的重要性
  • 数据库视图
  • 从传统分析到智能问数,打造零门槛数据分析方案
  • java 设计模式 模板方法模式
  • 基于UDP和TCP实现回显服务器
  • 在 CentOS 系统上直接安装 MongoDB 4.0.25
  • Android和IOS的区别
  • 数据库基础(MySQL)
  • Vue前端开发子组件向父组件传参
  • javaScript语法基础(函数,对象,常用类Array,String,Math和Date)
  • WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • k8s-NetworkPolicy
  • 【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)
  • C++——智能指针剖析