不知不觉,这里已经记录到了spring mvc 四了,不过我们前面写的都是比较简单,不过应用场景还是比较少,毕竟没有人一个方法一个Controller的了,这样的话,一个系统都不知道多少个Controller了,当然这样我觉得(以后所有记录 “我觉得”,都是个人观点,不代表任何人,呵呵,免得很多人老是被代表)也不符合面向对象的原则。
如果学过struts或者用过struts的人都知道,一个action(spring叫 controller)有很多的方法的,这样比较合理,嗯,我也是这么认为的,那接下来我们就开始学习下怎么实现一个类多个方法的请求吧。
还是那句话,前面的基础和项目搭建我这里就不在详细描述了,我们这里的基础是衔接 Spring mvc 三。
1、先从java代码开始吧,我们创建一个类,但是这个类是 必须(注意哦,必须)继承 MultiActionController,具体代码如下:
/* * Copyright 2013 The JA-SIG Collaborative. All rights reserved. * distributed with this file and available online at * http://www.etong.com/ */ package com.lap.taobaouse.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; /** * <p> * * </p> * * @author 劳水生 Exp * @version $FileName: LapController.java $Date: 2013-3-20 下午3:07:20 -0400 2013 * @since 1.0 * */ public class LapController extends MultiActionController { /** * <p> * 查询列表 * </p> * * @param request * @param response * @return */ public ModelAndView queryList(HttpServletRequest request, HttpServletResponse response) { ModelAndView modelAndView = new ModelAndView("listTest"); // TODO业务调用 return modelAndView; } /** * <p> * 根据id查询 * </p> * * @param request * @param response * @return */ public ModelAndView queryById(HttpServletRequest request, HttpServletResponse response) { ModelAndView modelAndView = new ModelAndView("testInfo"); // TODO业务调用 return modelAndView; } }
非常的简单吧,跟我们平时的类差别不大,就是继承了一个父类。
2、接下来我们看看spring配置文件需要添加的内容,先贴代码再说情况,有图有真相嘛,如:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-autowire="byName"> <!-- 普通的bean实体 --> <bean name="sampleController" class="com.lap.taobaouse.controller.SampleController" />
<bean name="lapController" class="com.lap.taobaouse.controller.LapController">
<property name="methodNameResolver" ref="parameterMethodResolver" />
</bean>
<!-- 实现一类对多方法的方法参数 -->
<bean id="parameterMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="method" />
</bean>
<!-- url 管理 -->
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/test.htm">sampleController</prop>
<prop key="/lap.htm">lapController</prop>
</props>
</property>
</bean>
<!-- 管理视图对象 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="/static/template/" />
<property name="suffix" value=".jsp" />
<property name="contentType" value="text/html;charset=utf-8" />
</bean>
</beans>
标有颜色的就是此次添加的,跟基础的controller有点不一样的吧,他里面有一个属性,是指请求方法名称类的,包org.springframework.web.servlet.mvc.multiaction下面有很多非常有用的类,有时间的童鞋可以去看看,会让你把配置文件请求写的更优美,特别是 PropertiesMethodNameResolver 类(这里就不详细讲了,这个类确实很实用,想了解的另外讲解吧),
3、最后就是写页面了,根据我们前面几个讲解,页面大家大概知道了吧,两个方法两个页面,代码如下:
listTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一个类对多方法列表</title> </head> <body> <h3>一个类对多方法列表,喂,世界您好!</h3> </body> </html>
testInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一个类对多方法详细</title> </head> <body> <h3>一个类对多方法详细,喂,世界您好!</h3> </body> </html>
呵呵,我们重点是测试跳转成功,所以没有打算写什么业务,那么请求地址是怎么样呢?
http://域名:端口/项目名称/lap.htm?method(这个是可以自己定义的,就是上面配置文件写的<property name="paramName" value="method" />)=方法名
好了,再次截图一下项目的结构吧:
写的不好大家不要喷哦,如有疑问可以大家一起探讨,转载记得也要留出处哦