《跟开涛学SpringMVC》学习笔记
在此我们可以看出具体的核心开发步骤:
1、 DispatcherServlet在web.xml中的部署描述,从而拦截请求到Spring Web MVC
2、 HandlerMapping的配置,从而将请求映射到处理器
3、 HandlerAdapter的配置,从而支持多种类型的处理器
4、 ViewResolver的配置,从而将逻辑视图名解析为具体视图技术
5、处理器(页面控制器)的配置,从而进行功能处理
*****************************************************************************************
三 SpringMVC入口Servlet -> DispatcherServlet:
3.1 DispatcherServlet作用
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。 具体请参考上图。 上我们可以看出DispatcherServlet主要负责流程的控制(而且在流程中的每个关键点都是很容易扩展的)
3.2 DispatcherServlet配置
实际在3.2版本开发过程中,结合maven。新建maven的web工程,对应的pom.xml配置依赖的包。
修改web.xml,配置。根据业务需求主要有几个要配置:
context-param 配置上下文,配置web环境通用配置文件(spring有关的配置文件可以在这里面单独配置)
listener,filter,DispatcherServlet对应的参数:contextConfigLocation
至此,大概前三章的内容就差不多了,当然作者还从源码讲解DispatcherServlet的父类FrameworkServlet以及FrameworkServlet的父类HttpServletBean的作用。
四controller
4.1 controller接口
其实从DispatcherServlet到controller还有一些细节,就是DispatcherServlet通过handlerMapping获得HandlerExecutionChain那些。DispatcherServlet doService()--->doDispatch()--->handlerAdapter的handle()方法。该方法调用controller接口。
第四章就是介绍Controller接口
public interface Controller {ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; }
这是控制器接口,此处只有一个方法handleRequest,用于进行请求的功能处理,处理完请求后返回ModelAndView(Model模型数据部分 和 View视图部分)给DispatcherServlet去渲染render。Controller接口的抽象实现类为:AbstractController,它的handleRequest包含handleRequestInternal()为抽象方法,它的直接子类有:AbstractUrlViewController, MultiActionController, ParameterizableViewController, ServletForwardingController, ServletWrappingController
其实这块开涛大神讲的比较多,看多就晕了实际开发中不实用,应该就是第6章的注解方式。
@Controller:用于标识是处理器类;
@RequestMapping:请求到处理器功能方法的映射规则;
其中:请求方法有RequestMethod.GET, RequestMethod.POST
@RequestParam(将请求参数绑定到方法参数)
- @RequestMapping("/test2")
- public String test2(@RequestParam("userId") int id){。。。}
@PathVariable(将 url template 里的参数绑定到方法参数)
- * @PathVariable 和 @RequestParam 的区别在于:
- * @PathVariable 的 url:/my//user/zhangsan/18
- * @RequestParam 的 url:/my//user?nickname=zhangsan&age=18
- */
- @RequestMapping("/user/{nickname}/{age}");
- public String getUserInfo(@PathVariable("nickname") String name, @PathVariable int age) {...}
请求阶段:客户端是生产者【生产Content-Type媒体类型的请求内容区数据】,服务器是消费者【消费客户端生产的Content-Type媒体类型的请求内容区数据】;
响应阶段:服务器是生产者【生产客户端请求头参数Accept指定的响应体数据】,客户端是消费者【消费服务器根据Accept请求头生产的响应体数据】。
@RequestBody(将请求正文绑定到方法参数)
将 HTTP 请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。
- * 正如上所述,HttpMessageConverter 用于从请求正文绑定到对象和把对象序列化成 String 予客户端响应。
- * @RequestBody,那这部分我们只讲 converting from the HTTP request message to an object。
- *
- * 在定义 HttpMessageConverters 时,我们可以为其指定 supportedMediaTypes。
- * 如果所有的 HttpMessageConverters 中定义的 supportedMediaTypes 均不能匹配上 Content-Type 请
- * 求头中的类型,那么就会收到 415 Unsupported Media Type 响应。
- */
- @RequestMapping("/user/body");
- public String getBody(@RequestBody String body) {
- // 这里的 body 的内容就是 hello
- System.out.println(body);
- return null;
- }
@ResponseBody(将处理完请求后返回的对象绑定到响应正文)
- @RequestMapping("/user")
- public @ResponseBody User getUser() {
- return new User(18, "Jack", "计算机");
- }
● @SessionAttributes
- @SessionAttributes 和 @ModelAttribute 类似,只不过 @SessionAttributes 是将数据存放于 session
- * 中或从 session 中取数据。
引用的服务使用
@Autowired
还有一些数据绑定的注解
实际开发配置:
在配置文件中使用<context:annotationconfig/>之前,必须在 <beans> 元素中声明 context 命名空间
配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能。非必须项,主要是为了简化配置。默认扫描的注解类型是 @Component,不过,在 @Component 语义基础上细化后的 @Repository, @Service 和 @Controller
- <!--Spring3.1开始的注解 HandlerMapping -->
- <bean
- class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
- <!--Spring3.1开始的注解 HandlerAdapter -->
- <bean
- class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
按理说有了开始的注解,能找到对应的controller,可以不配置上面这两条,但是为了避免不必要的错误,还是老实配置上吧。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">及对应参数
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter" />
<ref bean="jsonHttpMessageConverter" />
<ref bean="marshallingHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<constructor-arg ref="jaxbMarshaller" />
<property name="supportedMediaTypes" value="application/xml"></property>
</bean>
《跟开涛学SpringMVC》学习笔记相关推荐
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...
- 第一行代码学习笔记第二章——探究活动
知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...
- 第一行代码学习笔记第八章——运用手机多媒体
知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...
- 第一行代码学习笔记第六章——详解持久化技术
知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...
- 第一行代码学习笔记第三章——UI开发的点点滴滴
知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...
- 第一行代码学习笔记第十章——探究服务
知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...
- 第一行代码学习笔记第七章——探究内容提供器
知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...
- 第一行代码学习笔记第五章——详解广播机制
知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...
- 第一行代码学习笔记第九章——使用网络技术
知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...
- 安卓教程----第一行代码学习笔记
安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...
最新文章
- 为 UITextField 增加键盘偏移的模板化写法
- 图片上两点之间的距离和两组图片之间的差异的关系
- source, ~/.bashrc, ~/.bash_profile详解
- Delphi - SEH研究
- objective-c 逐帧动画
- QT5 动态链接库的创建和使用
- mysql11导入数据_MySQL专题11之MySQL导出数据、MySQL导入数据
- java操作sql数据库_java-JDBC连接数据库并进行SQL操作
- 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(下)-转
- Linux 实现人脸识别
- 计算机应用基础考试质量分析,基于SPSS软件的试卷分析与应用
- Echarts Map地图下钻至县级
- XSS Filter Evasion Cheat Sheet 中文版
- 怎么用计算机画外观设计图片,以实例教你如何绘制外观设计专利3D线条图
- matlab的containers.Map类型介绍
- Python爬取页游火线精英全区挑战排行榜
- 最好的我们 经典语录
- Python中list、tupe、dic、set的使用小记
- 从苏宁电器到卡巴斯基(第二部)第03篇:我在卡巴的日子 III
- Parallel Algorithm
热门文章
- 电子设计教程30:温度滞回控制系统
- [北航软工教学] 教学计划大纲
- web前端面试中常问的问题
- 对路径“C:\Inetpub\wwwroot\UploadFile\AssertTemple1.xls”的访问被拒绝。
- 云端服务器部署前端工程
- vue表单校验,根据某选项追加或去掉校验
- Java实现 LeetCode 37 解数独
- IEEEE trans模板中怎么使用algorithm2e
- oracle12c 环境需求,Oracle12C之环境准备工作
- Java 方法重写与重载的区别 示例 重载多数相加求和 重写toString()和equals()