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






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

其次该如何去匹配这些方法?在这里引出一个方法名称解析器[MethodNameResolver]。
作用:将url地址中的资源路径和方法名称做一一对应
在MultiActionController中有一个成员变量
private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();
MethodNameResolver接口:
两大实现类:
①InternalPathMethodNameResolver---在请求地址中指定方法名称
②PropertyMethodNameResolver
第一种方案关键代码:[InternalPathMethodNameResolver]

<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]

<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]
关键代码:

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


四、通过视图解析器引入外部或内部资源对象

<!-- 内部资源对象 --> <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>




简单深入SpringMvc的更多相关文章
- 创建一个可用的简单的SpringMVC项目,图文并茂
转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...
- 简单实现springmvc框架(servlet+自定义注解)
个人水平比较菜,没有这么高的实力简单实现springmvc框架,我是看了一个老哥的博客,这老哥才是大神! 原文链接:https://www.cnblogs.com/xdp-gacl/p/4101727 ...
- springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...
- 一个简单的springmvc例子 入门(1)
一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...
- 用Maven搭建简单的SpringMVC框架
本文会详细阐述如何用Maven搭建一个简单的SpringMVC框架 这里就不介绍SpringMVC框架了,咱们直接来搭建 第一步 创建一个Maven的web项目 这里有一个简单的方法 new一个Ma ...
- 零配置简单搭建SpringMVC 项目
SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...
- 搭建最简单的SpringMVC框架(使用maven)
本文说明:本文介绍使用maven搭建SpringMVC最简单的框架程序过程,适合初学者上手. 下载链接 点此进入下载链接 1.创建一个maven webapp工程. 2.修改WEB-INF目录下的we ...
- 简单搭建SpringMVC框架详解
在公司待了两年,用的一直是Spring+SpringMVC+Hibernate框架,都是公司自己搭建好的,自己从来没有主动搭建过,闲来无聊,自己搭建试试.一下即我搭建的过程以及搭建所遇到的问题,有部分 ...
- 简单说说SpringMVC
距离上一次开发SpringMVC项目已经过去了大半年,有些细节已经开始遗忘,今天复习一下 先从标签说起: 和struts有各种配置文件不同,spring用标签开发. 1.@Controller在Spr ...
随机推荐
- Node.js:console模块
console模块提供了一个简单的调试功能,类似与web浏览器的javscript console. 下面简单介绍下该模块的使用以及用途,我使用了ES6的模版字符串(使用反引号标识),有兴趣的可以去了 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- ASP.NET Core 中文文档 第三章 原理(17)为你的服务器选择合适版本的.NET框架
原文:Choosing the Right .NET For You on the Server 作者:Daniel Roth 翻译:王健 校对:谢炀(Kiler).何镇汐.许登洋(Seay).孟帅洋 ...
- Java正则速成秘籍(三)之见招拆招篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- .NET 开源SqlServer ORM框架 SqlSugar 3.0 API
3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...
- Quartz.net 开源job调度框架(二)----定点执行
在上一篇 Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...
- https连接的前几毫秒发生了什么
在讨论这个话题之前,先提几个问题: 为什么说https是安全的,安全在哪里? https是使用了证书保证它的安全的么? 为什么证书需要购买? 我们先来看https要解决什么问题 (手机读者推荐移步ht ...
- MVC5发送邮件注册
#region 发送邮件 //填写电子邮件地址,和显示名称 System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(&qu ...
- c3p0连接数据库的3种方式
c3p0连接数据库的3种方式,这里以mysql为例 1. 直接用set方法设置参数, 基本方法 ComboPooledDataSource dataSource = new ComboPooledDa ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...