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>