`
womendu
  • 浏览: 1490295 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[分享]一个多方法映射多请求的控制器

阅读更多
写的一个多方法映射多请求的控制器,可以配置一个Controller的Bean。然后做请求-->方法的映射,并且将参数反射进配置的FormBean中。

有兴趣的朋友可以试试看,比自带的Controller要上手的多。起码配的少了,看的清楚了,呵呵。

类代码
---------------------------------
(Controller)
package org.rock.framework.controller;

import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.rock.framework.operation.Action;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver;

/**
* 描述: 多方法处理Controller

*
* @author rockmanliu
* @version ver 1.0.0.0
*/
public class MultiMethodController extends MultiActionController implements InitializingBean
{
protected Logger log = Logger.getLogger(MultiMethodController.class);

/**
* 描述: 实现了具体得配置方法

*
* @throws Exception
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception
{
if (null == urlMethodmappings || urlMethodmappings.isEmpty())
{
logger.debug("URL方法分配为NULL");
}
else
{
methodNameResoler = new PropertiesMethodNameResolver();
methodNameResoler.setMappings(urlMethodmappings);
this.setMethodNameResolver(methodNameResoler);

}
}

/* ---------------- SETER & GETER ---------------- */

// ---------------- 属性 ---------------- //
private Properties urlMethodmappings;

private PropertiesMethodNameResolver methodNameResoler;

// ---------------- 方法 ---------------- //
public void setUrlMethodmappings(Properties urlMethodmappings)
{
this.urlMethodmappings = urlMethodmappings;
}

public Properties getUrlMethodmappings()
{
return urlMethodmappings;
}

protected Map map = null;

protected Action action = null;

public void setAction(Action action)
{
this.action = action;
}

public void setMap(Map map)
{
this.map = map;
}

}

(MultiMethodControllerUrlHandlerMapping)

package org.rock.framework.controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.core.OrderComparator;
import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;

/**
* 描述: 多方法请求映射处理类

*
* @author Rockmanliu
* @version ver 1.0.0.0
*/
public class MultiMethodControllerUrlHandlerMapping extends AbstractUrlHandlerMapping
{
private Map urlMap = new HashMap();

/**
* 映射URL 到 Controller 的bean 名称 这是一个配置HandMapping的典型的方式.

* 支持直接URL匹配和"ant风格"模式的匹配 详细的语法,参见AntPathMatcher类
*
* @param mappings
*URL作为键,而bean 名称作为键值的Properties
* @see org.springframework.util.AntPathMatcher
*/
@SuppressWarnings("unchecked")
public void setMappings(Properties mappings)
{
this.urlMap.putAll(mappings);
}

/**
* @return Returns the urlMap.
*/
public Map getUrlMap()
{
return urlMap;
}

/**
* @param urlMap
*The urlMap to set.
*/
public void setUrlMap(Map urlMap)
{
this.urlMap = urlMap;
}

public void initApplicationContext() throws BeansException
{
initialUrlMap();
registerUrlMap();
}

public void registerUrlMap() throws BeansException
{
if (this.urlMap.isEmpty())
{
logger.info("Neither 'urlMap' nor 'mappings' set on SimpleUrlHandlerMapping");
}
else
{
Iterator itr = this.urlMap.keySet().iterator();
while (itr.hasNext())
{
String url = (String) itr.next();
Object handler = this.urlMap.get(url);
// prepend with slash if it's not present
if (!url.startsWith("/"))
{
url = "/" + url;
}
registerHandler(url, handler);
}
}

}

@SuppressWarnings("unchecked")
public void initialUrlMap() throws BeansException
{

Map matchingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(getWebApplicationContext(), MultiMethodController.class, true, false);
List controllers = new ArrayList();

if (!matchingBeans.isEmpty())
{
ArrayList arrayList = new ArrayList(matchingBeans.values());
controllers = arrayList;
Collections.sort(controllers, new OrderComparator());
for (int i = 0; controllers != null && i {
MultiMethodController controller = (MultiMethodController) controllers.get(i);
Properties urlPros = controller.getUrlMethodmappings();
Iterator itr = urlPros.keySet().iterator();
for (; itr.hasNext();)
{
String url = (String) itr.next();
urlMap.put(url, controller);
}
}
}

}

}

XML配置
---------------------------------------
<!-- 多方法控制器 -->
<bean id="test.multiMethodController" class="com.rock.test.MDemoController"><br><property name="urlMethodmappings"><br><props><br><prop key="/list.htm">list</prop><br><prop key="/view.htm">view</prop><br><prop key="/save.htm">save</prop><br><prop key="/delete.htm">remove</prop><br></props><br></property><br></bean>

实现
---------------------------------------
只需要继承上面的Controller然后配置一下,即可,超简单

下面这个例子没有具体的实现,需要的自己实现。和普通的Controller一样一样的。

package com.rock.test;

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

import org.rock.framework.controller.MultiMethodController;
import org.springframework.web.servlet.ModelAndView;

/**
* 描述: 多方法控制器演示类

*
* @author Rockmanliu
* @version ver 1.0.0.0
*/
public class MDemoController extends MultiMethodController
{

public ModelAndView view(HttpServletRequest request, HttpServletResponse response)
{
return null;
}

public ModelAndView save(HttpServletRequest request, HttpServletResponse response, MyBean bean)
{
return null;
}

public ModelAndView remove(HttpServletRequest request, HttpServletResponse response)
{
return null;
}

public ModelAndView list(HttpServletRequest request, HttpServletResponse response, MyBean bean)
{
return null;
}
}


分享到:
评论

相关推荐

    Asp.Net Core控制器如何接收原始请求正文内容详解

    本文将给大家详细介绍关于Asp.Net Core控制器接收原始请求正文内容的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 简单案例 为了演示这个问题,我们用VS2017创建一个默认的Asp.net ...

    STM32系列ARM Cortex-M3微控制器原理与实践_清晰版

    5.2.2在EWARM中生成一个新项目 5.2.3编译和链接应用程序 5.2.4用J-LINK调试应用程序 5.3STM32-SK仿真评估板 5.3.1评估板规格说明 5.3.2测试程序 5.3.3关于仿真评估板的几个问题 5.4STM32-DK开发板 5.4.1开发板规格...

    论文研究-基于节点可靠度的虚拟SDN映射算法.pdf

    在初始可靠映射阶段,该算法根据节点可靠度指标进行vSDN映射,部署控制器时兼顾了控制器与交换机的时延,同时考虑控制网络的重要性,为控制网络构建相应的备份资源;在故障恢复阶段,针对物理SDN单节点或单链路故障...

    简单的SSM.txt

    2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller 3. DispatcherServlet将请求提交到Controller 4. Controller调用业务逻辑处理后,返回ModelAndView 5. ...

    java-servlet-api.doc

    然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...

    端口映射器(Portmap)

    请到NT服务控制器执行! 5、9x下直接运行 请在命令行下键入: Portmapsvc -run 即可. 4、Portmap.ini说明 Enable=1 ;; 1代表启用这个数据转发器, 0则相反 InnerIP=192.168.1.198 ;; B机器的IP...

    拦截器和控制器的区别

    3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 ...

    SpringMVC面试题

    SpringMVC的流程是:用户发送请求至前端控制器DispatcherServlet,DispatcherServlet收到请求调用HandlerMapping处理器映射器,处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及...

    sprigmvc图文总结

    2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。 3、找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。 HANDLEREXECUTIONCHAIN,即处理处理...

    Java Spring MVC面试题

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间...

    dbVisitor是一个ORM工具,提供对象映射,比Mybatis更丰富的类型处理,动态SQL ,存储过程

    它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...

    使用Spring MVC构建Web应用程序1

    DispatcherServlet需要咨询一个或多个处理器映射来明确地将请求分发给哪个控制器。Spring提供了多个处理器映射,包括: * BeanNameUrlHandlerMapping:根据控制器Bean的名字将控制器映射到URL。 * ...

    SSS框架详解

    本文将对 SSS 框架进行详细的解释,包括其框架结构、配置文件、ActionServlet 控制器、请求映射、ActionForm 对象封装、表单项验证等。 框架结构 SSS 框架的结构主要由以下几个部分组成: 1. ActionServlet 控制...

    PHP实现路由映射到指定控制器

    自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本  SimpleLoader.php &lt;?...class SimpleLoader{ public static function run($rules=array()){ ... public static function loadC

    SpringMVC与struts的区别

    AnnotationMethodHandlerAdapter通过注解将一个URL映射到Controller的方法上。 Controller接口是SpringMVC中的一种控制器机制。Controller接口负责处理用户的请求,并将其映射到对应的视图中。我们可以使用@...

    架构师面试题系列之Spring MVC面试专题及答案(31题).docx

    (3)清晰的角色分配: 前端控制器(dispatcherServlet), 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4)支持各种请求资源的映射策略。 3. SpringMVC ...

    跟我学SpringMVC 教程

    第六章 注解式控制器详解 SpringMVC3强大的请求映射规则详解 第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者请求限定 第六章 注解式控制器详解 SpringMVC强大的数据绑定(1) 第六章 注解式控制器...

    使用STM32F2和STM32F4 DMA控制器

    本应用笔记对如何使用STM32F2xx 和STM32F4xx 系列直接存储器访问控制器(DMA)进行了说明。STM32F2xx/F4xx DMA 控制器所具有的系统架构、多层总线矩阵和存储系统等,使其能够为应用提供很高的数据带宽,让用户可以...

    spring mvc 思维导图

    Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。...

    让CAS支持客户端自定义登陆页面——服务器篇[参考].pdf

    其次,需要在cas-servlet.xml文件中增加对/remoteLogin映射的处理,并添加一个新的控制器来处理remote登陆请求。 在实现客户端自定义登陆页面时,需要遵守三个基本原则:不影响原有统一登陆界面功能、客户端应尽量...

Global site tag (gtag.js) - Google Analytics