SpringMVC

简介: 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

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

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

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

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

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

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

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

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

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

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

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


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>

c94045e3f235487a9184b23a5071ead3.png

目录
相关文章
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
人工智能 自然语言处理 算法
哈啰集团全面接入通义灵码,AI 生成代码占比 20%,研发提效 12%
官宣!哈啰集团全面接入阿里云通义灵码专属版
21607 10
|
12月前
|
存储 搜索推荐 C语言
深入C语言指针,使代码更加灵活(二)
深入C语言指针,使代码更加灵活(二)
148 2
|
JavaScript 前端开发
前端JS函数
【9月更文挑战第4天】前端JS函数
93 6
|
SQL 存储 缓存
Spark入门(一篇就够了)
Spark入门(一篇就够了)
447 0
Spark入门(一篇就够了)
|
JavaScript 前端开发
js弹出框(第二次及以后不会弹)
js弹出框(第二次及以后不会弹)
122 0
|
存储 SQL 缓存
MySQL的Double Write并不难理解
今天为大家介绍一个新的名词:double write。 相信你还记得,我之前有写笔记跟大家分享过,在MySQL组织数据的基本单位是存在于磁盘上的数据页。数据页被读取到内存(Buffer Pool)中后被称为缓存页。默认情况下每个数据页的大小是16kb,数据页中存储的就是一行行真实的记录,也叫做数据行。
288 0
|
关系型数据库 Java MySQL
SpringBoot(十二)_springboot整合PageHelper
我之所以会发现这个PageHelper这个东东 是因为公司在使用 ,刚开始我也没太注意这个插件,感觉不就是个分页插件吗?也就那样,直到一天,我在网上找了个代码生成器,用来构建代码,因为它是针对mysql的,我们公司使用的是pgsql,它们的分页是不同的。
2515 0