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

目录
相关文章
|
前端开发 Java 数据处理
|
26天前
|
Java 数据库连接 数据库
SpringMVC(2)
SpringMVC(2)
|
5月前
|
JSON 前端开发 Java
|
5月前
|
XML JSON 前端开发
|
5月前
|
前端开发 Java 应用服务中间件
|
6月前
|
存储 JSON 前端开发
|
前端开发 应用服务中间件
SpringMVC4
SpringMVC4
43 0
|
6月前
|
XML 前端开发 Java
SpringMvc专题
SpringMvc笔记(持续更新)此方法的执行时机是在控制器方法执行之前,所以我们通常是使用此方法对请求部分进行增强。同时由于结果视图还没有创建生成,所以此时我们可以指定响应的视图。
|
网络架构
SpringMVC3
SpringMVC3
32 0
SpringMVC3
|
前端开发 API 数据库
springMVC
@RequestMapping 除了可以修饰方法,还可以修饰类,修饰方法时是提供详细的映射信息,修饰类时相当于WEB-INF的根目录
62 0