SpringMVC | SpringMVC的“入门“

目录:

  • [Spring MVC入门 :](#Spring MVC入门 :)
    • [Spring MVC 概述](#Spring MVC 概述)
    • [第一个Spring MVC应用](#第一个Spring MVC应用)
    • [SpringMVC 的 "工作流程"](#SpringMVC 的 “工作流程”)

Spring MVC入门 :

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材 为:
《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著

文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。

欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


Spring MVC 概述

  • Spring MVC 是 Spring 提供的一个实现了 WebMVC 设计模式轻量级Web框架。它与 Struts2框架 一样,都属于 MVC框架,但其 (Spring mvc )使用和性能 等方面 比Struts 2更加优异
  • Spring MVC 具有如下特点
    • Spring 框架一部分 ,可以方便地利用Spring所提供其他功能
    • 灵活性强易于与其他框架集成。
    • 提供了一个 前端控制器 : DispatcherServlet,使开发人员无须额外开发控制器对象
    • 自动绑定用户输入 ,并能正确的转换数据类型
    • 内置了常见校验器可以校验用户输入。如果校验不能通过 ,那么就会重定向到输
      入表单
    • 支持国际化 。可以根据用户区域显示多国语言
    • 支持多种视图技术 。它支持JSPVelocityFreeMarker等视图技术
    • 使用基于 XML的配置文件 ,在编辑后不需要重新编译应用程序

第一个Spring MVC应用

  • 第一步创建项目,引入JAR包 : 需要Spring框架的四个基本JAR + Spring MVC需要的两个JAR + 一个日志JAR

SpringMvc所需依赖

  • 第二步(web.xml)中 配置 "前端控制器"。在 web.xml 中,配置 SpringMVC前端控制器 ( DispatcherServlet )

    web.xml

    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">
    
         <!--  在web.xml中配置"前端控制器" : DispatcherServlet -->
        <!--  配置"前端过滤器" : DispatcherServlet -->
        <servlet>
            <servlet-name>SpringMvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    
           <!--   初始化时加载SpringMVC的"配置文件" : springmvc-config.xml    -->
           <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc-config.xml</param-value>
           </init-param>
    
            <!--    表示容器启动时立刻加载Servlet    -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>SpringMvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    在上面的 web.xml 代码中主要对 <servlet><servlet-mapping>元素 进行了 配置。在 <servlet>中,配置了 Spring MVC前端控制器 : DispatcherServlet,并通过其 子元素<init-param>配置Spring MVC配置文件 ( springmvc-config.xml ) 的位置, <load-on-startup>元素中的表示容器在启动时立即加载这个Servlet ;在 <servlet-mapping>中,通过 <url-pattern>元素的"/ ",会将所有URL 拦截 ,并交由DispatcherServlet处理

  • 第三步创建Controller类controller.java

    java 复制代码
    /**
     * 控制器类
     */
    public class FirstController implements Controller {
    
    
        @Override
        //该方法的返回值是 : ①一个指定路径下的.jsp文件给前端 ②返回一个ModelAndView对象给前端
        public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
            //创建ModelAndView对象
            ModelAndView mav = new ModelAndView();
            //向模型对象中添加数据
            //存一个msg的字符串对象进ModelAndView对象中,后端最终会将该ModelAndView对象传给前端,前端就能获取ModelAndView对象的值
            //前端通过${msg}来获取ModelAndView对象中的字符串值
            mav.addObject("msg", "这是我的第一个MVC程序");
            //设计逻辑视图名 (要返回给前端的"视图"的这个路径下的"first.jsp"文件),同时ModelAndView这个对象也是要返回给前端的
            mav.setViewName("/WEB-INF/jsp/first.jsp");
            //返回ModelAndView对象(里面包含了视图:first.jsp文件)
            return mav;
        }
    }

    handleRequest( )Controller 接口实现方法FirstController类调用该方法 来处理请求,并返回一个 包含视图名包含视图名模型ModelAndView对象 ( 即存一个msg的字符串对象 进"ModelAndView对象 中 ")。代码中,向模型对象 中添加了一个 名称为 msg 的字符串对象 ( 前端 通过通过 ${msg}来获取ModelAndView 工的值),并设置 返回的视图路径 为"/WEB-INF/jsp/first.jsp " ( 要返回的视图 为 :这个路径下的first.jsp 文件 ),这样,同时ModelAndView 这个对象 也是返回给前端的 。

    (此处是后端前端 发送的请求作出响应 ,后端打算返回一个 ModelAndView对象 给前端的,且存了一个msg字符串对象前端 ,前端通过 ${ msg }来获得ModelAndView 中的数据 ,同时将指定的.jsp文件作为"视图 "给前端)。

  • 第四步创建 SpringMVC的配置文件springmvc-config.xml

    springmvc-config.xml

    java 复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           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.xsd
    	http://www.springframework.org/schema/mvc
    	http://www.springframework.org/schema/mvc/spring-mvc.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 配置处理器Handle,映射"/firstController"请求  -->
        <bean name="/firstController" class="com.myh.controller.FirstController"/>
    
    
        <!--  下面的的复杂的 处理映射器、处理器适配器和视图解析器在实际开发中是可以不用配置  -->
        <!--  因为spring4.0之后,spring会有默认的"内部配置"来完成相应的工作  -->
        <!--  处理映射器,将处理器Handler的name作为url进行查找  -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
        <!--  处理器适配器,配置对处理器中handleRequest()方法的调用  -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        <!--  视图解析器  -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    
    </beans>

    ① 在上述 springmvc-config.xml 中,首先定义了一个 名称 为"/firstController" 的Bean ,该 Bean 会将控制器类 : FirstController 映射到"/firstController"请求中 。 (可以理解为 :将该"url " 和 "FirstController " 映射/绑定 起来 ,这样"前端请求 "就能到达FirstController 中,controller 做出给前端响应)。

    ② 然后配置了 处理器映射器 :BeanNameUrlHandlerMapping处理器适配器SimpleControllerHandlerAdapter ,其中处理器映射器 用于将处理器Bean中 的的 name (即url )进行处理器查找,而处理器适配器 用于完成对FirstController 处理器handleRequest( )方法调用

    ③ 最后配置了 视图解析器 : InternalResourceViewResolver解析结果视图 ,并将结果呈现给用户

    ps :

    老版本的Spring 中,配置文件内 必须要配置处理器映射器处理器适配器视图解析器 ,但在Spring 4.0以后如果不配置 处理器映射器、处理器适配器和视图解析器,也会使用Spring内部默认的配置完成相应的工作 ,此处 配置的的配置处理器映射器、处理器适配器和视图解析器 是为了让我们能能够更加清晰地了解Spring MVC的工作流程

    (意思就是说 :上面的复杂的 处理映射器处理器适配器视图解析器在实际开发中是可以不用配置的)

  • 第五步创建视图(View)页面 : (即一个返回给前端 的".jsp文件")

    first.jsp

    jsp 复制代码
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>入门程序</title>
    </head>
    <body>
    ${msg}
    </body>
    </html>

    第六步启动项目,进行测试

    此时项目的目录结构为 :

    将项目发布Tomcat 中,并启动 Tomcat 服务器。在浏览器中访问地址http://localhost:8080/firstController。

SpringMVC 的 "工作流程"

  • SpringMVC的"工作原理" :

    (1) 用户 通过客户端服务器发送请求请求 会被SpringMVC前端控制器 : DispatcherServlet拦截

    (2) DispatcherServlet拦截请求后 ,会调用HandlerMapping 处理器映射器

    (3) 处理器映射器 : HandlerMapping 根据请求 URL 找到具体处理器 ,生成处理器对象处理器拦截器 ( 如果有则生成 )一并返回给DispatcherServlet

    (4) DispatcherServlet 会通过返回信息 选择合适HandlerAdapter : HandlerMapping
    (5) HandlerAdapter处理器适配器 会调用并执行
    Handler(处理器)
    : ( 如 FirstController ) ,这里的处理器 指的就是程序中编写的 Controller 类 ,也被称之为后端控制器 (负责处理请求做出响应 )。

    (6) Controller执行完成后 ,会返回一个ModelAndView对象 ( 给前端 ),该对象中会包含视图名 或包含"模型和视图名 " ( 实际给这个操作首先经过HandlerAdapter ,然后再给 DispatcherServlet然后一系列的传递最后才能响应 该前端的 )。

    (7) HandlerAdapter : 处理器适配器ModelAndView对象 返回给DispatcherServlet

    (8) DispatcherServlet 会根据 ModelAndView对象 选择一个合适的 ViewResolver : (视图解
    析器 )。

    (9)ViewResolver :视图解析器 解析后,会向DispatcherServlet返回具体的View(视图) ,如: 一个 .jsp文件

    (10) DispatcherServletView 进行渲染 ( 即将模型数据填充至视图 中)。

    (11)视图渲染结果 会返回给客户端浏览器显示 (最后响应 内容给"前端客户")。

    ps :

    上述执行过程中DispatcherServletHandlerMappingHandlerAdapterViewResolver

    对象的工作是在框架内部执行的 ,开发人员并不需要关心这些对象内部的实现过程只需要配置
    前端控制器(DispatcherServlet ),完成Controller中的业务处理, 并在视图中(View)中展示相应信息 即可。

    ( 意思就是说 : 实际开发中要①设置好前端控制器 ②配置好controller 将其对应的"处理器 " ③配置好视图文件等内容即可 。像HandlerMappingHandlerAdapterspring默认的内部配置即可。)

相关推荐
李慕婉学姐7 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆9 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin9 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20059 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉9 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国10 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824810 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈10 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9910 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹10 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理