1.Handler
实现Handler第二种和第三种
1.1 继承AbstractController
优点:能定制请求方式

  1. package cn.happyl.controller;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.AbstractController;
  8. import org.springframework.web.servlet.mvc.Controller;
  9. import org.springframework.web.servlet.support.WebContentGenerator;
  10.  
  11. public class MyAbstract extends AbstractController {
  12. @Override
  13. protected ModelAndView handleRequestInternal(HttpServletRequest request,
  14. HttpServletResponse response) throws Exception {
  15. ModelAndView mv =new ModelAndView();
  16. mv.setViewName("index");
  17. mv.addObject("msg","今天学习spring mvc");
  18. return mv;
  19. }
  20. }

application.xml

  1. <bean id="first" class="cn.happyl.controller.MyAbstract">
  2. <property name="supportedMethods" value="POST,GET"></property>
  3.  
  4. </bean>
  5.  

<!--试图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">first</prop>
</props>
</property>
</bean>

1.2 继承MultiActionController
优点:可以在一个Controller中有N个方法

  1. package cn.happyl.controller;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
  8.  
  9. public class MyMultiAction extends MultiActionController {
  10. public ModelAndView doFirst(HttpServletRequest request,HttpServletResponse response){
  11. ModelAndView mv =new ModelAndView();
  12. mv.setViewName("index");
  13. mv.addObject("msg", "执行第一个方法");
  14. return mv;
  15. }
  16. public ModelAndView doSecond(HttpServletRequest request,HttpServletResponse response){
  17. ModelAndView mv =new ModelAndView();
  18. mv.setViewName("index");
  19. mv.addObject("msg", "执行第二个方法");
  20. return mv;
  21. }
  22.  
  23. }

application.xml

方法一:ParameterMethodNameResolver

  1. <bean id="first" class="cn.happyl.controller.MyMultiAction">
  2. <property name="methodNameResolver" ref="methodNameResolver"></property>
  3. </bean>
  4.  
  5. <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  6.   
    <property name="paramName" value="actionname"></property>
  7.  
  8. </bean>

可以访问:

http://localhost:8080/01-springmvc-base/hello.do?actionname=doSecond

http://localhost:8080/01-springmvc-base/hello.do?actionname=doFirst

如果不配置

  1. <property name="paramName" value="actionname"></property>
    默认value为action

  1.  

在访问多方法时:默认为InternalPathMethodNameResolver(属于AbstractUrlMethodNameResolver)

访问时:http://localhost:8080/01-springmvc-base/doSecond.do

直接写方法名.do即可


  1. 方法二:propertiesmethodnameresolver 用法如下:
    applicationContext.xml中配置

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <props>
      <prop key="/*.do">first</prop>
    </props>
  </property>  
</bean>

  1.  
  2. <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
  3. <property name="mappings">
  4. <props>
  5. <prop key="/first.do">doFirst</prop>
  6. <prop key="/second.do">doSecond</prop>
  7. </props>
  8. </property>
  9. </bean>
  1. 可以再浏览器的get请求中写:http://localhost:8080/01-springmvc-base/first.do
  2.  
  3. 试图解析器

<!--试图解析器 2 jstlview 内部资源-->
<bean id="internalResource" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/index.jsp"></property>
</bean>

<!--redirectView外部资源-->
<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"/>

  1. 测试类如下:
  1. package cn.happyl.controller;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
  8.  
  9. public class BookController extends MultiActionController {
  10.  
  11. public ModelAndView list(HttpServletRequest request,HttpServletResponse response){
  12. ModelAndView mv =new ModelAndView();
  13. mv.addObject("msg","我是谁?");
  14. //这里制定需要访问的资源的id,可以是内部资源也可以是外部资源
  15. mv.setViewName("jd");
  16. return mv;
  17. }
  18.  
  19. }
  1.  

