springMVC—接受引數以及返回引數
springMVC將請求傳送到controller時需要接受引數,在controller中處理完業務邏輯以後也會將引數再次轉發給其他頁面,在strtus2中我們會使用到模型驅動,在springMVC中頁提供多多種靈活了接受和返回引數的方式。下面就總結一下。
controller接受引數
在這裡可以直接使用url方法獲取引數比如:http://localhost:8080/springmvc-2/toPerson1.do?name=123
1.引數列表中可以直接定義request,response,session
@RequestMapping(value="/toPerson.do") public String toPerson(HttpServletRequest request){ String name = request.getParameter("name"); String[] favs = request.getParameterValues("fav"); System.out.println(name); for(int str : fav){ System.out.println(str); } return"index"; }
2.在引數列表中直接定義要接收的引數和引數的資料型別
@RequestMapping(value="/toPerson1.do")
public String toPerson1(String name, int[] fav){
System.out.println("name: "+name +"birthday:"+birthday);
for(int str : fav){
System.out.println(str);
}
return"index";
}
3.實體類的接受
在引數列表中直接定義要接受的實體類,請求中傳遞的引數名要和實體類中的set方法後的字串匹配,否則無法注入。只要有請求到達就會按照引數列表中的實體類來建立物件。
springmvc中的controller是單例的但是不會帶來併發問題,因為所有的引數的接受都是在引數列表中,並不是成員變數,每次請求,傳遞的引數都是一個新的例項,不會產生併發問題。
@RequestMapping(value="/toPerson4.do") public String toPerson4(Person person){ System.out.println(person.toString()); System.out.println(user.toString()); System.out.println(name); System.out.println(bir); return"index"; }
controller返回引數
1.使用map返回到頁面,把資料返回到頁面上
@RequestMapping(value="/toPerson5.do")
public ModelAndView toPerson5() throws Exception{
Person person = new Person();
person.setId(1);
person.setName("lisi");
person.setBir(newSimpleDateFormat("yyyy-MM-dd").parse("1985-04-22"));
Map<String,Object>map=new HashMap<String,Object>();
map.put("p", person);
return new ModelAndView("toPerson",map);
}
返回值型別是String,在引數列表中直接來定義一個Map,這個map不是用來接受引數的,而是用來把引數寫到頁面上去的
@RequestMapping(value="/toPerson6.do")
public ModelAndView toPerson6(Map<String,Object> map) throws Exception{
Person person = new Person();
person.setId(1);
person.setName("lisi");
person.setBir(newSimpleDateFormat("yyyy-MM-dd").parse("1985-04-22"));
map=newHashMap<String,Object>();
map.put("p",person);
returnnew ModelAndView("toPerson",map);
}
2.使用spring 提供的model返回到頁面
返回值型別是String代表viewName, 引數列表使用Model用來把資料寫到頁面上
@RequestMapping(value="/toPerson7.do")
public String toPerson7(Model model) throws Exception{
Personperson = new Person();
person.setId(1);
person.setName("lisi");
person.setBir(newSimpleDateFormat("yyyy-MM-dd").parse("1985-04-22"));
model.addAttribute("p",person);
return"toPerson";
}
toPerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
String path = request.getContextPath();
//http://localhost:8080/springmvc-1/
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- 在所有請求前邊加上basePath http://localhost:8080/springmvc-1/-->
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>${p.id }</h1>
<h1>${p.name }</h1>
<h1><fmt:formatDate value="${p.bir }" pattern="yyyy-MM-dd"/></h1>
</body>
</html>
總之,在接受引數的方式中springMVC可以定義requet去接受,可以直接定義引數列表,在接受實體物件的時候也可以定義引數列表接受資料。在返回資料的時候可以使用Map返回資料,也可以使用springMVC提供的Mode返回資料。