[关闭]
@lzb1096101803 2016-03-11T09:58:36.000000Z 字数 2634 阅读 469

JSP 9大内置对象,转发和重定向的区别

电话面试


转发和重定向的区别

比喻:
请求转发:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己完成不了,于是B请C帮忙,C接收到B的请求后最终完成了该项工作,并把最后的结果返回给A。此过程A只发送了一次请求给B,A只知道把请求发给B,至于B是怎么完成的A并不关心,他只等待最终的结果。
重定向:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己无法完成,就立即告诉A情况,并向A推荐C可以完成该项工作,于是A就找C帮忙,C最终完成该项工作,返回给A。

不同点:
1、浏览器地址栏显示不同(表面区别):
无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;
如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。

2、组件之间可否共享信息不同(本质区别)
一句话概括:重定向是客户端行为,转发是服务器行为.

  1. 请求次数:
    重定向:重定向行为是做了两次请求,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,及产生了两个request对象,重定向会导致request对象信息丢失。
    请求转发:转发做了一次请求,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象, 浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。
  2. 请求资源地址:
    重定向:web组件可以将请求重定向到任意一个url,而不仅仅是同一个应用。 重定向的源组件与目标组件不共用同一个HttpServletRequest对象,因此不能在request范围内共享数据。
    请求转发:转发的源组件与目标组件必须在同一个应用中,两者可以在request范围内共享数据。

  3. 工作流程:

    • 重定向:
      浏览器发出http请求 >> 服务器接受请求并发送302状态码和新的对应的url到浏览器 >>
      浏览器接收响应并自动请求新的url >> 服务器接收请求并寻找客户所需的资源响应到浏览器
    • 转发
      浏览器发出http求其 >> 服务器接收请求 >> 服务器调用内部的一个方法在容器内完成请求处理和转发动作 >>
      将客户所需资源发送到浏览器
  4. 实现方式不同:

    • 请求转发的实现步骤:
      1).request.getRequestDispatcher(url).forward(request,response);
      2).request.getRequestDispatcher(url).include(request,response);
      3).

    • 重定向的实现步骤:
      1).response.sendRedict(url);
      2).response.setState(302);
      response.setHeader("location",url);

相同点: 两者都可以进行多次请求的转发。

JSP九大内置对象

SP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

1、request对象

request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

2、response对象

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

3、session对象

session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

4、application对象

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

5、out 对象

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

6、pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

7、config 对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

8、page 对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

9、exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注