1.同步
(1)页面----------页面
(2)页面----------servlet
三种:
- A链接
<a href=”cxx?key=value&key1=value1”>xx - Form表单: input check…
- Js的方式实现 A链接或者form表单提交:
(1) Window.location.href=”xxx?key=value…”
(2) Xxform.submit();
(3)Servlet--------页面
(4)Servlet--------Servlet
*请求转发:浏览器发出一次请求,转发动作发生在服务器端,客户端不知道。
浏览器地址栏只保留到Servlet1的地址
转发是指浏览器发送请求到servlet1之后,servlet1需要访问servlet2,因此在服务器内部跳转到的servlet2,转发有时也称为服务器内跳转(用户不知道)。整个过程浏览器只发出一次请求,服务器只发出一次响应。所以,无论是servlet1还是servlet2,整个过程中,只存在一次请求,即用户所提交的请求。因此servlet1和servlet2均可从这个请求中获取到用户提交请求时所携带的相关数据。
1)转发器:RequestDispatcher
2)获得转发器的方式?
a. request.getRequestDispatcher(“…”).forward(request,response)
3)ServletContext.getRequestDispatcher(“”).forward…
*重定向:浏览器发出第一次请求之后,服务器返回302并且携带地址,浏览器再次发出请求。两次请求。 客户端参与两次。
重定向是浏览器发送请求到servlet1之后,servlet1需要访问servlet2,但并未在服务器内直接访问,而是由服务器自动向浏览器发送一个响应,浏览器再自动提交一个新的请求,这个请求就是对servlet2 的请求。
对于servlet2的访问,是先由服务器响应客户端浏览器,再由客户端浏览器向服务器发送对servlet2的请求,所以重定向有时又称为服务器外跳转。
整个过程中,浏览器共提交了两次请求,服务器共发送了两次响应。只不过,第一次响
应与第二次请求,对于用户来说是透明的,是感知不到的。用户认为,自己只提交了一次请求,且只收到了一次响应。
这样的话,就会有一个问题:servlet2中是无法获取到用户手动提交请求中的数据的,它只能获取到第二次请求中所携带的数据。
转发和重定向的区别
请求转发:
1.浏览器只发出一次请求,收到一次响应
2.请求所转发到的servlet2中可以直接获取到请求中所携带的数据
3.浏览器地址栏显示的为用户所提交的请求路径servlet1
4.只能跳转到当前应用的资源中
重定向:
1.浏览器发出两次请求,接收到两次响应
2.重定向到的servlet2不能直接获取到用户提交请求中所携带的数据
3.浏览器地址栏显示的为重定向的请求路径,而非用户提交请求的路径。也正因为如此,重定向的一个很重要作用是:防止表单重复提交
4.重定向不仅可以跳转到当前应用的其它资源,也可以跳转到到其它应用中资源
请求转发与重定向的选择
若需要跳转到其它应用,则使用重定向。
若是处理表单数据的Servlet1要跳转到另外的Servlet2上,则需要选择重定向。为了防止表单重复提交。
若对某一请求进行处理的 Servlet 的执行需要消耗大量的服务器资源(CPU、内存),此时这个 Servlet 执行完毕后,也需要重定向。
其它情况,一般使用请求转发。