1.内置对象概述
内置对象:不需要手动声明,就可以使用的对象,称为内置对象;
JSP一共有9个内置的对象,如下:
对象名
类型
说明
request
javax.servlet.http.HttpServletRequest
response
javax.servlet.http.HttpServletResponse
session
javax.servlet.http.HttpSession
由session=“true”开关
application
javax.servlet.ServletContext
exception
java.lang.Throwable
由isErrorPage=“false”开关
page
java.lang.Object
当前servlet实例
config
javax.servlet.ServletConfig
pageContext
javax.servlet.jsp.JspWriter
out
javax.servlet.jsp.PageContext
javax.servlet.jsp.JspWriter
查看JSP翻译之后的源码的确可以看到这9个内置对象:
out对象:JspWriter类型,负责页面数据输出
response对象:HttpServletResponse类型,负责响应浏览器的请求
request对象:HttpServletRequest类型,负责接收浏览器发送过来的请求参数,例如表单的信息…
session对象:HttpSession类型,负责封装用户请求会话的相关信息,例如用户的登录状态…
application对象:ServletContext类型,负责封装WEB应用相关应用
pageContext对象:PageContext类型,封装网页属性相关信息
page对象: Object类型,封装当前JSP页面信息
config对象: ServletConfig类型,封装了JSP的配置
exection对象: thowable类型,封装JSP的异常信息
2.Out对象
是JspWriter类型字符流
out和 response.getWriter() 不是同一个流
out流 和 response.getWriter() 都是字符流 都有缓冲区
out流的执行是 先把 缓冲区中的内容 输出到 response.getWriter()的缓冲区中,再由response.getWriter() 这个流统一输出。
示例代码:
3.pageContext对象
3.1.域对象
可以操作其他三个域对象(request,session,application)的数据
常用方法:void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域对象的方法:
void setAttribute(String name,Objecto,int Scope);
Object getAttribute(String name,intScope);
void removeAttribute(String name,intScope);
Scope作用域,值如下:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(Stringname)自动从page,request ,session ,application依次查找,
找到了就取值,结束查找 (作用域的范围由小到大)
3.2.它可以创建其它的8个隐式对象
在普通类中可以通过PageContext获取其它JSP隐式对象,具体如下:
getException方法返回exception隐式对象getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
3.3. 提供了简易方法
pageContext.forward(“2.jsp”);pageContext.include(“2.jsp”);
3.4.代码示例
pageContext.setAttribute("pageKey", "pageValue",PageContext.PAGE_SCOPE);//pageContext.setAttribute("pageKey", "pageValue")
pageContext.setAttribute("requestKey","requestValue",PageContext.REQUEST_SCOPE);
//request.setAttribute("requestKey","requestValue");
pageContext.setAttribute("sessionKey","sessionValue",PageContext.SESSION_SCOPE);
//sessionsetAttribute("sessionKey","sessionValue");
pageContext.setAttribute("applicationKey","applicationValue",PageContext.APPLICATION_SCOPE);
//application.setAttribute("applicationKey","appicationValue");
4.request对象
_jspService方法的参数 HttpServletRequest类型。用法与Servlet中的request用法相同
5.response对象
_jspService方法的参数 HttpServletResponse类型。用法与Servlet中的response用法相同
6.session对象
HttpSession类型
7.application对象
ServletContext类型,用法和Servlet中的ServletContext用法相同
8.config对象
ServletConfig类型,用法和Servlet中的ServletConfig用法相同
9.page对象
this指的是当前的Servlet的实例,由于该对象被赋值给了Object类型,如果使用需要进行向下转型
但是,后期一般我们不去直接使用这个对象,往往会把这个对象当成第4个作用域来使用。
使用PageContext对象来操作page作用域中的数据
page作用域中的数据,只能在当前页面中使用,它的作用范围是当前的servlet,转发之后不能获取page域中的数据。
4个作用域的关系
application > session > request > page(仅当前页面(Servlet)中可以使用)
10.exception对象
Throwable类型,只有当jsp的isErrorPage="true"时,才会出现该对象。