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>
相关推荐
paopaokaka_luck6 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
Yaml48 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
aloha_7898 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
wyh要好好学习10 小时前
SpringMVC快速上手
java·spring
尢词10 小时前
SpringMVC
java·spring·java-ee·tomcat·maven
wrx繁星点点10 小时前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
咕哧普拉啦12 小时前
乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列
java·spring boot·mysql·spring·maven·乐尚代驾·java最新项目
wyh要好好学习13 小时前
SSM— spring,springMVC,mybatis整合
java·spring
A-bodgie14 小时前
Spring 中的 Environment 对象
java·后端·spring·servlet·springboot
桐桐桐14 小时前
Spring Security @PreAuthorize @PostAuthorize 权限控制
java·后端·spring