JSP规范中共定义了九种内建对象,分为为:request,response,out,session,application,config,pageContext,page和exception.
1.request:-----javax.servlet.HttpServletRequest对象,作用范围为页面内。通过getParamter()能够得到请求的参数,请求类型(get,post,head等)及HTTP headers(cookies.referer等)。严格来说request是ServletRequest而不是HttpServletRequest的子类。
2.response
这是一个javax.servlet.HttpServletResponse对象,作用范围为页面内。它的作用是向客户端返回请求。注意,输出流首先要进行缓存。虽然在Servlet中,一旦将结果输出到客户端就不在允许设置http状态码以及response头部文件,但在jsp中进行这些设置时合法的。
3.out
这是一个javax.servlet.jsp.JspWriter对象,作用范围为:页面内。它的作用是将结果输出到客户端。为了使response对象更有用,JspWriter是具有缓存的PrintWriter.注意,可以通过指令元素page属性调整缓存的大小,甚至关掉缓存。也要注意,out在程序码片段中几乎不用,因为JSP表达式自动的放入输入流中,无需指向out输出。
4.session
这是与request相关的一个javax.servlet.http.HttpSession对象,作用范围为会话期内。会话(SESSION)是自动建立的,因此,即使没有引入会话,这变量也是开启的,除非指令元素page属性中关闭它。在这种情况下,如果要参照会话就会在jsp转译成servlet时出错。
5.application
这是一个javax.servlet.ServletContext对象,作用范围为整个应用内。可以通过getServletConfig(),getContext()获得。
6.config 是一个javax.servlet.ServletConfig对象,作用范围为页面内
7.pageContext
这是一个javax.servlet.jsp.PageContext对象,作用范围为页面内。它封装了像高效执行的JspWriter等服务器端得特征。
8.page 这是一个java.lang.Object对象,作用范围为页面内,只是意义相当于java语言中的this.
9.exception
这是一个java.lang.Object对象,作用范围为页面内。仅仅在处理错误页面有效,可以用来处理扑捉到异常
指令元素(page和include)
告诉JSP引擎如何处理其他的jsp网页
<%@page language="脚本语言"
extends="继承的父类类别名称"
import="导入的java类类别名称"
session="true|false"
buffer="none|8kb|自定义缓冲区大小"
autoFlush="true|false"
isThreadSafe="true|false"
info="页面信息"
errorPage="错误处理所执行的相对url"
isErrorPage="true|false"
contentType="MIME类型个字符集"
%>
<%@ include file="relative url"%>
include指令时转译阶段的指令,jsp的转移会先把药包含的文件插入jsp文件,再转译成Servlet。所以include指令所插入的文件必须符合jsp语法.注意的是,如果改变了插入的文件,jsp 不会跟着改变。因为include指令时转译阶段的处理。因此对于不经常变化的内容,用include是合适的,但是如果包含经常变化的,则需要动作元素<jsp:include>
动作元素
用来控制jsp引擎的行为,可以动态的插入文件,重用javabean组件,导向另一个页面等等。
jsp:include---------在页面得到请求时包含一个文件。
jsp:useBean--------应用JavaBean组件
jsp:setProperty-------设置JavaBean的属性
jsp:getProperty-------将JavaBean得属性插入到输出中。
jsp:forward-------------引导请求者进入新的页面
jsp:plugin---------------连接客户端的Applet或Bean插件
jsp:param---------------用来配合传递参数
动作元素与指令元素不同,动作元素是在客户端请求时期动态执行,每次有客户端请求时,可能都会被执行一次;而指令元素实在转译时期被编译执行,它只会编译一次。