【SpringMVC】入门、静态资源处理

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring MVC 是一个基于 Java 的 Web 开发框架,它在构建 Web 应用程序时提供了良好的支持。,将应用程序的不同部分分离开来,使得开发更加在Spring MVC中,模型)表示应用程序的数据和业务逻辑,视图)负责渲染模型数据以生成最终的用户界面,控制器)接收来自用户的请求,并根据请求来调用相应的模型和视图。Spring MVC 提供了丰富的功能和特性,例如请求映射、请求参数绑定、数据校验、视图解析、拦截器、异常处理等。

 一、SpringMVC的介绍

Spring MVC 是一个基于 Java 的 Web 开发框架,它在构建 Web 应用程序时提供了良好的支持。Spring MVC 采用 MVC(模型-视图-控制器)架构模式,将应用程序的不同部分分离开来,使得开发更加模块化、灵活和可扩展。

Spring MVC 中,模型Model)表示应用程序的数据和业务逻辑,视图View)负责渲染模型数据以生成最终的用户界面,控制器Controller)接收来自用户的请求,并根据请求来调用相应的模型和视图。

Spring MVC 提供了丰富的功能和特性,例如请求映射、请求参数绑定、数据校验、视图解析、拦截器、异常处理等。它也与其他 Spring 模块(如 Spring Boot)紧密集成,使得开发和维护 Web 应用程序更加方便。

Spring MVC 是一个强大而灵活的框架,适用于构建各种规模的 Web 应用程序,并且具有良好的可扩展性和可测试性。

二、SpringMVC工作流程

SpringMVC采用了和自定义MVC相差不差的工作流程。

