Handler(二)

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

package cn.happyl.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.support.WebContentGenerator;

public class MyAbstract extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ModelAndView mv =new ModelAndView();
        mv.setViewName("index");
        mv.addObject("msg","今天学习spring mvc");
        return mv;
    }
}

application.xml

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

        </bean>

<!--试图解析器 -->
<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个方法

package cn.happyl.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class MyMultiAction extends MultiActionController {
    public ModelAndView doFirst(HttpServletRequest request,HttpServletResponse response){
        ModelAndView mv =new ModelAndView();
        mv.setViewName("index");
        mv.addObject("msg", "执行第一个方法");
        return mv;
    }
    public ModelAndView doSecond(HttpServletRequest request,HttpServletResponse response){
        ModelAndView mv =new ModelAndView();
        mv.setViewName("index");
        mv.addObject("msg", "执行第二个方法");
        return mv;
    }

}

application.xml

方法一:ParameterMethodNameResolver

 <bean id="first" class="cn.happyl.controller.MyMultiAction">
            <property name="methodNameResolver" ref="methodNameResolver"></property>
        </bean>

   <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
             <property name="paramName" value="actionname"></property>

       </bean>

可以访问:

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

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

如果不配置

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


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

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

直接写方法名.do即可

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

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


<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
               <property name="mappings">
                   <props>
                       <prop key="/first.do">doFirst</prop>
                       <prop key="/second.do">doSecond</prop>
                   </props>
               </property>
</bean>
可以再浏览器的get请求中写:http://localhost:8080/01-springmvc-base/first.do

试图解析器

<!--试图解析器 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"/>

测试类如下:
package cn.happyl.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class BookController extends MultiActionController {

    public ModelAndView list(HttpServletRequest request,HttpServletResponse response){
        ModelAndView mv =new ModelAndView();
        mv.addObject("msg","我是谁?");
        //这里制定需要访问的资源的id,可以是内部资源也可以是外部资源
        mv.setViewName("jd");
        return mv;
    }

}
				
时间: 2024-08-09 06:33:07

Handler(二)的相关文章

什么是Handler(二)

1. 如何下载Android源代码 2. ThreadLocal初步介绍 3. Handler相关代码执行流程 1. 如何下载Android源代码 SDK Manager下载, 下图所示 下载完之后在文件夹 2. ThreadLocal初步介绍 线程本地变量 代码回顾 Looper.Thread.Handler一一对应, 一个Looper存在于一个Thread中 3. Handler相关代码执行流程

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

概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,从而让XXRequestHandler来处理指定url发送的请求):第二步,创建服务器socket对象并添加到epoll中:第三步,创建无线循环去监听epoll. 2.在

深入理解Handler

Android开发人员对Handler,应该都很熟悉了,我们经常使用它的一个场景是当一些比较昂贵的耗时任务完成后,使用Handler通知到UI线程刷新UI,下面是代码 1: Thread taskThread = new Thread(new Runnable() { 2: 3: @Override 4: public void run() { 5: //do some expensive tasks. 6: downloadFile(); 7: mHandler.sendMessage(new

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

上篇<白话tornado源码之一个脚本引发的血案>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启 动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,

《javascript设计模式与开发实践》读书笔记(一)

一.高阶函数 1.函数作为参数传递 最经典的例子就是毁掉函数 var fs = require('fs'); fs.readFile('test.txt',function(data,err){ console.log(data); }); 2.函数作为返回值 作为返回值时候,要注意此时的this指向. 3.函数柯里化 函数柯里化指首先接受一些参数,接受到的参数后不立即执行,而是返回一个新函数,刚才传入的参数在函数形成的闭包中被保存起来,待到真正求值的时候刚才保存的参数才会真正的求值. var

使用spring构建基础框架的基础API

一.获取对象类名 Class<?> handlerClass = ClassUtils.getUserClass(handler); 二.查询一个方法上是否有某注解 RequestMapping mapping = AnnotationUtils.findAnnotation(method, RequestMapping.class); 三.  获取实现某一接口的类 BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerM

我也来说说js的事件机制

原文链接:http://www.w3cfuns.com/notes/17398/8062de2558ef495ce6cb7679f940ae5c.html 学js,不懂事件机制,基本可以说学了js,就是白学.本人看了很多js相关书籍,评价一本说讲得好不好,我主要看两块儿,一块儿是js面向对象讲得怎么样,另一块儿就是这个事件机制这块儿.面向对象按下不表,这里就详细说说事件机制.事件这个东西可以说js中核心之一.为啥如此重要,因为js是一门事件驱动的语言. 说说本文的结构.(真的好长,又不想写成一个

第二篇:Python高性能Web框架tornado源码剖析之待请求阶段

上篇<第一篇:Python高性能Web框架Tornado原理剖析>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestH

Android笔记二十五.Android事件Handler消息传递机制

因为Android平台不同意Activity新启动的线程訪问该Activity里的界面控件.这样就会导致新启动的线程无法动态改变界面控件的属性值.但在实际Android应用开发中,尤其是涉及动画的游戏开发中,须要让新启动的线程周期性地改变界面控件的属性值,这就须要借助Handler的消息传递机制实现. 一.Handler类简单介绍 1.功能 Handler类主要有两个作用 (1)在新启动的线程中发送消息; (2)在主线程中获取消息.处理消息.即当须要界面发生变化的时候.在子线程中调用Handle