深入理解Spring MVC
如何让一个普通类成为Controller?
方案一:实现接口Controller
解析:handleRequest(request,response)
方案二:继承AbstractController
解析:handleRequestInternal(request,response)
若处理器继承自AbstractController类,那么该控制器就具有了一些新功能。因为AbstractController类还继承自一个父类WebContentGenerator,WebContentGenerator具有supportMethods属性
部分源码实现:
原理:
发现AbstractController类中有一个handleRequest()方法,用到了模板方法设计模式。
保证该方法中去调度了一个抽象方法。抽象方法在子类中根据业务需求被重写。



applicationContext.xml:



还可以设置支持的HTTP数据提交方式。默认支持GET/POST/HEAD,限定请求提交方式


地址栏默认的是GET请求,输入的Post请求则报405

如果想在一个Controller中定义N个方法,让他们分别执行,如何实现?[继承自MultiActionController]

其次该如何去匹配这些方法?在这里引出一个方法名称解析器[MethodNameResolver]。
作用:将url地址中的资源路径和方法名称做一一对应
在MultiActionController中有一个成员变量
private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();
MethodNameResolver接口:
两大实现类:
①InternalPathMethodNameResolver---在请求地址中指定方法名称
②PropertyMethodNameResolver
第一种方案关键代码:[InternalPathMethodNameResolver]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/*.do">firstController</prop> </props> </property> </bean> <!-- 默认方法名称解析器--> <bean id="nameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean> <bean id="firstController" class="cn.happy.controller.MyMultiController"> <property name="methodNameResolver" ref="nameResolver"></property> </bean> |

第二种方案关键代码:[PropertyMethodNameResolver]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/*.do">firstController</prop> </props> </property> </bean> <!-- 方法名称解析器 --> <bean id="nameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/h1.do">list</prop> <prop key="/h2.do">add</prop> </props> </property> </bean> <bean id="firstController" class="cn.happy.controller.MyMultiController"> <property name="methodNameResolver" ref="nameResolver"></property> </bean> |
实现效果:


参数方法名称解析器 [ParameterMethodNameResolver]
关键代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.do">firstController</prop> </props> </property> </bean> <!-- 参数方法名称解析器 默认的是action--> <bean id="nameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName" value="actionName"></property> </bean> <bean id="firstController" class="cn.happy.controller.MyMultiController"> <property name="methodNameResolver" ref="nameResolver"></property> </bean> |

注:不指定paramName,默认是action


通过视图解析器引入外部或内部资源对象
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!-- 内部资源对象 --> <bean id="internal" class="org.springframework.web.servlet.view.JstlView"> <property name="url" value="/WEB-INF/jsp/index.jsp"></property> </bean> <!-- 外部资源对象 --> <bean id="jd" class="org.springframework.web.servlet.view.RedirectView"> <property name="url" value="http://www.jd.com"></property> </bean> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"></bean> <!-- 处理器配置 --> <bean id="/hello.do" class="cn.happy.controller.MyController"></bean> |

外部资源对象实现效果:跳转到京东首页


内部资源对象实现效果:

视图解析器——XmlViewResolver
分离配置信息

myView.xml

applicationContext.xml

内部资源:

外部资源:

深入理解Spring MVC的更多相关文章
- 理解Spring MVC Model Attribute和Session Attribute
作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...
- 深入理解Spring MVC(山东数漫江湖)
初始工程 使用Spring Boot和web,thymeleaf的starter来设置初始工程.xml配置如下: <parent> <groupId>org.springf ...
- 【译】理解Spring MVC Model Attribute 和 Session Attribute
作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...
- 深入理解Spring MVC 思想
目录 一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...
- 转载:深入理解Spring MVC 思想
原文作者:赵磊 原文地址:http://elf8848.iteye.com/blog/875830 目录 一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.sp ...
- (转载)spring mvc DispatcherServlet详解之一---处理请求深入解析
要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...
- spring mvc 基于注解的使用总结
本文转自http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sprin ...
- spring mvc 经典总结
概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...
- 使用 Spring 2.5 基于注解驱动的 Spring MVC
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/ 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sp ...
随机推荐
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- js复杂对象和简单对象的简单转化
var course = { teacher :{ teacherId:001, teacherName:"王" }, course : { courseId : 120, cou ...
- 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置
网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:ht ...
- redis 学习笔记(2)
redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...
- 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- 文件随机读写专用类——RandomAccessFile
RandomAccessFile类可以随机读取文件,但是在测试中并不好用;File类可以测试文件存不存在,不存在可以创建文件;FileWriter类可以对文件进行重写或者追加内容;FileReade ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- BPM配置故事之案例3-参与者与数据自动加载
这才过了两天,阿海又来了. 阿海:公司决定改进管理方式,以后物资申请的申请人和申请部门要写具体使用人的名字和部门了. 小明:不是要让我改回去吧? 阿海:那太麻烦了,你能不能把申请人改成选择,选好人自动 ...