如自定义MVC的工作流程:

    1. 客户端浏览器发送请求url:http://localhost:8080/mvc/*.action?methodName=***
    2. 被中央控制器dispatchServlet接受*.action将url处理,截取到*
    3. 通过*在mvc.xml中寻找对应的子控制器
    4. 将子控制器进行实例化
    5. 同时由于实现implement modelDriven接口,所有参数自动封装成实体类中
    6. 动态调用方法后会有一个方法返回值,比如list
    7. 中央控制器dispatchServlet,通过list返回值会在mvc.xml中寻找对应的跳转页面
    8. 将页面数据渲染完毕展现用户

    SpringMVC工作流程

      1. 客户端浏览器发送请求url:http://localhost:8080/mvc/*.action?methodName=***
      2. 被中央控制器dispatchServlet接受*.action将url处理,截取到/*
      3. 通过*在mvc.xml中寻找对应的子控制器,通过handlerMappering找;通过注解找
        <bean id="/*" class="com.web.action">
      4. 通过handlerAdapter实例化执行handler
      5. 执行handler会有返回值(modelAndview),返回给dispatchServlet
      6. dispatchServlet接受到视图,找到viewResovler视图解析器进行视图解析
      7. 得到view视图返回给dispatchServlet
      8. 将view经过渲染相应给客户

      image.gif编辑

      三、SpringMVC入门

      这里面的其他依赖由MyBatis映射一对多和多对多关系配置(看完这篇不吃亏)后续更写

      1、添加依赖

      添加

      <!--        c标签对应的依赖-->
              <!-- jstl+standard -->
              <jstl.version>1.2</jstl.version>
              <standard.version>1.1.2</standard.version>
              <!-- spring -->
              <spring.version>5.0.2.RELEASE</spring.version>
      image.gif

      image.gif编辑

       

      <dependency>
                  <groupId>jstl</groupId>
                  <artifactId>jstl</artifactId>
                  <version>${jstl.version}</version>
              </dependency>
              <dependency>
                  <groupId>taglibs</groupId>
                  <artifactId>standard</artifactId>
                  <version>${standard.version}</version>
              </dependency>
      image.gif

      image.gif编辑

      2、创建spring-mvc.xml

      resources新建一个文件spring-mvc.xmlimage.gif编辑

      <?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"
             xmlns:mvc="http://www.springframework.org/schema/mvc"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
          <!--1) 扫描com.tgq及子子孙孙包下的控制器(扫描范围过大,耗时)-->
          <context:component-scan base-package="com.tgq"/>
          <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
          <mvc:annotation-driven/>
          <!--3) 创建ViewResolver视图解析器 -->
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
              <property name="viewClass"
                        value="org.springframework.web.servlet.view.JstlView"></property>
              <property name="prefix" value="/WEB-INF/jsp/"/>
              <property name="suffix" value=".jsp"/>
          </bean>
      </beans>

      image.gif

      3、配置web.xml

      找到我们的web.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_3_1.xsd"
               version="3.1">
        <display-name>Archetype Created Web Application</display-name>
        <!-- Spring和web项目集成start -->
        <!-- spring上下文配置文件 -->
        <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-context.xml</param-value>
        </context-param>
        <!-- 读取Spring上下文的监听器 -->
        <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!-- Spring和web项目集成end -->
        <!-- 中文乱码处理 -->
        <filter>
          <filter-name>encodingFilter</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
          <async-supported>true</async-supported>
          <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
          </init-param>
        </filter>
        <filter-mapping>
          <filter-name>encodingFilter</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Spring MVC servlet -->
        <servlet>
          <servlet-name>SpringMVC</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
          <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
          <!--web.xml 3.0的新特性,是否支持异步-->
          <async-supported>true</async-supported>
        </servlet>
        <servlet-mapping>
          <servlet-name>SpringMVC</servlet-name>
          <url-pattern>/</url-pattern>
        </servlet-mapping>
      </web-app>

      image.gif

      4、测试

      新建一个web包,下面创建一个类DemoController

      image.gif编辑

      package com.tgq.web;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      /**
       * @软件包名 com.tgq.web
       * @用户 tgq
       * @create 2023-09-04 下午7:56
       * @注释说明:
       */
      @Controller
      public class DemoController {
          @RequestMapping(value = "/hello")
          public String hello() {
              System.out.println("被调用了。。。。");
              return "hello";
          }
      }

      image.gif

      利用tomcat启动

      测试结果:

      image.gif编辑

      四、静态资源处理

      我们在webapp里面创建一个存放静态资源的地方static,下面创建一个存放图片的地方image,我们把图片放在里面

      image.gif编辑

      然后启动tomcat服务器,直接访问是访问不到的

      spring-mvc.xml里面新增一行,这里面可以找到任何static里面的文件,如想找jsp\css等,都可以利用这一行代码

      <!--4) 单独处理图片、样式、js等资源 -->
          <mvc:resources location="/static/" mapping="/static/**"/>
      image.gif

      完整spring-mvc.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"
             xmlns:mvc="http://www.springframework.org/schema/mvc"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
          <!--1) 扫描com.tgq及子子孙孙包下的控制器(扫描范围过大,耗时)-->
          <context:component-scan base-package="com.tgq"/>
          <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
          <mvc:annotation-driven/>
          <!--3) 创建ViewResolver视图解析器 -->
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
              <property name="viewClass"
                        value="org.springframework.web.servlet.view.JstlView"></property>
              <property name="prefix" value="/WEB-INF/jsp/"/>
              <property name="suffix" value=".jsp"/>
          </bean>
          <!--4) 单独处理图片、样式、js等资源 -->
          <mvc:resources location="/static/" mapping="/static/**"/>
      </beans>
      image.gif

      重启tomcat服务器,手动输入静态资源地址就可以找到资源

      image.gif编辑


      相关文章
      |
      4月前
      |
      XML 前端开发 Java
      SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
      这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
      SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
      |
      JSON 前端开发 Java
      Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
      Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
      113 0
      SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
      这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
      SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
      |
      4月前
      |
      存储 前端开发 Java
      SpringMVC入门到实战------1、SpringMVC简介
      这篇文章是SpringMVC框架的入门介绍,阐述了MVC架构的概念和分层,解释了SpringMVC作为Spring家族的一部分在Web应用开发中的作用和重要性,并概述了SpringMVC的关键特点,包括与Spring IOC容器的无缝集成、基于Servlet的DispatcherServlet、全面的解决方案、代码简洁性、高内聚低耦合的组件化设计以及卓越的性能表现。
      SpringMVC入门到实战------ 十一 拦截器的使用
      这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
      SpringMVC入门到实战------ 十一 拦截器的使用
      |
      4月前
      |
      JSON 前端开发 JavaScript
      SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
      这篇文章详细介绍了SpringMVC中的`HttpMessageConverter`接口及其相关的`@RequestBody`、`@ResponseBody`、`RequestEntity`和`ResponseEntity`注解和类型的使用,包括如何将请求体转换为Java对象、如何将Java对象转换为响应体、以及如何处理JSON和AJAX请求。
      SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
      |
      4月前
      |
      Java 数据库连接 Spring
      后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
      文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
      后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
      |
      4月前
      |
      缓存 Java 应用服务中间件
      SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
      这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
      SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
      |
      4月前
      |
      XML JSON 数据库
      SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
      这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
      SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
      |
      4月前
      |
      前端开发
      SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
      这篇文章详细介绍了SpringMVC中的视图类型,包括ThymeleafView、转发视图、重定向视图和视图控制器的使用,以及如何通过源码查看确定使用的视图渲染器类型。
      SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解