• 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

      
      <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>SpringMvcservlet-name>
              <servlet-class>
                  org.springframework.web.servlet.DispatcherServlet
              servlet-class>
      
             
             <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc-config.xmlparam-value>
             init-param>
      
              
              <load-on-startup>1load-on-startup>
          servlet>
          
          <servlet-mapping>
              <servlet-name>SpringMvcservlet-name>
              <url-pattern>/url-pattern>
          servlet-mapping>
      web-app>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29

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

    • 第三步创建Controller类controller.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;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21

      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

      <?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>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29

      ① 在上述 springmvc-config.xml 中,首先定义了一个 名称为“/firstControllerBean,该 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

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      
          入门程序
      
      
      ${msg}
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

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

      此时项目的目录结构为 :

      在这里插入图片描述

      将项目发布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默认的内部配置即可。)

  • 相关阅读:
    爱上开源之dockerUI强大docker管理工具,没有之一
    爱心捐赠系统
    Java的final修饰符
    1018 锤子剪刀布
    【JavaEE】操作系统与进程
    柯达伊教学法在中小学音乐课堂中的运用研究课题结题报告
    算法训练营第51天|LeetCode 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
    Selenium 模拟浏览器操作案例
    c++八股文:c++新特性
    了解CSS中的link和@import引入CSS的区别
  • 原文地址:https://blog.csdn.net/m0_70720417/article/details/136548960