写的一个多方法映射多请求的控制器,可以配置一个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;
}
}
分享到:
相关推荐
随着Java配置的引入,Spring MVC提供了更灵活的方式来映射请求。这可以通过`@Configuration`和`@EnableWebMvc`注解以及`@Controller`和`@RequestMapping`的组合实现。例如: ```java @Configuration @EnableWebMvc ...
在同一个方法上可以使用多个`@RequestMapping`,这样可以同时处理多个不同的URL请求。例如: ```java @RequestMapping(value = {"/get/{id}", "/getById"}, method = RequestMethod.GET) public User getUser(@...
- `HandlerMapping`:处理器映射器,映射请求到相应的Controller。 - `HandlerAdapter`:处理器适配器,调用不同类型的Controller。 - `ViewResolver`:视图解析器,解析出视图对象。 - `Controller`:后端控制...
对于那些希望在不公开内部网络结构的情况下分享内容或服务的人来说,端口映射器是一个必不可少的工具。总的来说,这款“简单好用的端口映射器”为用户提供了便捷的解决方案,帮助他们轻松管理和控制网络上的端口映射...
在Java Web开发中,SpringMVC是一个非常流行的框架,它为构建基于模型-视图-控制器(MVC)模式的应用程序提供了强大的支持。本实例代码着重讲解了SpringMVC中的四种映射方式以及拦截器的实现,这对于理解和掌握...
- **优化资源利用**:创建多个Servlet会消耗更多的系统资源,通过一个总控制器,可以集中处理请求,降低资源开销。 - **增强可扩展性**:新的请求处理逻辑可以通过添加新的类来实现,而不必更改现有配置,使得系统...
对于需要远程工作、游戏服务器托管或者希望分享内网资源的用户来说,内网映射器是一个非常实用的解决方案。而通过详细的学习和正确使用,用户可以更好地理解和掌握这一技术,提升网络通信的效率和安全性。
TCP端口映射是网络通信中的一个重要概念,它允许一台机器上的多个服务通过不同的端口号对外提供服务。在本文中,我们将深入探讨TCP端口映射的原理、用途以及如何使用小巧的TCP端口映射器程序进行端口映射。 首先,...
下面将详细阐述端口映射的基本概念、端口映射器的使用方法以及它在实际应用中的重要作用。 一、端口映射基本概念 在计算机网络中,端口是一个用于标识网络服务的逻辑接口,每个端口号与特定的协议和服务相关联。TCP...
例如,我们可以使用@Controller注解标记一个类作为控制器,然后使用@RequestMapping注解来映射HTTP请求。模仿这个机制,我们需要创建类似的注解,并实现解析这些注解的功能。 2. **请求映射**:@RequestMapping注解...
每个路由都会映射到一个控制器类的一个方法。 Laravel还提供了一个灵活的路由系统,它允许你为路由指定前缀、命名空间等。命名空间通常用于将相关的控制器组织在一起,比如放在`App\Http\Controllers`下。 要获取...
首先,`@RequestMapping`的基本用法是通过指定一个或多个请求路径来映射控制器方法。例如: ```java @Controller public class MyController { @RequestMapping("/hello") public String handleHello() { return...
本文实例讲述了ASP.NET在MVC控制器中获取Form表单值的方法。分享给大家供大家参考,具体如下: 在MVC控制器中,如果我们想直接获取表单中某个标签元素的值,可以使用MVC中提供的FormCollection类,具体用法如下所示...
例如,创建一个名为`Index`的控制器,用于处理网站的首页展示,我们可以定义一个`index`方法: ```php namespace app\controller; use think\Controller; class Index extends Controller { public function ...
端口映射是一种网络技术,它允许用户将一个或多个外部网络端口的连接重定向到内部网络中的特定设备或服务。这种技术在各种场景下非常有用,例如在XP操作系统上发布服务,或者跨越不同网段进行服务的访问。本文将深入...
Struts2是一个流行的Java web框架,它以MVC(模型-视图-控制器)架构为基础,简化了开发过程。在Struts2中,控制器扮演着关键角色,负责处理用户请求并协调模型和视图。本篇文章将深入讲解Struts2控制器的核心——`...
在Spring框架中,多方法控制器是用于处理HTTP请求的核心组件,它允许我们将不同的HTTP请求映射到控制器类的不同方法上,从而实现灵活的功能划分。在这个例子中,我们将探讨如何使用Spring MVC来实现数据查询和删除...
每个控制器类对应一个URL操作,可以包含多个方法,每个方法对应一个具体的HTTP请求。 三、控制器的创建与使用 1. 创建控制器:在`controller`目录下创建新的PHP文件,例如`IndexController.php`,定义一个名为`...
标题中的“端口映射器”是一个网络技术概念,它涉及到网络通信和服务器管理。端口映射,也称为端口转发,是将一个网络接口(公网或内网)的某个端口上的数据流重定向到另一个不同网络接口的特定端口上。这在很多场景...
在NAT环境下,内网设备只能通过路由器的一个公共IP地址与外部网络通信,而这个公共IP通常对应多个内部私有IP。当内网设备尝试连接外部服务时,NAT会自动建立一条规则,将特定的私有IP和端口映射到公共IP的特定端口上...