`

java中的302和sendRedirect的区别

 
阅读更多
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优化非常有好处
 
分享到:
评论

相关推荐

    sendRedirect()和forward()

    从上面的描述中,我们可以看到,sendRedirect()方法和forward()方法最大的区别就在于浏览器的行为。在sendRedirect()方法中,浏览器重新访问了新的资源,而在forward()方法中,浏览器并不知道为其服务的Servlet已经...

    Jsp利用response.sendRedirect、cookie传参

    ### JSP中利用`response.sendRedirect`与...总之,在JSP开发中,熟练掌握`response.sendRedirect`和Cookie的使用,能够帮助开发者更灵活地控制页面流程,有效管理用户数据,从而构建更加健壮和高效的Web应用程序。

    jsp response.sendRedirect不跳转的原因分析及解决.docx

    在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一种常用的实现服务器端重定向的方法。然而,在实际项目开发过程中,有时会遇到虽然调用了 `response.sendRedirect()` 方法,但页面并没有按预期...

    java 中sendredirect()和forward()方法的区别

    Java 中 sendRedirect() 和 forward() 方法的区别 Java 中的 sendRedirect() 和 forward() 方法都是用于页面跳转的,但是它们之间存在着一些关键的区别。 1. 跳转方式 sendRedirect() 方法可以将请求重定向到任何...

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    forward PK sendredirect

    相比之下,`response.sendRedirect("转的页面")`是Java Servlet API中的一个方法,它会告诉浏览器发送一个新的GET请求到指定的URL。这是一个客户端的跳转,服务器返回一个HTTP状态码302(暂时重定向)和Location头,...

    forward-sendRedirect

    在Java Web开发中,"forward-sendRedirect"是一个关键的概念,主要涉及到Servlet和JSP之间的页面跳转技术。这里我们将深入探讨这两个方法的工作原理及其在实际应用中的差异。 首先,我们来了解一下`forward()`方法...

    Servlet跳转方式sendReDirect

    在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...

    jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx

    在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`getRequestDispatcher()`和`sendRedirect()`。这两种方式虽然都能实现页面跳转,但在实际应用中有着不同的特点与适用场景。 #### 一、...

    Cookie简介及JSP处理Cookie的方法.doc

    在JSP(JavaServer Pages)中,我们可以方便地操作Cookie。创建一个新的Cookie对象,你可以使用以下代码: ```java Cookie cookie_name = new Cookie("Parameter", "Value"); ``` 这里的"Parameter"是Cookie的名称...

    java中JSP和el表达式的隐含对象

    ### Java中JSP和EL表达式的隐含对象详解 在Java Web开发中,JSP(Java Server Pages)作为一种常用的技术被广泛应用于构建动态网页。它允许开发者将HTML、JavaScript等静态网页元素与动态生成的内容混合在一起。在...

    java中filter的用法(过滤器)

    ### Java中的Filter(过滤器)使用详解 ...以上就是关于Java中Filter(过滤器)的一些基本概念和具体实现方式的详细介绍。通过合理的使用Filter,开发者可以轻松地实现许多强大的功能,提高应用程序的安全性和性能。

    java 如何对网页进行重新定向

    总结来说,Java中实现网页重定向主要通过`HttpServletResponse`的`sendRedirect()`方法,而在Spring框架中则有更多高级的选项,如`RedirectView`和`RedirectAttributes`。理解并掌握这些方法,对于构建动态和交互性...

    java实现301跳转和重定向的方法

    在Java Servlet中实现302临时重定向,可以使用`sendRedirect()`方法: ```java response.sendRedirect("http://baidu.com"); // 直接调用sendRedirect()方法,自动设置302状态码和Location头 ``` 区别: 1. 持久性...

    jsp response.sendRedirect不跳转的原因分析及解决

    对于如何进行页面跳转以及如何解决跳转中出现的问题,response.sendRedirect()是其中一种常用的方法。然而,在实际使用时,开发者可能会遇到response.sendRedirect()不跳转的情况。以下是对这个问题的原因分析及解决...

    jsp中页面之间的跳转forward与sendRedirect的区别

    在JSP(Java Server Pages)中实现页面间的跳转,主要有两种方法:一种是使用Servlet的RequestDispatcher进行内部跳转,即forward;另一种是使用HTTP响应对象(response)的sendRedirect方法实现客户端重定向,即...

    web的java代码

    本压缩包中的内容主要涉及使用Java进行Web开发的相关代码,包括与数据库交互以及实现前端和后端的交互逻辑。下面将详细介绍这些知识点。 首先,Java在Web开发中通常采用Servlet技术来处理HTTP请求。Servlet是Java...

    关于java应用cookie

    ### 关于Java应用Cookie知识点详解 #### 一、Cookie简介 ...通过以上介绍,我们可以了解到Java中Cookie的基本使用方法以及相关的安全性和注意事项。这些知识点对于开发基于Java的Web应用程序非常重要。

Global site tag (gtag.js) - Google Analytics