Servlet 重定向传参

来源:互联网 发布:淘宝csv导入怎么开发 编辑:程序博客网 时间:2024/06/05 10:20

servlet重定向一般采用response.sendRedirect()来处理,要明白其中的细节,还需了解HTTP协议的一些内容,简单点就是要了解HTTP请求报头、HTTP状态码、HTTP响应报头的一些参数。 

sendRedirect()简单点就是做了两件事情: 
设置HTTP响应报头中的Status为302; 
设置HTTP响应报头中的Location值为指定的URL; 
简单相当于这样: 

Java代码  收藏代码
  1. response.setStatus(302);  
  2. response.setHeader("Location""OtherServlet");  


浏览器会根据状态码来作出相应的响应; 

浏览器对相应的状态码的响应(这里只给出了几个3开头的)是: 
302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found. 现在使用只是为了兼容性的处理,response.sendRedirect()的默认Location重定向用的是302. 
但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化 
303:对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。 
307:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。 

浏览器对302的响应,默认情况下,使用HTTP协议的GET方法提交请求,最初请求的内容(比如 POST 参数)也就丢失了。 
所以response.sendRedirect()是不能让浏览器来以post方法提交请求的。 

你想在servlet中用post传参数,在浏览器支持HTTP1.1的情况下可以设置状态码为307: 
Java代码  收藏代码
  1. response.setStatus(307);  
  2. response.setHeader("Location""OtherServlet");  


这样浏览器就会向Location里的URI重新发起POST请求。 
0 0
原创粉丝点击