1. 程式人生 > >Spring MVC 與Ajax互動及重定向操作

Spring MVC 與Ajax互動及重定向操作

一、Spring MVC 與Ajax互動

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

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

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

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

例如有如下Controller:view plain cop

  1. @RequestMapping("/ajax.do")    
  2.     publicvoid ajax1(String name, PrintWriter out){    
  3.         String result = "hello " +name;    
  4.         out.write(result);    
  5.     }    
  6.     @RequestMapping("/toAjax.do")    
  7.     public String toAjax(){    
  8.         return"ajax";    
  9.     }    

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

  1. <script type="text/javascript" src="js/jquery-1.6.2.js"></script>  
  2.     <script type="text/javascript"
    >  
  3.         $(function(){  
  4.             $("#mybutton").click(function(){  
  5.                 $.ajax({  
  6.                     url:"test/ajax.do",    
  7.                     type:"post",  
  8.                     dataType:"text",  
  9.                     data:{  
  10.                         name:"max1209"//為ajax.do方法傳遞name引數
  11.                     },  
  12.                     success:function(responseText){  
  13.                         alert(responseText);  
  14.                     },  
  15.                     error:function(){  
  16.                         alert("system error");  
  17.                     }  
  18.                 });  
  19.             });  
  20.         });           
  21.     </script>  
通過訪問http://localhost:8091/springMVC/toAjax.do, 轉發,頁面跳轉到ajax.jsp,在ajax.jsp中編寫ajax程式碼,訪問ajax.do方法。

二、表單提交

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

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

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

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

  1. <body>    
  2.     <form action="test/upload.do" method="post">    
  3.         name:<input name="name" type="text"><br>    
  4.         age:<input name="age" type="text"><br>    
  5.         address:<input name="address" type="text"><br>    
  6.         birthday:<input name="birthday" type="text"><br>    
  7.         <input type="submit" value="submit"><br>    
  8.     </form>    
  9.   </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中,轉發和重定向:

  1. //轉發  
  2. @RequestMapping("/toForm.do")    
  3. public String toForm(){    
  4.     return"form";    
  5. }    
  6. //重定向  
  7. @RequestMapping("/redirectToForm.do")    
  8. public String redirectToForm(){    
  9.     return"redirect:toForm.do";    
  10. }    
在Spring MVC中,重定向分為兩種型別:同一個control內的重定向、不同controller之間的重定向。
  1. <span style="font-family:Comic Sans MS;">                 //重定向  
  2.     //controller內部重定向,redirect:加上同一個controller中的requestMapping的值  
  3.     @RequestMapping("/redirectToForm.do")    
  4.     public String redirectToForm(){    
  5.         return"redirect:toForm.do";    
  6.     }    
  7.     //controller之間的重定向:必須要指定好controller的名稱空間再指定requestMapping的值,  
  8.     //redirect:後必須要加/,是從根目錄開始  
  9.     @RequestMapping("/redirectToForm1.do")    
  10.     public String redirectToForm1(){    
  11.         return"redirect:/test1/toForm.do";    
  12.     }</span>