spring mvc 之MultiActionController和MethodNameResolver--附带实例

本文详细介绍了Spring MVC框架中的MultiActionController组件及其应用场景,包括如何通过不同配置实现请求到方法的映射,以及InternalPathMethodNameResolver和PropertiesMethodNameResolver的具体使用方法。

首发地址:http://inmethetiger.iteye.com/blog/1678785

MultiActionController身兼数值,主要处理一组逻辑上相似的web请求,比如针对一个对象的CRUD操作或者针对同一个对象或者多个对象的一组查询操作。我们可以将这些web请求交个MultiActionController来同意处理。

  主要功能:

  1:请求参数到Command对象的绑定。

  2:通过Validatator的数据验证

  3:细化的异常处理方法

  实例代码:


public class MyMultiActionController extends MultiActionController{        
	public Map list(HttpServletRequest request,HttpServletResponse response){        
		return new HashMap();    
		}        
	public ModelAndView delete(HttpServletRequest request,HttpServletResponse response){        
		return new ModelAndView();    
		}        
	public ModelAndView update(HttpServletRequest request,HttpServletResponse response){        
		return new ModelAndView();    
		}        ..

 MultiActionController知道具体的Web请求进来之后,将由MethodNameResolver处理。即:MethodNameResolver帮助MultiActionController决定当前web请求应该交给哪个方法来处理。


  1:InternalPathMethodNameResolver:

  如果没有为MultiActionController明确指定任何MethodNameResolver,InternalPathMethodNameResolver将做为默认的MethodNameResolver实现。(类似于HandlerMapping中的BeanNameUrlHandlerMapping)(下面有用InternalPathMethodNameResolver与BeanNameUrlHandlerMapping组合实现的例子

  处理方法:

    提取URL最后一个(/)之后的部分,并去掉扩展名,作为返回的方法名称

    /xxxx/admin/admincontroller/login.do。交给login方法。

  2:PropertisMethodNameResolver,和InternalPathMethodNameResolver类似,但是可以在配置文件中进行灵活配置来确定web请求到具体方法处理之间的映射。(类似于SimpleUrlHandlerMapping)(下面有用PropertisMethodNameResolver与SimpleUrlHandlerMapping组合实现的例子)。

------------------------------------------------------------------实例-----------------------------------------------------

 InternalPathMethodNameResolver与BeanNameUrlHandlerMapping组合实现的例子


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 MyMutilActionController extends MultiActionController {
	public ModelAndView listing(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("list");
		return mv;
	}

	public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("delete");
		return mv;
	}

	public ModelAndView update(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("update");
		return mv;
	}

	public ModelAndView insert(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("insert");
		return mv;
	}
}

 



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- HandlerMapping -->
	<!-- 帮助DispatchServlet进行web请求的url到具体处理类的匹配,默认为BeanNameUrlHandleMapping -->
	<bean id="handlerMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/listing.do">myMutioActionController</prop>
				<prop key="/delete.do">myMutioActionController</prop>
				<prop key="/update.do">myMutioActionController</prop>
				<prop key="/insert.do">myMutioActionController</prop>
			</props>
		</property>
	</bean>


	<!-- MethodNameResolver -->
	<!-- 解决MultiActionController决定web请求交给哪个方法 -->
	<!-- <bean id="propertiesMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"> 
		</bean> -->


	<!-- Controller -->
	<!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
	<!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
	<bean name="myMutioActionController" class="org.spring.controller.MyMutilActionController">
	</bean>



	<!-- ViewResover -->
	<!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->

	<bean id="defaultViewResover"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

 注意注释,在控制器中并没有指明MethodNameResolver,所以,Spring mvc自动使用InternalPathMethodNameResolver。所以,控制器中的方法名必须和映射名一致。


刚开始HandlerMapping想使用默认的,但是试了一下,可是可以,但是不实际。因为,BeanNameUrlHandlerMapping,需要控制器的name和web请求一致,这就需要将同一个

控制器,声明四次配置方法如下


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


	<!-- Controller -->
	<!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
	<!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
	<bean name="/listing.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/insert.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/delete.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/update.do" class="org.spring.controller.MyMutilActionController">
	</bean>


	<!-- ViewResover -->
	<!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->

	<bean id="defaultViewResover"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

 将InternalPathMethodNameResolver和BeanNameUrlHandlerMapping都已经省略。甚至可以将ViewResover都省略。只是这样的话,增删改查这四个jsp文件得放到WebContext下,而且控制器中返回的视图名称为xxx.jsp或者,jsp文件依然放在原来的位置,但是在控制器中将返回WEB-INF/view/xxx.jsp


-------------------------------------------------------------------------------------------------------------

PropertisMethodNameResolver+SimplUrlHandlerMapping+MultiActionController组合实现简单实例


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 MyMutilActionController extends MultiActionController {
	public ModelAndView listObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("list");
		return mv;
	}

	public ModelAndView deleteObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("delete");
		return mv;
	}

	public ModelAndView updateObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("update");
		return mv;
	}

	public ModelAndView insertObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("insert");
		return mv;
	}
}

 注意控制器中的方法,和上面的不同,因为 PropertiesMethodNameResolver更灵活,只需在配置文件中指定

dispatch-servlet.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


    <!-- HandlerMapping -->
    <!-- 帮助DispatchServlet进行web请求的url到具体处理类的匹配,默认为BeanNameUrlHandleMapping -->
    <bean id="handlerMapping"        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/listing.do">myMutioActionController</prop>
                <prop key="/update.do">myMutioActionController</prop>
                <prop key="/insert.do">myMutioActionController</prop>
                <prop key="/delete.do">myMutioActionController</prop>
            </props>
        </property>
    </bean>


    <!-- MethodNameResolver -->
    <!-- 解决MultiActionController决定web请求交给哪个方法 -->
    <bean id="propertiesMethodNameResolver"        class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
        <property name="mappings">
            <props>
                <prop key="/listing.do">listObject</prop>
                <prop key="/update.do">updateObject</prop>
                <prop key="/insert.do">insertObject</prop>
                <prop key="/delete.do">deleteObject</prop>
            </props>
        </property>
    </bean>

    <!-- Controller -->
    <!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
    <!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
    <bean name="myMutioActionController" class="org.spring.controller.MyMutilActionController">
        <property name="methodNameResolver" ref="propertiesMethodNameResolver"></property>
    </bean>



    <!-- ViewResover -->
    <!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->
    <bean id="defaultViewResover"        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean></beans>

 

 

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值