简单深入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的更多相关文章

  1. 创建一个可用的简单的SpringMVC项目,图文并茂

    转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...

  2. 简单实现springmvc框架(servlet+自定义注解)

    个人水平比较菜,没有这么高的实力简单实现springmvc框架,我是看了一个老哥的博客,这老哥才是大神! 原文链接:https://www.cnblogs.com/xdp-gacl/p/4101727 ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. 一个简单的springmvc例子 入门(1)

    一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...

  5. 用Maven搭建简单的SpringMVC框架

    本文会详细阐述如何用Maven搭建一个简单的SpringMVC框架 这里就不介绍SpringMVC框架了,咱们直接来搭建 第一步 创建一个Maven的web项目  这里有一个简单的方法 new一个Ma ...

  6. 零配置简单搭建SpringMVC 项目

    SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...

  7. 搭建最简单的SpringMVC框架(使用maven)

    本文说明:本文介绍使用maven搭建SpringMVC最简单的框架程序过程,适合初学者上手. 下载链接 点此进入下载链接 1.创建一个maven webapp工程. 2.修改WEB-INF目录下的we ...

  8. 简单搭建SpringMVC框架详解

    在公司待了两年,用的一直是Spring+SpringMVC+Hibernate框架,都是公司自己搭建好的,自己从来没有主动搭建过,闲来无聊,自己搭建试试.一下即我搭建的过程以及搭建所遇到的问题,有部分 ...

  9. 简单说说SpringMVC

    距离上一次开发SpringMVC项目已经过去了大半年,有些细节已经开始遗忘,今天复习一下 先从标签说起: 和struts有各种配置文件不同,spring用标签开发. 1.@Controller在Spr ...

随机推荐

  1. 深入分析Spring 与 Spring MVC容器

    1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...

  2. CSS3 Notes: -webkit-box-reflect实现倒影

    平常我们要实现倒影的效果,一般的做法是使用多个DOM元素绝对定位+scale(负-1)或者rotate.这种方法的缺点是占据空间以及DOM元素过多. 在使用webkit内核的浏览器中(chrome,s ...

  3. mssql 字增自段怎样重置(重新自增)|清空表已有数据

    方法1 -- 清空已有数据,并且将自增自段恢复从1开始计数 truncate table 表名 方法2 -- 不清空已有数据,但将自增自段恢复从1开始计数 dbcc checkident(表名,RES ...

  4. spring boot(六):如何优雅的使用mybatis

    *:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ...

  5. CSS学习笔记——视觉格式化模型 visual formatting model

    CSS 视觉格式化模型(visual formatting model)是用来处理文档并将它显示在视觉媒体上的机制.他有一套既定的规则(也就是W3C规范),规定了浏览器该怎么处理每一个盒子.以下内容翻 ...

  6. visual formatting model (可视化格式模型)【持续修正】

    概念: visual formatting model,可视化格式模型 The CSS visual formatting model is an algorithm that processes a ...

  7. SSM项目搭建(提供源码)

    1创建web动态项目,项目结构截图 2.配置日志文件 #\u5B9A\u4E49LOG\u8F93\u51FA\u7EA7\u522B log4j.rootLogger=INFO,Console,Fi ...

  8. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

    前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...

  9. UEditor百度富文本编辑器--preview在线预览时头部被挡住的解决方案

    问题截图: 正常情况应该是如下显示: 解决方案: 1.打开ueditor/dialogs/preview/preview.html 2.找到body节点下面这一句 document.getElemen ...

  10. C# - 多线程 之 信号系统

    基础概览 多线程之信号系统命名空间 using System.Threading; 线程同步类的继承层次关系图 终止状态和非终止状态 在终止状态下,被WaitOne()阻塞的线程会逐个得到释放.如果一 ...