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优化非常有好处
  • 相关阅读:
    nginx转发域名小记
    简化kubernetes应用部署工具之Helm应用部署
    docker-compose的使用
    使用二进制包安装k8s
    搭建k8s(一)
    linux环境下安装使用selenium Chrome
    常用User-Agent大全
    缓存之Memcache
    git-commit Angular规范
    Kubernetes介绍及基本概念
  • 原文地址:https://www.cnblogs.com/duanxz/p/5445464.html
Copyright © 2011-2022 走看看