一、如何让一个普通类成为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>

  

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


内部资源对象实现效果:

又见SpringMVC的更多相关文章

  1. SpringMVC总结的部分教程及使用方法

    注:本文只用注解来实现 SpringMVC各种流程图流程图(其他的各种流程图)jsp.xml.action彼此之间的关系,都如何使用spring-mvc.xml如何配置,放在哪里?action中如何转 ...

  2. SpringMVC源码情操陶冶-InterceptorsBeanDefinitionParser拦截器解析器

    解析mvc:interceptors节点 观察下InterceptorsBeanDefinitionParser的源码备注 /** * {@link org.springframework.beans ...

  3. SpringMVC源码阅读:Controller中参数解析

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  4. form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。

    1,html脚本 <body> <div style="display: none;"> <form id="submitForm" ...

  5. JavaWeb基础——JSON

    一.JSON是什么? JSON(JavaScript Object Notation).轻量级数据交换格式. JSON的后缀名:.json JSON的MINE类型:application/json 二 ...

  6. SpringMvc支持Ajax概述【见前两篇随笔--详述前后数据互通】

    1.原生javaWeb:不再用 1).导入GSON: 2).返回的数据用GSON转成json 3).写出去: 2.SpringMVC快速的完成ajax功能? 导包 jackson-annotation ...

  7. 这个SpringMVC的一直刷屏的问题你见过吗?无解

    严重: Servlet.service() for servlet DispatcherServlet threw exceptionjava.lang.StackOverflowError at o ...

  8. SpringMVC注解汇总(一)-定义

    本文根据开涛哥学习SpringMVC汇总而成,方便更好查阅! 网址:http://jinnianshilongnian.iteye.com/blog/1752171 注解式控制器简介 @Control ...

  9. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

随机推荐

  1. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. geotrellis使用(二十六)实现海量空间数据的搜索处理查看

    目录 前言 前台实现 后台实现 总结 一.前言        看到这个题目有人肯定会说这有什么可写的,最简单的我只要用文件系统一个个查找.打开就可以实现,再高级一点我可以提取出所有数据的元数据,做个元 ...

  3. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  4. QT 删除文件指定目录

    bool deleteDir(const QString &dirName) { QDir directory(dirName); if (!directory.exists()) { ret ...

  5. 『.NET Core CLI工具文档』(九)dotnet-run

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-run 翻译:dotnet-run 名称 dotnet-run -- 没有任何明确的编译或启动命令运行&q ...

  6. PDF编辑神器

    转自网络 http://files.cnblogs.com/files/quejuwen/pdfeditportable.zip

  7. Entity Framework 数据库初始化的三种方法

    在数据库初始化产生时进行控制,有三个方法可以控制数据库初始化时的行为.分别为CreateDatabaseIfNotExists.DropCreateDatabaseIfModelChanges.Dro ...

  8. 决策树ID3算法的java实现(基本试用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  9. python推荐淘宝物美价廉商品

    完成的目标: 输入搜索的商品 以及 淘宝的已评价数目.店铺的商品描述(包括如实描述.服务态度.快递的5.0打分): 按要求,晒选出要求数量的结果,并按"物美价廉算法"排序后输出 思 ...

  10. CSS3 @font-face的使用

    首先我们一起来看看@font-face的语法规则: @font-face { font-family: <YourWebFontName>; src: <source> [&l ...