1 不带参数
回顾一下第一篇中的示例代码:
// 访问URL:website_java2/enter/index.do
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index() {
return "manage/enter/index";
}
该示例没有任何输入参数,也没有任何输出参数,仅仅是返回一个view。
RequestMapping是一个用来处理请求地址映射的注解,共有6个属性,如下:
value:指定请求的实际地址,指定的地址可以是URI Template 模式;
method:指定请求的method类型, GET、POST、PUT、DELETE等;
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
所以本示例代码的访问地址是:xxx/index.do,而且要是GET方式访问。
2 带输入参数
假设有如下表单:
<form id="loginForm" method="post" action="login.do">
<table>
<tr>
<td colspan="2"><h1>登录</h1></td>
</tr>
<tr height="30" >
<td>用户名:</td>
<td><input type="text" name="loginName"></input></td>
</tr>
<tr height="30" >
<td>密码:</td>
<td><input type="text" name="loginPwd"></input></td>
</tr>
<tr height="40" >
<td colspan="2" align="right">
<input type="submit" value="确定"/>
</td>
</tr>
</table>
</form>
访问的Action应该是这样的:
方法一:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(String loginName, String loginPwd) {
String msg = "用户登录,用户名:" + loginName + ",密码:" + loginPwd;
System.out.println(msg);
return "manage/enter/main";
}
与上一个示例的区别是增加了2个输入参数,而且要是POST方式访问。
请注意表单的两个input名称与login的输入参数名称必须一致,如果不一致则需要使用RequestParam注解,修改上面的代码如下:
方法二:
// 访问URL:website_java2/enter/login.do
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam("loginName") String name, @RequestParam("loginPwd") String pass) {
String msg = "用户登录,用户名:" + name + ",密码:" + pass;
System.out.println(msg);
return "manage/enter/main";
}
public class User implements java.io.Serializable {
private String loginName;
private String loginPwd;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
}
方法三:
// 访问URL:website_java2/enter/login.do
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(User user) {
String msg = "用户登录,用户名:" + user.getLoginName() + ",密码:" + user.getLoginPwd();
System.out.println(msg);
return "manage/enter/main";
}
这里比较一个则比前方要简洁多了。
对于复杂的表单,可能需要映射到多个javabean中,假设有如下jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>系统登录入口</title>
</head>
<body>
<form:form method="POST" action="login.do" modelAttribute="user">
<table>
<tr>
<td colspan="2"><h1>登录</h1>
</td>
</tr>
<tr height="30">
<td>用户名:</td>
<td><input type="text" name="loginName"></input></td>
</tr>
<tr height="30">
<td>密码:</td>
<td><input type="text" name="loginPwd"></input></td>
</tr>
<tr height="40">
<td colspan="2" align="right"><input type="submit" value="确定" /></td>
</tr>
</table>
</form:form>
</body>
</html>
这里注意一下form的生成方式,其实modelAttribute属性就是生成html代码中的form.id值,生成后的form如下:
<form id="user" action="login.do" method="POST">
这时Action可以修改为如下:
方法四:
// 访问URL:website_java2/enter/login.do
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("user") User user) {
String msg = "用户登录,用户名:" + user.getLoginName() + ",密码:" + user.getLoginPwd();
System.out.println(msg);
return "manage/enter/main";
}
也就是使用ModelAttribute注解,指定form的id值。
3 带输出参数
我们修改最初(第一篇)中的代码如下:
方法一:
// 访问URL:website_java2/enter/index.do
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(Map<String, Object> map) {
logger.info("访问了index方法");
map.put("title", "系统登录");
map.put("date", "20150316");
return "manage/enter/index";
}
修改index.jsp如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>系统登录入口</title>
</head>
<body>
<form id="loginForm" method="post" action="login.do">
<table>
<tr>
<td colspan="2"><h1>${title}-${date}</h1></td>
</tr>
<tr height="30" >
<td>用户名:</td>
<td><input type="text" name="loginName"></input></td>
</tr>
<tr height="30" >
<td>密码:</td>
<td><input type="text" name="loginPwd"></input></td>
</tr>
<tr height="40" >
<td colspan="2" align="right">
<input type="submit" value="确定"/>
</td>
</tr>
</table>
</form>
</body>
</html>
方法二:
上例上使用的是map对象,当然也可以使用spring的Model对象:
// 访问URL:website_java2/enter/index.do
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(Model model) {
logger.info("访问了index方法");
model.addAttribute("title", "系统登录");
model.addAttribute("date", "20150316");
return "manage/enter/index";
}
jsp页面和浏览器显示的结果和上例一样。
4 同时带有输入和输出参数
参考2和3,同时带有输入和输出参数的示例如下:
// 访问URL:website_java2/enter/index.do
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(String id, Model model) {
logger.info("访问了index方法,id=" + id);
model.addAttribute("title", "系统登录");
model.addAttribute("date", "20150316");
return "manage/enter/index";
}
依次类推,Spring MVC使用还是挺方便的。