jsp脚本中包含9个内置对象,这9个内置对象都是servlet API接口的实例,只是jsp规范对他们进行了默认初始化(由jsp页面对应servlet的_jspservice()方法来创建这些实例)。也即是说,他们已经是对象,可以直接使用。9个内置对象为:
1、application:javax.servlet.servletContext的实例,该实例代表jsp所属的web应用本身,可用于jsp页面,或者在servlet之间交换信息。常用的方法有getattribute(string attname)、setattribute(string attname,string attvalue)和getinitparameter(string paramname)等。
2、config:javax.servlet.servletconfig的实例,该实例代表该jsp的配置信息。常用的方法有getinitparameter(string paramname)和getinitparameternames()等方法。事实上,jsp页面通常无需配置,也就不存在配置信息。因此,该对象更多的在servlet中有效。
3、exception:java.lang.throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的iserrorpage属性为true时,该对象才可以使用。常用的方法有getmessage()和printstacktrace()等。
4、out:javax .servlet.jsp.jspwriter的实例,该实例代表jsp页面的输出流,用于输出内容,形成html页面。
5、page:代表页面本身,也就是servlet中的this,其类型就是生成的servlet类,能用page的地方就用this。
6、pagecontext:javax.servlet.jsp.pagecontext的实例,该对象代表该jsp页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getservletcontext()和getservletconfig()等。
7、request:javax.servlet.http.httpservletrequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象中。这是一个常用对象,获取客户端请求参数必须使用该对象。常用的方法有getparameter(string paramname)、getparametervalues(string paramname)、setattribute(string attrname , object attrvalue)、getattribute(string attrname)和setcharacterencoding(string env)等。
8、response:javax.servlet.http.httpservletresponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用的方法有getoutputstream()、sendredirect(java.lang.string location)等。
9、session:javax.servlet.http.httpsession的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,回话开始;当客户端关闭浏览器时,会话结束。常用的方法有:getattribute(string attrname)、setattribute(string attrname,object attrvalue)等。
在jsp页面对应生成的servlet类文件中:
1、application对象
对于大部分的浏览器而言,它通常负责完成三件事情:
(1)向远程服务器发送请求
(2)读取远程服务器返回的字符串数据
(3)负责根据字符串数据渲染出一个丰富多彩的页面
对于客户端的请求,web服务器响应步骤如下:
(1)启动单独的线程
(2)使用I/O流读取用户的请求数据
(3)从请求数据中解析参数
(4)处理用户请求
(5)生成响应数据
(6)使用IO流向客户端发送请求数据
jsp、servlet之间如何交换数据:几乎所有web服务器都会提供4个类似map的结构,分别是application、session、request、page,并允许jsp、servlet将数据放入其中,也允许从其中取出数据。这4个map结构的区别是范围不同:
application:对于整个web应用有效,一旦jsp、servlet将数据存入application中,该数据将可以被该应用下其他所有的jsp、servlet访问。
session:仅对一次会话有效,一旦jsp、servlet将数据放入session中,该数据将可以被本次会话的其它所有的jsp、servlet访问。
request:仅对本次请求有效,一旦jsp、servlet将数据放入request中,该数据将可以被该次请求的其它jsp、servlet访问。
page:仅对当前页面有效,一旦jsp、servlet将数据放入page中,该数据只看了一被当前页面的jsp脚本、声明部分访问。
application对象代表web应用本身,因此使用application来操作web应用的相关数据。application对象通常有如下两个作用:
(1)在整个web应用的多个jsp、servlet之间共享数据
(2)访问web应用的配置参数
①、让多个jsp、servlet共享数据
application通过setattribute(string attrname ,object value)方法将一个值设置成application的attrname属性,该属性的值对整个web应用有效,访问属性的方法为getattribute(string attrname)。
②、获取web应用配置参数
上边代码使用application的getinitparameter(string paramname)来获取web应用的配置参数,这些参数在web.xml文件中使用context-param元素配置。
2、config对象
config对象代表当前jsp配置信息,该对象在servlet中用处较大,因为servlet需要在web.xml文件中进行配置,可以指定配置参数。
使用config获取jsp配置参数:
web.xml文件中的对应配置:
3、exception对象
exception对象是throwable的实例,代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分。
在jsp的异常处理机制中,一个异常处理页面可以处理多个jsp页面脚本部分的异常。异常处理页面通过page指令的errorpage属性确定。
当jsp页面page指令的iserrorpage为true时,该页面就会提供exception对象。
4、out对象
out对象代表一个页面输出流,通常用于在页面上输出变量值及常量。一般使用输出表达式的地方,都可以使用out对象达到同样的效果。
注意:<%=.... %>的本质就是out.write(......)
5、pagecontext对象
这个对象代表页面上下文,该对象主要用于访问jsp之间的共享数据。使用pagecontext可以访问page、request、session、application范围的变量。
pagecontext是pagecontext类的实例,它提供了如下两个方法访问page、request、session、application范围的变量。
(1)getattribute(string name):取得page范围内的name属性
(2)getattribute(string name, int scope):取得指定范围的name属性,其中scope可以是如下4个值:
①、pagecontext.page_scope:对应于page范围。
②、pagecontext.request_scope:对应于request范围。
③、pagecontext.session_scope:对应于session范围。
④、pagecontext.application_scope:对应于application范围。
pagecontext还可用于获取其他内置对象,pagecontext对象包含一下方法:
①、servletrequest getrequest():获取request对象
②、servletresponse getresponse():获取response对象
③、servletconfig getservletconfig():获取config对象
④、servletcontext getservletcontext():获取application对象
⑤、httpsession getsession():获取session对象