Spring MVC 与Ajax交互及重定向操作

一、Spring MVC 与Ajax交互

一般情况下,Controller中方法返回值类型有两种

1、String 直接跳转到某View界面

2、Void 不需要进行页面跳转,直接访问下一个方法

返回String类型跳转界面的参数接收和传递在Spring MVC 参数传递与表单交互中已经有过介绍。执行void无需进行页面跳转的方法,在Spring MVC中,主要是通过前台View中ajax的交互进行访问。

例如有如下Controller: view plain cop

[java]  view plain  copy
  1. @RequestMapping("/ajax.do")    
  2.     public void ajax1(String name, PrintWriter out){    
  3.         String result = "hello " +name;    
  4.         out.write(result);    
  5.     }    
  6.         
  7.     @RequestMapping("/toAjax.do")    
  8.     public String toAjax(){    
  9.         return "ajax";    
  10.     }    

前台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提交。

[java]  view plain  copy
  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方法的过程。

     如果使用重定向执行toAjax,do 和ajax.do方法,则浏览器会先发送http://localhost:8091/springMVC/toAjax.do请求,执行toAjax,在发送一个新的请求即http://localhost:8091/springMVC/Ajax.do来访问第二个方法。

     所以转发一般比重定向的速度快,因为浏览器只发送一个请求就可以访问多个方法,完成一条业务逻辑,重定向会使得每访问一个方法,就发送一个request请求,同时URL也会相应改变。

     但从根本上而言,转发和重定向的根本区别在于转发到新的jsp时,无需发送一个新的request请求,不同界面间的数据都叠加存放到一个request中共享。而使用重定向到另一界面时,浏览器会重新发送一个request请求,使得原来界面的request对象和其中保存的数据一并失效,新的request来记录新的请求信息。所以转发操作对于数据共享获取都比较方便,但存在如果界面重新加载,则需要将第一页面也重新加载。

       在Spring MVC中,转发和重定向:

[java]  view plain  copy
  1. //转发    
  2. @RequestMapping("/toForm.do")    
  3. public String toForm(){    
  4.     return "form";    
  5. }    
  6.     
  7. //重定向    
  8. @RequestMapping("/redirectToForm.do")    
  9. public String redirectToForm(){    
  10.     return "redirect:toForm.do";    
  11. }    
在Spring MVC中,重定向分为两种类型:同一个control内的重定向、不同controller之间的重定向。
[java]  view plain  copy
  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.         
  8.     //controller之间的重定向:必须要指定好controller的命名空间再指定requestMapping的值,    
  9.     //redirect:后必须要加/,是从根目录开始    
  10.     @RequestMapping("/redirectToForm1.do")    
  11.     public String redirectToForm1(){    
  12.         return "redirect:/test1/toForm.do";    
  13.     }</span>    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值