1. 程式人生 > >Spring MVC 系列(四)——Spring MVC 與Ajax互動及重定向操作

Spring MVC 系列(四)——Spring MVC 與Ajax互動及重定向操作

 一、Spring MVC 與Ajax互動

一般情況下,Controller中方法返回值型別有兩種

1、String 直接跳轉到某View介面

2、Void 不需要進行頁面跳轉,直接訪問下一個方法

返回String型別跳轉介面的引數接收和傳遞在Spring MVC 引數傳遞與表單互動中已經有過介紹。執行void無需進行頁面跳轉的方法,在Spring MVC中,主要是通過前臺View中ajax的互動進行訪問。

例如有如下Controller:

@RequestMapping("/ajax.do")
	public void ajax1(String name, PrintWriter out){
		String result = "hello " +name;
		out.write(result);
	}
	
	@RequestMapping("/toAjax.do")
	public String toAjax(){
		return "ajax";
	}

前臺jsp通過ajax訪問ajax.do方法

	<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
  	<script type="text/javascript">
  		$(function(){
  			$("#mybutton").click(function(){
  				$.ajax({
  					url:"test/ajax.do",  
  					type:"post",
  					dataType:"text",
  					data:{
  						name:"max1209" //為ajax.do方法傳遞name引數
  					},
  					success:function(responseText){
  						alert(responseText);
  					},
  					error:function(){
  						alert("system error");
  					}
  				});
  			});
  		});  		
  	</script>

二、表單提交

Spring MVC為web前臺的表單提交,與struts2中action沒有太大區別,但也有兩點需要注意:

1、action的路徑如果controller類上寫了@RequestMapping註解指定名稱空間,則需要在form標籤的action中寫名該路徑。否則無法找到該controller

2、Form中傳遞的引數也需要保證與實體的set方法一致或是方法中定義的引數名一致才可接收

3、表單提交的方式需要與@RequestMapping註解中method值一致才可以正確提交,【method的作用就在於指定前臺表單提交的方式 post 、get】RequestMapping預設是post提交。

<body>
    <form action="test/upload.do" method="post">
    	name:<input name="name" type="text"><br>
    	age:<input name="age" type="text"><br>
    	address:<input name="address" type="text"><br>
    	birthday:<input name="birthday" type="text"><br>
    	<input type="submit" value="submit"><br>
    </form>
  </body>

三、重定向操作

     轉發和重定向,最直觀的區別就在於:轉發操作完成後,瀏覽器的URL地址並不會改變,而重定向會跳轉到下一個URL。

     原因在於執行轉發時,JSP容器將使用一個內部的方法來呼叫目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。例如在ajax訪問例項中,通過toAjax方法執行轉發,跳轉到Ajax.jsp頁面,頁面載入ajax程式碼,執行Ajax.do方法。整個過程瀏覽器的URL一直顯示的是http://localhost:8091/springMVC/toAjax.do,瀏覽器並不會顯示執行ajax.do方法的過程。

     所以轉發一般比重定向的速度快,因為瀏覽器只發送一個請求就可以訪問多個方法,完成一條業務邏輯,重定向會使得每訪問一個方法,就傳送一個request請求,同時URL也會相應改變。

     但從根本上而言,轉發和重定向的根本區別在於轉發到新的jsp時,無需傳送一個新的request請求,不同介面間的資料都疊加存放到一個request中共享。而使用重定向到另一介面時,瀏覽器會重新發送一個request請求,使得原來介面的request物件和其中儲存的資料一併失效,新的request來記錄新的請求資訊。所以轉發操作對於資料共享獲取都比較方便,但存在如果介面重新載入,則需要將第一頁面也重新載入。

       在Spring MVC中,轉發和重定向:

	//轉發
	@RequestMapping("/toForm.do")
	public String toForm(){
		return "form";
	}
	
	//重定向
	@RequestMapping("/redirectToForm.do")
	public String redirectToForm(){
		return "redirect:toForm.do";
	}

     在Spring MVC中,重定向分為兩種型別:同一個control內的重定向、不同controller之間的重定向。

<span style="font-family:Comic Sans MS;">                 //重定向
	//controller內部重定向,redirect:加上同一個controller中的requestMapping的值
	@RequestMapping("/redirectToForm.do")
	public String redirectToForm(){
		return "redirect:toForm.do";
	}
	
	//controller之間的重定向:必須要指定好controller的名稱空間再指定requestMapping的值,
	//redirect:後必須要加/,是從根目錄開始
	@RequestMapping("/redirectToForm1.do")
	public String redirectToForm1(){
		return "redirect:/test1/toForm.do";
	}</span>