1. 程式人生 > >springMVC—接受引數以及返回引數

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返回資料。