Handler(二)的更多相关文章

  1. Python框架之Tornado(二)请求阶段

    概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) ...

  2. Android进阶——Android消息机制之Looper、Handler、MessageQueen

    Android消息机制可以说是我们Android工程师面试题中的必考题,弄懂它的原理是我们避不开的任务,所以长痛不如短痛,花点时间干掉他,废话不多说,开车啦 在安卓开发中,常常会遇到获取数据后更新UI ...

  3. 第二篇:白话tornado源码之待请求阶段

    上篇<白话tornado源码之一个脚本引发的血案>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是torna ...

  4. ASP.Net Core Razor+AdminLTE 小试牛刀

    AdminLTE 一个基于 bootstrap 的轻量级后台模板,这个前端界面个人感觉很清爽,对于一个大后端的我来说,可以减少较多的时间去承担前端的工作但又必须去独立去完成一个后台系统开发的任务,并且 ...

  5. android消息处理源码分析

    一.简介消息处理机制主要涉及到这几个类:1.Looper2.MessageQueue3.Message4.Handler 二.源码分析 Looper.class的关键源码: //保存Looper对象, ...

  6. 利用Android-FingerprintManager类实现指纹识别

    安卓指纹识别 利用FingerprintManager主类进行指纹识别. Github项目地址 在安卓6.0中新增了API,FingerprintManager类,它是Google提供的帮助访问指纹硬 ...

  7. 跨浏览器的javascript事件的封装

    一,跨浏览器的事件处理程序 1,DOM0级处理事件 将一个函数赋值给一个事件处理程序属性. 事件流:冒泡阶段. 使用: 为元素增加事件: var btn = document.getElementBy ...

  8. Android定时执行和停止某任务

    一.定义全局变量 int runCount = 0;// 全局变量,用于判断是否是第一次执行 Handler handlerCount = new Handler(); 二.创建Runnable Ru ...

  9. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

随机推荐

  1. .NET Core采用的全新配置系统[2]: 配置模型设计详解

    在<.NET Core采用的全新配置系统[1]: 读取配置数据>中,我们通过实例的方式演示了几种典型的配置读取方式,其主要目的在于使读者朋友们从编程的角度对.NET Core的这个全新的配 ...

  2. 计算机程序的思维逻辑 (38) - 剖析ArrayList

    从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有数据结构的内容,但会介绍Java中的主要 ...

  3. c 小工具的使用

    1. 这是一个gps 数据过滤的小工具,目的是过滤到gps数据中不符合要求的数据,然后转为json 数据 需要两个小工具 bermuda.c   ------>  过滤一定范围的数据 geo2j ...

  4. Git同步原始仓库到Fork仓库中

    前言 本文介绍的是Git同步原始仓库到Fork仓库示例教程,废话不多说,下面直接到实操部分. 这里以aspnetcore-doc-cn的github仓库为例,同步dev分支. 步骤 1.初始化本地仓库 ...

  5. .NET 实现并行的几种方式(一)

    好久没有更新了,今天来一篇,算是<同步与异步>系列的开篇吧,加油,坚持下去(PS:越来越懒了). 一.Thread 利用Thread 可以直接创建和控制线程,在我的认知里它是最古老的技术了 ...

  6. 初学DDD-领域驱动设计

    这几天刚开始学习DDD,看了几篇大神的文章,现在只是知道了几个名词,还没有详细的学习.结合自己的工作经历,说说自己的看法,请各位大神多多指点. 最开始用的比较多的是以数据库表建立模型驱动开发.后来发现 ...

  7. 【转】MVC、MVP与MVT

    MVC是Model-View-Control的缩写,Model指的是数据层,View指的是UI层,Control指的是控制层,这三层之间彼此联系.View层的用户行为,触发Control层,Contr ...

  8. Java泛型

    什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...

  9. Eclipse "Unable to install breakpoint due to missing line number attributes..."

    Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...

  10. 如何围绕企业战略,建设BI驾驶舱?

    随着企业的逐步发展,人员的增加.业态的复杂不仅对管理也对信息化的要求越来越高,甚至需要从战略角度出发,进行从上至下的全面推行. 关于这个话题,某公司深有体会.面对这样的瓶颈,一方面从优化信息架构.调整 ...