转发
用户向服务器发送一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求。根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect)。
直接转发(Forward)
客户端和浏览器只发出一次请求。
直接转发是在服务器端工作的。
客户端向服务器的Servlet1发出请求,Servlet1处理不了,把这个请求转移给Servlet2处理,这个请求对象封装了一开始客户端发送请求时封装的信息,参数等(也就是把原来的request转发,而不是新建);Servlet2通过这个请求对象进行处理,把结果通过response发回原客户端浏览器。整个过程只发生一次请求,一次响应。由于宏观上是客户端向Servlet1发出的请求,因此地址栏显示的是Servlet1的地址。
直接转发请求过程:
1.浏览器向Servlet1发出访问请求
2.Servlet1调用forward(),在服务器端将请求转发给Servlet2
3.最终由Servlet2响应。
直接转发相当于:“A找B借钱,B没有,B找C借钱,最后再将结果传递给A”
请求转发资源二可以是WEB-INF中的资源
间接请求转发(Redirect)
间接转发方式也叫重定向,一般用于避免用户的非正常访问。例如:用户在未登录的情况下访问后台资源,Servlet可以将HTTP请求重定向到登录页面。
重定向实际上是指引浏览器指向另一个页面进行请求。地址栏上面显示的是最后响应的地址。间接跳转之后是新建一个新的request,因此不能获得之前request的对象,而直接跳转可以。
间接转发是在浏览器端工作的
间接转发流程:
1.浏览器向Servlet1发出请求
2.Servlet1调用sendRedirect(),将浏览器重定向到Servlet2
3.浏览器向Servlet2发出请求
4.最终由Servlet2做出响应
间接转发请求相当于:“A找B借钱,B没有,B让A去找C借钱”
重定向资源二不可以是WEB-INF中的资源