• 1. (1) 什么是转发? (2) 什么是重定向? (3) 他们的区别?
  • 2. 什么是转发? 一个 web 组件(jsp/servlet)将未完成的处理转交给另一个 web 组件继续处理。转发的各个组件会共享 request 和 response 对象。
  • 3. 如何转发? step1 先绑订数据 request.setAttribute(String name,Object obj); step2 获得转发器,转发 RequestDispatcher rd = request.getRequestDispatcher(String uri); rd.forward(request,response);
  • 4. 如果 name 对应的值不存在,返回 null。 跟绑订相关的另外两个方法 Object request.getAttribute(String name); request.removeAttribute(String name);
  • 5. 编程中要注意的问题: 转发之前,不能够执行 out.close 或者 out.flush。 转发之前,会将 response 中缓存的数据先清空。
  • 6. 转发的特点: a. 转发的目的地只能是同一个应用内部的某个组件 b. 转发之后,浏览器地址栏的地址没有变化 c. 转发所涉及的各个组件可以共享同一个 request,response 对象
  • 7. 什么是重定向? 服务器向浏览器发送一个状态码 302 及一个消息头 location,浏览器收到后,会立即向 location 所指向的地址发送请求。
  • 8. 如何重定向? response.sendRedirect(String url); 其中,url 是重定向的地址。
  • 9. 编程要注意的问题? 重定向之前,不能够有 out.close()或者 out.flush()操作。 重定向之前,如果 response 对象缓存有数据,则这些数据会被清空。
  • 10. 重定向的特点 ? 重定向的地址是任意的 重定向之后,浏览器地址栏的地址变成了 location 所指定的地址。
  • 11. forward 和 redirect 的区别? 答:forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标 地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器, 浏览器根本不知道服务器发送的内容是从哪儿来的, 所以它的地址栏中还是原来 的地址。
  • 12. redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请 求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。
  • 13. 前者更加高效,在前者可以满足需要时,尽量使用 forward()方法, 并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。