一、简介

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。

二、流程架构

1.用户发送请求至 前端控制器DispatcherServlet。

2.前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping。

3.处理器映射器HandlerMapping根据请求的Url找到具体的处理器,生成处理器对象Handler及处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet。

4.前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调用处理器Controller。

5.执行处理器(Controller,也叫后端控制器)

6.处理器Controller执行完后返回ModelAnView。

7.处理器映射器HandlerAdapter将处理器Controller执行返回的结果ModelAndView返回给前端控制器DispatcherServlet。

8.前端控制器DispatcherServlet将ModelAnView传给视图解析器ViewResolver。

9.视图解析器ViewResolver解析后返回具体的视图View。

10.前端控制器DispatcherServlet对视图View进行渲染视图(即:将模型数据填充至视图中)

11.前端控制器DispatcherServlet响应用户。

三、springmvc xml配置总结

  1. springmvc.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:mvc="http://www.springframework.org/schema/mvc"
    4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5. xmlns:p="http://www.springframework.org/schema/p"
    6. xmlns:context="http://www.springframework.org/schema/context"
    7. xsi:schemaLocation="http://www.springframework.org/schema/beans
    8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    9. http://www.springframework.org/schema/context
    10. http://www.springframework.org/schema/context/spring-context-3.0.xsd
    11. http://www.springframework.org/schema/mvc
    12. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    13.  
    14. <!--处理器映射器-->
    15. <!--<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />-->
    16. <!--简单url映射器-->
    17. <!--<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" />-->
    18.  
    19. <!--=========非注解配置==========-->
    20. <!--处理器适配器1 实现controller接口 -->
    21. <!--<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> -->
    22.  
    23. <!--处理器适配器2实现HttpRequestHandler接口 -->
    24. <!--<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> -->
    25.  
    26. <!-- controller配置 -->
    27. <!-- <bean name="/userController.do" class="sy.controller.UserController"/>-->
    28. <!--===================-->
    29.  
    30. <!--=========注解配置==========-->
    31. <!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->
    32. <context:component-scan base-package="sy.controller"/>
    33. <!--注解映射器 -->
    34. <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
    35.  
    36. <!--注解适配器 -->
    37. <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->
    38.  
    39. <!-- springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,
    40. 可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。-->
    41. <!--加载了很多参数 -->
    42. <mvc:annotation-driven></mvc:annotation-driven>
    43.  
    44. <!--视图解析器-->
    45. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    46. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    47. <property name="prefix" value="/jsp/"/>
    48. <property name="suffix" value=".jsp"/>
    49. </bean>
    50.  
    51. </beans>

    2、web.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    3. http://www.springmodules.org/schema/cache/springmodules-cache.xsd
    4. http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
    5. xmlns="http://java.sun.com/xml/ns/javaee"
    6. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    7. <display-name>MyBatisPro05</display-name>
    8. <welcome-file-list>
    9. <welcome-file>login.jsp</welcome-file>
    10. </welcome-file-list>
    11.  
    12. <!-- Spring配置文件 -->
    13. <context-param>
    14. <param-name>contextConfigLocation</param-name>
    15. <param-value>classpath:applicationContext.xml</param-value>
    16. </context-param>
    17. <!-- 编码过滤器 -->
    18. <filter>
    19. <filter-name>encodingFilter</filter-name>
    20. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    21. <async-supported>true</async-supported>
    22. <init-param>
    23. <param-name>encoding</param-name>
    24. <param-value>UTF-8</param-value>
    25. </init-param>
    26. </filter>
    27. <filter-mapping>
    28. <filter-name>encodingFilter</filter-name>
    29. <url-pattern>/*</url-pattern>
    30. </filter-mapping>
    31. <!-- Spring监听器 -->
    32. <listener>
    33. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    34. </listener>
    35.  
    36. <!-- 添加对springmvc的支持 -->
    37. <servlet>
    38. <servlet-name>springMVC</servlet-name>
    39. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    40. <init-param>
    41. <param-name>contextConfigLocation</param-name>
    42. <param-value>classpath:spring-mvc.xml</param-value>
    43. </init-param>
    44. <load-on-startup>1</load-on-startup>
    45. <async-supported>true</async-supported>
    46. </servlet>
    47. <servlet-mapping>
    48. <servlet-name>springMVC</servlet-name>
    49. <url-pattern>*.do</url-pattern>
    50. </servlet-mapping>
    51. </web-app>

    四、Springmvc常用注解总结

    (1)@RequestMapping:(@RequestMapping(value="/book"))

    RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    @RequestMapping有三个属性:value:指定实际的url、method:指定请求method类型(get,put,post,delete等)、params:指定request中必须包含某些参数值,才让该方法处理、headers:指定request中必须包含某些指定的header值,才处理请求、consumes:指定处理请求的的提交内容类型(Content-type)、produces:指定返回的内容类型

    例子@RequestMapping(value="/get/{bookid}",method = RequestMethod.GET, params="myParam=myValue",headers = "Accept=application/json")

    (2)@RequestParam:

    @RequestParam用于将请求参数区数据映射到功能处理方法的参数上。

    @RequestParam有以下三个参数:
        value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
        required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将抛出异常;
        defaultValue:默认值,表示如果请求中没有同名参数时的默认值,设置该参数时,自动将required设为false。

    例子: public String requestparam4(@RequestParam(value="username",required=false) String username)

    (3)@PathVariable

    @PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

    例子:@RequestMapping(value="/users/{userId}/topics/{topicId}")
                 public String test(@PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)

    (4)@Responsebody

    @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。
    作用: 
     该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
    使用时机:
     返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

    (5)@RequestBody

    @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。

    作用: 
     i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
     ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
    使用时机:
    A) GET、POST方式提时, 根据request header Content-Type的值来判断:
    application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
    multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
    其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
    B) PUT方式提交时, 根据request header Content-Type的值来判断:
    application/x-www-form-urlencoded, 必须;
    multipart/form-data, 不能处理;
    其他格式, 必须;
    说明:request的body部分的数据编码格式由header部分的Content-Type指定;

Spring总结之SpringMvc上的更多相关文章

  1. Spring MVC实现文件上传

    基础准备: Spring MVC为文件上传提供了直接支持,这种支持来自于MultipartResolver.Spring使用Jakarta Commons FileUpload技术实现了一个Multi ...

  2. SpringMVC上传下载

    springmvc上传和下载功能 写在一个简单的示例在线基准码 1.导入的必要性jar包:ant.jar.commons-fileupload.jar.connom-io.jar. 当然spring ...

  3. 2. SpringMVC 上传文件操作

    1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 com.springsource.com.mc ...

  4. spring整合mybatis,springMVC的0配置文件方式

    0配置文件的形式主要是采用spring3.0提供的@configuration注解和spring容器在启动的时候会加载实现了WebApplicationInitializer的类,并调用其onStar ...

  5. Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页

    本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...

  6. Spring MVC的文件上传

    1.文件上传 文件上传是项目开发中常用的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...

  7. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  8. SpringMVC 上传下载 异常处理

    SpringMVC 上传下载 异常处理 上一章节对SpringMVC的表单验证进行了详细的介绍,本章节介绍SpringMVC文件的上传和下载(重点),国际化以及异常处理问题.这也是SpringMVC系 ...

  9. spring 完成multipart数据上传

    spring中多媒体文件的上传,通过配置 MultipartResolver 实现. MultipartResolver 的实现类有两个:一.StandardServletMultipartResol ...

随机推荐

  1. NVIDIA深度学习Tensor Core性能解析(上)

    NVIDIA深度学习Tensor Core性能解析(上) 本篇将通过多项测试来考验Volta架构,利用各种深度学习框架来了解Tensor Core的性能. 很多时候,深度学习这样的新领域会让人难以理解 ...

  2. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据

    在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据 如今,最流行的拍照设备智能手机可以捕获高达4K UHD的图像(3840×2160图像),原始数据超过25 MB.即使 ...

  3. 基于ARMv8的固件系统体系结构

    基于ARMv8的固件系统体系结构 The architecture of ARMv8-based firmware systems 自2011年发布以来,ARMv8处理器架构在移动设备市场上已经相当普 ...

  4. 用Taro写一个微信小程序(三)—— 配置dva

    一.关于dva dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻 ...

  5. 教你三种jQuery框架实现元素显示及隐藏动画方式

    摘要:在jQuery框架中对元素对象进行显示和隐藏有三种方式,分别是"默认方式显示和隐藏"."滑动方式显示和隐藏"."淡入淡出显示和隐藏". ...

  6. python operator操作符函数

    本模块主要包括一些Python内部操作符对应的函数.这些函数主要分为几类:对象比较.逻辑比较.算术运算和序列操作.

  7. 性能工具之Jmeter小白入门系列之一

    一.简单了解 Apache JMeter The Apache JMeter application is open source software, a 100% pure Java applica ...

  8. asp.net core配合vue实现后端验证码逻辑

    概述 网上的前端验证码逻辑总感觉不安全,验证码建议还是使用后端配合验证. 如果产品确定可以上网的话,就可以使用腾讯,百度等第三方验证,对接方便.但是产品可能内网部署,就必须自己写了. 本文章就是基于这 ...

  9. Unity 消消乐开发思路

    以简单的方式讲述游戏开发思路,暂时没有实践,如有错误,欢迎各位大佬指错 关卡数据保存方式 数据保存我选用json,可读性强,解析快 消消乐物体处理方式 消消乐物体我将以预制体的方式使用(把物品拖到As ...

  10. 重新整理 .net core 实践篇————网关中的身份签名认证[三十七]

    前言 简单整理一下网关中的jwt,jwt用于授权认证的,其实关于认证授权这块https://www.cnblogs.com/aoximin/p/12268520.html 这个链接的时候就已经写了,当 ...