介绍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>