0 0

Servlet 重定向传参3

我现在要从servlet 里面重定向到 别的网站  我需要以post 传参  就像是表单提交方式一样  请高手们 给点意见
2011年3月23日 15:10

3个答案 按时间排序 按投票排序

0 0

lz到底怎么样了?等你的反应,上面的解决问题了没?

2011年4月08日 14:53
0 0

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

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

response.setStatus(302);
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:
response.setStatus(307);
response.setHeader("Location", "OtherServlet");


这样浏览器就会向Location里的URI重新发起POST请求。

下班了,回答忘记下班时间了.

2011年3月23日 18:33
0 0

servlet 里面重定向 只能是get方式传参数。
之所有叫重定向就是因为这个。
如果重定向能够post传参的话,那么请求转发就没必要存在了。

2011年3月23日 15:42

相关推荐

Global site tag (gtag.js) - Google Analytics