不知不觉,这里已经记录到了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" />)=方法名
好了,再次截图一下项目的结构吧:
写的不好大家不要喷哦,如有疑问可以大家一起探讨,转载记得也要留出处哦