SpringMVC

介绍SpringMVC

Spring MVC 是一个基于 Java 的 Web 开发框架,它是 Spring Framework 的一部分,使用 MVC(Model-View-Controller)的设计模式来构建 Web 应用程序。Spring MVC 为开发者提供了一个灵活的、高效的、可扩展的 Web 框架,可以帮助开发者构建出高质量的 Web 应用程序。

特点包括:

  1. 基于 MVC 设计模式。Spring MVC 将业务逻辑、用户界面和用户输入处理分离,使代码更易于维护和扩展。

  2. 通过配置文件实现组件解耦。Spring MVC 的组件之间使用配置文件进行解耦,使得代码更加模块化、易于测试和重构。

  3. 强大的拦截器机制。Spring MVC 提供了强大的拦截器机制,可以对请求进行拦截、过滤和处理,支持自定义拦截器进行业务逻辑的处理。

  4. 灵活的视图解析机制。Spring MVC 支持多种视图解析器,如 JSP、FreeMarker、Groovy 等,可以根据开发者的需求灵活选择。

  5. 支持 RESTful Web 服务。Spring MVC 支持基于 REST(Representational State Transfer)的 Web 服务开发,可以构建出高性能、易于扩展的 RESTful Web 服务应用程序。

总体来说,Spring MVC 是一个功能强大、易于扩展的 Web 开发框架,可以帮助开发者快速构建出高质量的 Web 应用程序

SpringMVC工作流程

用户发来一个请求,首先进入的是前端控制器DispatcherServlet

  1. 前端控制器(DispacherServlet)将用户发来的请求发送给处理器映射器(HandlerMapping)

  2. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。

  3. 处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)

  4. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller(处理业务逻辑)

  5. 控制器执行完成后,会返回一个ModelAndView对象给处理器适配器

  6. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式响应给用户)

  7. 前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过来的View对象解析成对应的页面对象

  8. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet

  9. 前端控制器再将返回回来的对象交给视图(View)

  10. 视图根据传过来的Model对象再一次的对页面进行渲染(将模型数据填充至视图中),然后在返回给前端控制器。

  11. 前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。

SpringMVC的工作流程是客户端请求->DispatcherServlet拦截->控制器处理->视图解析器解析->模型数据渲染->响应结果返回到客户端。其中,视图解析器和模型数据渲染部分可以根据具体的需求进行定制。

依赖

复制代码
<!-- jstl+standard -->
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<!-- spring -->
<spring.version>5.0.2.RELEASE</spring.version>
...
<!-- spring mvc相关依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>${jstl.version}</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>${standard.version}</version>
</dependency>

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>

spring-mvc.xml

在spring-mvc.xml中增加

复制代码
<mvc:resources location="/static/" mapping="/static/**"/>
复制代码
<?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.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.xiaoxu"/>
 
    <!--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="/css/" mapping="/css/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>
    <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->
</beans>
相关推荐
练习时长一年12 小时前
Spring配置类的演化
java·spring boot·spring
invicinble12 小时前
Spring如何把bean注册到容器里
java·后端·spring
恼书:-(空寄13 小时前
静态代理与动态代理,Spring AOP底层精髓全解析
spring·动态代理·静态代理
希望永不加班13 小时前
SpringBoot 敏感数据脱敏(序列化层)
java·spring boot·后端·spring
希望永不加班13 小时前
SpringBoot 数据库索引优化:慢查询分析
java·数据库·spring boot·后端·spring
我登哥MVP17 小时前
【SpringMVC笔记】 - 11 - SpringMVC 执行流程
java·spring boot·笔记·spring·tomcat·intellij-idea
zhenxin012218 小时前
GitSubmodule避坑指南:从入门到精通
spring boot·后端·spring
椰猫子18 小时前
Spring Framework(Bean)
java·前端·spring
用户8608211356520 小时前
Springboot按jar包方式启动,究竟发生了什么
spring
所愿ღ1 天前
SSM框架-Spring1
java·开发语言·笔记·spring