sprinfmvc学习--01
springmvc框架是一个基于请求驱动的web框架,使用了前端控制器模式来设计。根据请求映射规则分发给相应的页面控制器进行处理。


1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

在web.xml文件中配置DispatcherServlet。DispatcherServlet是一个标准的Java web servlet。它是继承自Servlet基类的。
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
在上面的配置中,我们还指定了DispatcherServlet配置文件的位置信息。为/WEB-INF/spring/appServlet/servlet-context.xml。在这个xml文件中,可以配置springmvc怎么将请求映射到controller,springmvc使用什么视图引擎等重要信息。
在这个xml文件中,我们需配置如下的几个bean。
| bean type | 说明 |
| HandlerMapping | 将一个http请求映射到一个handler chain。包含一个handler和一系列interceptor。 |
| HandlerAdapter | 帮助DispatcherServlet将一个handler映射到请求中,而不管实际调用的是那个handler。使用了适配器模式。 |
| HandlerExceptionResolver | 异常相关的 |
| ViewResolver | 使用的是什么视图引擎 |
| LocalResolver和LocaleContextResolver | |
| ThemeResolver | |
| MultipartResolver | 处理multi-part请求。上传文件相关的 |
| FlashMapManager | 存储和读取FlashMap。用来传递attributes从一个请求到另一个请求。经常用在redirect中。 |
DispatcherServlet的默认配置
|
# Default implementation classes for DispatcherServlet's strategy interfaces. org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\ org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\ org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\ org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager |
DispatcherServlet 初始化参数
| 参数 | 说明 |
| contextClass | 实现了接口WebApplicationContext的类。默认使用xmlWebApplicationContext |
| contextConfigLocation | 初始化context的xml文件位置 |
| namespace |
实现Controllers
consumable media type
使用consumable media type可以限定,只有当请求的Content-Type header满足指定的media type时,使用该action。例如:
| @Controller @RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json") public void addPet(@RequestBody Pet pet, Model model) { // implementation omitted } |
producible media type
当请求的Accept Type header满足我们指定的media type是,才使用该action
@Controller |
matrix Variables
matrix Variables是一个http的url规范,用的比较少。实际情况下应该不会使用。更多详情见:http://www.w3.org/DesignIssues/MatrixURIs.html。
// GET /pets/42;q=11;r=22
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET)
|
// GET /owners/42;q=11/pets/21;q=22
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
|
Request Parameters and header values
我们可以指定url中是否包含,参数中的某个参数=??。请求的header中是否包含某个值来匹配方法。"myParam", "!myParam", or "myParam=myValue"
@Controller |
@Controller |
小提示:尽管我们可以使用headers=“content-type=text/×”来匹配如text/plain或text/html,但是还是推荐使用consumes and produces。因为这2个注解是专门为了解决这种情况的。
request body
request body注解可以将http请求的body映射到方法的参数中
| @RequestMapping(value = "/something", method = RequestMethod.PUT) public void handle(@RequestBody String body, Writer writer) throws IOException { writer.write(body); } |
responsebody
将方法的结果直接写进http response中
@RequestMapping(value = "/something", method = RequestMethod.PUT) |
比如在一些ajax请求中,或一些给第三方的接口中,我们希望返回的只是纯文本,json或xml格式的数据,这时候就要用到response注解了。
RestController
如果我们设计了一个rest风格的controller,这个controller方法中返回的都是纯文本,json或xml数据,而不是html页面。那么我们可以在这个contrller的所有方法中都添加一个responseBody注解,但这是比较麻烦和笨重的方法。使用restController注解就可以了。
httpEntity
httpEntity和requestBody,ResponseBode类似,httpEntity注解可以将一个http请求,http相应的header和body都绑定到方法的一个参数中去。
@RequestMapping("/something")
|
modelAttribute
ModelAttribute可以用在方法或方法的参数中。
用在方法中:标识该方法的目的是添加一个或多个model属性。有modelAyyribute注解的方法不能直接映射到请求。相反,有modelAttribute注解的方法会在该Controller的所有RequestMapping方法之前被调用。
// Add one attribute |
modelAttribute使用在一个方法的参数中,用于参数绑定。并将该参数暴露成model的一个参数。
sessionAttributes
用于绑定命令对象到session中。用于在多次请求中保持数据,比如:多步骤表单的提交。
sessionAttribute用于类中。表示该类中的方法,
@Controller |
表示将模型数据中的名字为user的对象存储到session中。
sprinfmvc学习--01的更多相关文章
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Java虚拟机JVM学习01 流程概述
Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...
- Android Testing学习01 介绍 测试测什么 测试的类型
Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...
- Java学习01
Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...
- ThinkPhp学习01
原文:ThinkPhp学习01 一.ThinkPHP的介绍 MVC M - Model 模型 工作:负责数据的操作 V - View 视图(模板 ...
- 【iScroll源码学习01】准备阶段 - 叶小钗
[iScroll源码学习01]准备阶段 - 叶小钗 时间 2013-12-29 18:41:00 博客园-原创精华区 原文 http://www.cnblogs.com/yexiaochai/p/3 ...
- JVM学习01:内存结构
JVM学习01:内存结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.h ...
- webservice学习01:wsdl文档结构
webservice学习01:wsdl文档结构 wsdl文档结构 WSDL文档示例 <wsdl:definitions xmlns:xsd="http://www.w3.org/200 ...
- spring学习(01)之IOC
spring学习(01)之IOC IOC:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创 ...
随机推荐
- String.Split()功能
我们在过去的教训 String.Join功能(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx).当中用到了String.SPli ...
- 数学思想方法-分布式计算-linux/unix技术基础(3)
夹: ~表示当前用户的主文件夹 .它代表了当前文件夹 ..它代表的父文件夹 链接文件 使用不同的文件名指的是相同的数据或程序.硬链接 在相同的物理文件系统,创建一个硬链接 -bash-4.2$ fin ...
- Ambari-部署文档
Ambari-server搭建过程 部署环境要求 操作系统:centos 5 或 centos 6 能够使用yum jdk版本号 1.7 官网安装教程 https://cwiki.apache.org ...
- Linux makefile 课程 非常具体的,和理解
最近的一项研究Linux根据C计划,我买了一个电话<Linux环境C编程指南>阅读makefile这使他看起来困惑,我可能无法理解. 于是google到了下面这篇文章. 通俗易懂. 然后把 ...
- jQuery中queue和dequeue的用法
jQuery中的queue和dequeue是一组很有用的方法,他们对于一系列需要按次序运行的函数特别有用.特别animate动画,ajax,以及timeout等需要一定时间的函数 queue和dequ ...
- [cocos2d-x 3.0] 触摸显示器
一.基本使用 1.首先,声明一个监听器 有两种,EventListenerTouchOneByOne 和 EventListenerTouchAllAtOnce,前者是单点触控.后者是多点触控.后者我 ...
- 队列--Redis+Log4Net
队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redi ...
- [SQLXML]FOR XML语法导出XML的易错之处
原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...
- CRUD功能的JqGrid表格
CRUD功能的JqGrid表格 之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作 ...
- 腾讯云安装openvz,高速搭建測试环境
CSDN送了腾讯云的測试资格,准备拿来作为cici的软件公布首页,想在上面做个demo,无奈没有设备环境,于是想要用openvz来虚拟一些vps: 第一步:选择腾讯云的os模板,centos6.3 第 ...