`

Tomcat 7源码学习笔记 -7 请求转发forward和重定向redirect

阅读更多

 

在servlet里面接收到一个请求以后,处理完毕,根据需要可以有几种选择:

 

1.直接提交response,比如response.getWriter().println();

  这个比较简单,而且不怎么使用,毕竟动态生成html不是很好的选择

 

2.将请求转给其它的资源(比如:forward到jsp,html,servlet)

 这个有两种方法可以选择,但是无论哪种方法,都是转发到当前context(web应用)下面:

(1)ServletRequest#getRequestDispatcher(String path)方法

request.getRequestDispatcher("/login.html").forward(request,response);

 

path如果以/开头,那么path相对于当前context的根目录

比如:当前context path是/test,那么"/login.html"相当于/test/login.html

 

如果path不以/开头,那么属于相对目录,path相对于当前的url目录

比如:当前url为/test/action/a/b,那么"login.html"相当于/test/action/a/login.html

 

(2)ServletContext#getRequestDispatcher(String path)方法

getServletContext().getRequestDispatcher("/login.html").forward(request,response);

 

path必须以/开头,并且path是相对于当前context的根目录

比如:当前context path是/test,那么"/login.html"相当于/test/login.html

 

3.重定向到其它资源(比如:redirect到jsp,html,servlet)

 

重定向是临时返回当前请求,然后浏览器收到响应后,自动再向redirect指定的url发起一个新的request,

这时在浏览器的地址栏中可以看到一个新的url地址。

 

HttpServletResponse#sendRedirect(String location)方法

 

(1)location前面有/,这时location是相对于当前host root

response.sendRedirect("/test/login.html");

 

得到的绝对url是http://localhost:8080/test/login.html

 

(2)location前面没有/,这时是相对于当前url目录,属于相对目录

 

response.sendRedirect("login.html");

 

如果当前url是:/test/action/a/b,那么得到的url是:/test/action/a/login.html

 

重定向临时返回的response和正常返回的response有什么区别呢?

 

(1)response的http 返回码不同

redirect:

HTTP/1.1 302 Moved Temporarily

Location: http://localhost:8080/test/action/a/login.html

 

正常返回的response(没有Location):

HTTP/1.1 200 OK

 

(2)

redirect需要两次请求,一次返回302,接着再向Location发起一次新的request

正常返回的response,只需要一次请求

 

 

分享到:
评论

相关推荐

    tomcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    《深入理解Tomcat-Redis-Session-Manager:在Tomcat7和Tomcat8中的应用》 在现代Web应用程序开发中,session管理是一个至关重要的环节,它涉及到用户会话的持久化和跨请求的数据共享。传统的session管理方式在高...

    Tomcat7下载(apache-tomcat-7.0.85)

    Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)

    tomcat-redis-session-manager源码

    《深入解析Tomcat-Redis-Session-Manager源码》 在现代Web应用中,服务器端会话管理是一个至关重要的部分,特别是在高并发、分布式环境中。Tomcat作为最流行的Java Servlet容器,提供了丰富的功能来支持这一需求。...

    Tomcat 源代码调试笔记 - 看不见的 Shell1

    【Tomcat 源代码调试笔记 - 看不见的 Shell】这篇笔记主要探讨了如何在Tomcat运行时动态插入过滤器,以及遇到的问题和解决方法。Tomcat作为一个流行的Java应用服务器,它允许开发者通过Servlet规范中的`...

    tomcat-connectors-1.2.48-src

    《深入理解Tomcat连接器:剖析tomcat-connectors-1.2.48-src源码》 Tomcat作为一款广泛使用的开源Java应用服务器,其在处理Web应用方面扮演着核心角色。而Tomcat的连接器(Connector)是其与外部世界交互的关键组件...

    tomcat-redis-session-manager-1.2-tomcat-6&7

    "tomcat-redis-session-manager-1.2-tomcat-6.jar" 和 "tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar" 是针对Tomcat 6和Tomcat 7的Redis Session Manager实现,这两个jar文件提供了将Tomcat的session存储...

    tomcat-redis-session-manager支持tomcat7

    因tomcat7使用redis共享session,其他的包存在问题,自己编译后处理通过。 该包是在https://github.com/jcoleman/tomcat-redis-session-manager 将源码编译后的包。

    tomcat-redis-session-manager-1.2-tomcat-6.jar

    用于配置 tomcat-redis-session-manager

    tomcat-connectors-1.2.32-src.tar.gz

    这个名为“tomcat-connectors-1.2.32-src.tar.gz”的压缩包包含了用于在Linux环境下进行Apache和Tomcat整合的源代码,让我们一起深入探讨其背后的原理和操作步骤。 一、Apache Tomcat Connectors简介 Apache ...

    apache-tomcat-9.0.2-windows-x64.zip

    还有其他脚本和工具,如`tomcat-juli.jar`,这是Tomcat的日志系统。 2. **conf**:配置文件存放的地方,包括`server.xml`(服务器配置)、`web.xml`(全局Web应用配置)和`context.xml`(特定应用程序上下文配置)...

    apache-tomcat-7.0.63-windows-x64.zip

    2. `conf`:包含服务器配置文件,如`server.xml`(全局配置)、`tomcat-users.xml`(用户和角色的定义)和`web.xml`(默认的Servlet和过滤器配置)。 3. `lib`:存放Tomcat运行所需的JAR文件和其他库。 4. `logs`:...

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于ssm的云的学习笔记系统-ssm-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    apache-tomcat-8.0.47-windows-x64.zip 【Tomcat服务器,Tomcat8 windows 64位版】

    在这个"apache-tomcat-8.0.47-windows-x64.zip"压缩包中,您将获得的是专为Windows 64位操作系统设计的Tomcat服务器。 首先,让我们详细了解一下Tomcat服务器的核心功能和组件: 1. **Catalina**:这是Tomcat的...

    tomcat-redis-session-manager-1.2-tomcat-7.jar

    tomcat-redis-session-manager-1.2-tomcat-7.jar

    tomcat8 tomcat-redis-session-manager

    tomcat8下 tomcat-redis-session-manager , github上有源码,其他版本都有打好的jar包,tomcat 8 下没有,下载源码生成了一个。

    tomcat-cluster-redis-session-manager.zip

    nginx做请求转发,服务器tomcat解决session不同步问题;步骤:1、解压之后,将jar包放入tomcat的lib中(注意是tomcat/lib中,不是我们自己项目的lib);2、配置解压之后的redis-data-cache.properties(根据你的...

    tomcat8.0源码+catalina-home.rar

    通过对Catalina Home的源码分析,我们可以深入理解Tomcat如何加载和解析配置,如何管理Web应用,以及如何处理请求和响应。这对于优化应用性能、调试问题以及扩展Tomcat功能都有着极大的帮助。 总的来说,掌握Tomcat...

    分布式session分享tomcat-redis-session-manager-master

    tomcat-redis-session-manager-master为tomcat集群分布式session分享功能,详细信息见http://blog.csdn.net/fengshizty?viewmode=list对应内容

    jakarta-tomcat-connectors-1.2.15-src.tar.gz

    深入学习jakarta-tomcat-connectors-1.2.15-src源码,可以提升对Tomcat工作流程的理解,包括请求的接收、处理、响应过程,以及如何通过连接器优化服务器性能。这对于进行性能调优、定制化开发或者排查系统问题都至关...

Global site tag (gtag.js) - Google Analytics