• response.sendRedirect的细节


    今天敲书上的例子的时候无意间发现,response中的sendRedirect()重定向到另一个servlet时,调用的是doget方法,不明所以,百度得知,原来还牵扯到http协议的细节问题,原文如下:

    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请求。 

    http://www.iteye.com/problems/61747

  • 相关阅读:
    react hook超实用的用法和技巧分析
    React.js事件处理的三种写法
    基于虚拟 DOM 库 (Snabbdom) 的迷你 React
    函数式的React
    Node.js特点和适用场景
    浅谈小程序运行机制
    NodeJS 和 C++ 之间的类型转换
    angular多语言配置
    react传递方法 警告
    2019第12周知识总结
  • 原文地址:https://www.cnblogs.com/bruce-L/p/4035428.html
Copyright © 2020-2023  润新知