zoukankan      html  css  js  c++  java
  • http请求中java中的302和sendRedirect的区别

    一、HTTP Get请求URL最大长度

    各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下:

    IE6.0                :url最大长度2083个字符,超过最大长度后无法提交。
    IE7.0                :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。
    firefox 3.0.3     :url最大长度7764个字符,超过最大长度后无法提交。
    Opera 9.52       :url最大长度7648个字符,超过最大长度后无法提交。
    Google Chrome 2.0.168   :url最大长度7713个字符,超过最大长度后无法提交

    二、http请求中java中的302和sendRedirect的区别

    ============================================================================================

    getContextPath、getServletPath、getRequestURI的区别

    假定你的工程名称为projects,你在浏览器中输入请求路径:

    http://127.0.0.1:8080/projects/pages/newForm.jsp

    则执行下面向行代码后打印出如下结果:
    1、 System.out.println(request.getContextPath());
    打印结果:/projects
     2、System.out.println(request.getServletPath());
    打印结果:/pages/newForm.jsp
     3、 System.out.println(request.getRequestURI());
    打印结果:/projects/pages/newForm.jsp
     4、 System.out.println(request.getRealPath("/")); 
     JSP servlet API提供了getRealPath(path)方法,返回给定虚拟路径的真实路径,如果转换错误,则返回null。

    打印结果:C:Tomcat5.0webappsprojects est

    ============================================================================================
    java中有一个sendRedirect函数这个用于跳转到另外一个页面,这个实际上是一个302跳转,但是不完全等同于302跳转

    点击(此处)折叠或打开

    1. response.sendRedirect("login.jsp");
    2. 不等于
    3. response.addHeader("location", "login.jsp");
    4. response.setStatus(302);
    1.比较
    response.sendRedirect("login.jsp");的http请求过程如下:
    response.addHeader("location", "login.jsp");
    response.setStatus(302);
    上面两个比较发现不同的是蓝色部分
    response.sendRedirect("login.jsp");在重定向时多加了一段http://localhost:8080/xxxSearch/
     
    2.分析
    1)当我们浏览器的访问路径是http://localhost:8080/xxxSearch/时,
    response.sendRedirect("login.jsp");  等于 response.addHeader("location", "login.jsp");response.setStatus(302);
    这时在jsp使用request.getContextPath()获取访问绝对路径是可以的
    2)但是当我们的浏览器的访问路径是http://localhost/时就出现问题了
    像我公司经常是这样的结构:用apache做前端,代理后面的tomcat,在tomcat看来访问路径还是http://localhost:8080/xxxSearch/,而用户真实访问的是http://localhost/
    若是用response.sendRedirect("login.jsp");的话,用户会跳转到
    http://localhost:8080/xxxSearch/login.jsp
    若是我们的防火墙不开放8080端口,我们就会看到无法访问的页面,而且我们也不想客户直接访问到tomcat上。
    而用response.addHeader("location", "login.jsp");response.setStatus(302);的话,客户会访问到login.jsp,这个路径是一个相对的路径再加上客户浏览器的路径,客户实际访问的是
    http://localhost/login.jsp
     
    3.结论
    因此我认为:
    尽量使用
    response.addHeader("location", "login.jsp");response.setStatus(302);
    而且在jsp页面里尽量不要使用request.getContextPath()或者绝对路径,
    这样我们的代码可以很好的通过不同方式访问,特别是对SEO优化非常有好处
  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/duanxz/p/5445464.html
Copyright © 2011-2022 走看看