主要介绍9大内置对象。
浏览器通常负责完成三件事:
(1)向远程服务器发送请求。
(2)读取远程服务器返回的字符串数据。
(3)负责根据字符串数据渲染出一个丰富多彩的页面。
Web服务器则负责接收客户端请求,每当接收到客户端连接请求之后,Web服务器应该使用单独的线程为该客户端提供服务:接收请求数据、送回响应数据。
这种架构叫:“请求/响应”架构。
Web服务器大致需要完成如下几个步骤:
①启动单线程
②使用I/O流读取用户请求的二进制流数据
③从请求数据中解析参数
④处理用户请求
⑤生成响应数据
⑥使用I/O流向客户端发送请求数据
Web应用里的JSP页面,Servlet等程序都将由Web服务器来调用,JSP、Servlet之间通常不会相互调用,这就产生了一个问题:JSP、Servlet之间如何交换数据。
为了解决这个问题,提出了4个Map结构,这四个区别主要是范围不同:
①application 对于整个Web应用有效,即JSP、Servlet数据可以被同一应用下的其他JSP、Servlet访问。
②session 仅对于一次会话有效,即JSP、Servlet数据可以被本次会话的其他所有JSP、Servlet访问。
③request 仅对本次请求有效,即JSP、Servlet数据可以被该次请求的其他的JSP、Servlet访问。
④page 仅堵当前页面有效,即JSP、Servlet数据可以被当前页面的JSP脚本、声明部分访问。
详解九大内置对象::
一、application
application对象代表Web应用本身,通常有如下两个作用:
(1)在整个web应用的多个JSP、Servlet之间共享数据。
(2)访问Web应用的配置参数。
二、config
config代表当前JSP配置信息,但JSP页面通常无需配置,因此也就不存在配置信息,所以JSP页面比较少用该对象。但在Servlet中则用处比较大,因为Servlet需要在web.xml文件中进行配置,可以指定配置参数。
三、exception
exception对象是Throwable的实例,代表JSP脚本中产生的错误和异常,是JSP页面异常机制的一部分。
在JSP脚本中无须处理异常,即使异常是checked异常。事实上,JSP脚本包含的所有可能出现的异常都可以交给错误处理页面处理。
在JSP页面中,普通的JSP脚本只执行第一部分——代码处理段,而异常处理页面负责第二部分——异常处理段。在异常处理段中,可以看到有个异常对象,该对象就是内置对象exception。
_jspx_page_context对异常处理也非常简单:如果该页面的page指令指定了errorPage属性,则将请求forward到errorPage属性指定的页面,否则使用系统页面来输出异常信息。
四、out
out对象代表一个页面输出流,通常用于在页面上输出变量值和常量。
五、pageContext
pageContext代表页面上下文,该对象主要用于范文JSP之间的共享数据。使用pageContext可以访问page、request、session、application范围的变量。
六、requset
request对象时JSP中重要的对象,每个requset对象封装着一次用户请求,并且所有的请求参数都封装在request对象中,因此request对象是获取请求参数的重要途径。
关于表单域和请求参数的关系遵循如下4点:
①每个有name属性的表单域对应一个请求参数。
②如果有多个表单域有相同的name属性,则多个表单域只生成一个请求参数,只是该参数有多个值。
③表单域的name属性指定请求参数名,value指定请求参数值。
④如果某个表单域设置了disabled=“disabled”属性,则该表单域不在生成请求参数。
request用处:
①获取请求头/请求参数
②操作request范围的属性
③执行forward或include
七、response
response代表服务器对客户端的响应。大部分时候,程序无需使用response来响应客户端请求,因为有个更简单的响应对象——out,它代表页面输出流,直接使用out生成响应更简洁。但out是JspWriter的实例,JspWriter是Writer的子类,Writer是字符流,无法输出非字符流内容。
response用处:
①response响应生成非字符流响应
②重定向
重定向与forward不同的是:重定向会丢失所有的请求参数和request范围的属性,因为 重定向将生成第二次请求,与第一次请求不在同一个request范围内,所以发送一次请求参数和request范围的属性全部丢失。
③增加Cookie
Cookie通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好等。一但用户下次登录,网站可以获取客户的相关信息,根据这些信息,网站可以对客户提供更友好的服务。Cookie与session的不同之处在于:session会随着浏览器的关闭而关闭,但Cookie会一直存放在客户端机器上,除非超出Cookie的生命周期。
增加Cookie请按如下步骤:
①创建Cookie实例,Cookie的构造器为Cookie(String name ,String value)
②设置Cookie的生命期限,即该Cookie在多长时间内有效
③向客户端写Cookie
八、session
session对象是一个非常常用的对象,这个对象代表一次用户会话。一次用户会话的含义是:客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。
session通常用于跟踪用户的会话消息,如判断用户是否登录系统,或者在购物车应用中,跟踪用户购买的商品等。
session范围的属性可以在多个页面的跳转之间共享。一旦关闭浏览器,即session结束,session范围的属性将全部丢失。
session的属性值可以是任何可序列化的Java对象。