您的位置:首页 > 编程语言 > Java开发

Spring MVC 实现一个控制器写多个方法

2013-04-26 18:39 381 查看

Spring MVC 控制器

在之前的开发与看框架的时候,误认为一个动作一定要一个控制器来与之对应,这使得我对Spring MVC 没有很好的印象,用起来就感觉和以前的最原始的servlet 开发是一个模子,像我这么个偷懒的人,怎么用这兴趣去每个都要相应的写与开发呢?于是产生了以下疑问。

Spring这么好的一个框架为何不能支持像struts2.x一样,通过一个配置文件,一个类,可以写很多个不同的方法,访问的时候以带参数的形式来区分到底调用哪一个业务方法来处理我们相关的请求。在经过半天的查找资料以及同事的提醒,总算知道了Spring MVC中一个类写多个方法,完完全全的实现了像struts2.x 那么方便而又犀利的方法。主要是通过以下两种方式可以实现。与struts2.x有过而无不及啊。

1.还是继承老思想,实现控制器方法。在这里,我们只要继承了SpringMVCMultiActionController 便可以在里面写我们想要的方法了,写好之后,在配置文件里面需要让他依赖于这个ParameterMethodNameResolver 。

<bean id="paramMethodResolver"class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">

<property name="paramName"><value>method</value></property>

</bean>

依赖这个bean后,在写控制器的时候,让其继承MultiActionController这个类。我们就可以在访问的时候以xxx.do?method=getxxx 就可以访问了。

2.运用Spring 2.5以后新起的一种方式,注解开发。通过注解的方式,也可以实现相同地功能。注解开法主要是运用AnnotationMethodHandlerAdapter类来进行映射。主要的映射方式是通过配置文件xxx-servlet.xml中<!--:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->

<bean class="org.springframework.web.servlet.mvc.annotation.

AnnotationMethodHandlerAdapter"/>

在配置文件中注入这个类以后,就完成了注解的配置,当一个请求发起的时候,这个类就会根据地址来扫描,是否存在控制器中有相应的注解。通过注解来进行各种转发和操作。

配置好了配置文件后,就要开始写控制器,这里的控制器不需要继承或实现任何类或接口。换句话说,在这个类里面不用做其它的任何事,这个类是一个和其它普通类一样的的类。我们要做的就是在这个类和方法前面加上注解。即可以完成映射。

主要的注解有:@Controller这个注解是最核心的注解,在类前面加上这个注解后,它便成了一个控制器。SpringMVC容器就会监视着这个类。第二个核心注解就是@RequestMapping,加上这个注解后,表示这个方法会经过转发。可以直接通过地址栏进行访问。

几种常见的控制器

Spring MVC的核心就是控制器,而在我们写控制器的时候,Spring MVC有那么多的控制器,我们选用哪一个才是最佳选择呢?

Spring MVC 的控制器主要都直接或间接的实现了Controller 接口。主要有以下几类控制器。

1.简单控制器(AbstractController),适合于无参数或者少参数的访问,如我们要一子显示所有留言,显示所有帖子等。在使用该控制器的时候,一般会重写handleRequestInternal方法。

2.命令控制器(AbstractCommandController),自我感觉可以用简单控制器替换,适合于更少参数的传递访问。如:显示我喜欢的帖子。。。。。

3.表单控制器(SimpleFormController)这个控制器是最通用的一个控制器,主要用于对表单的操作和控制。例如:增加,修改帖子等。

4.向导控制器(AbstractWizardFormController)适用于分步注册,分步保存数据的情况下。该控制器里面有很多方法供选择。

5.多动作控制器(multiActionController),该控制器允许在同一个类中写多个不同的方法,以参数的来区别访问哪一个方法。在这个控制器类中可以定义自己的方法。主要定义方式有public (ModeAndView|Map|String |void)actionName(HttpServletRequest,HttpServletResponse,response).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