内置对象在哪里?
Jsp底层实际上还是一个java类,可以在jsp中直接使用的,必然存在在jsp翻译后的java类中
JSP的内置对象9个:
HttpServletRequest request请求 类型 javax.servlet.ServletRequest作用域 Request
HttpServletResponse response响应 类型 javax.servlet.SrvletResponse作用域 Page
HttpSession session session会话 类型 javax.servlet.http.HttpSession作用域 Session
ServletContext application当前项目对象 类型 javax.servlet.ServletContext作用域 Application
ServletConfig config配置 类型 javax.servlet.ServletConfig作用域 Page 专门获取当前这个Servlet的配置信息
Object page = this page 页面 类型 javax.lang.Object作用域 Page 它的表示是当前那个JSP页面对象。
PageContext pageContext页面的上下文对象 类型 javax.servlet.jsp.PageContext作用域 Page 作用:它的主要功能就是可以获取到JSP页面上的其他八个内置对象。
Throwable exception异常 类型 javax.lang.Throwable作用域 page 主要是保存JSP页面上的异常信息的对象
内置对象特点:
1.由JSP规范提供,不用编写者实例化。
2. 通过Web容器实现和管理
3.所有JSP页面均可使用
4.只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)
常用内置对象分类:
1.输出输入对象:request对象、response对象、out对象
2.通信控制对象:pageContext对象、session对象、application对象
3.Servlet对象:page对象、config对象
4.错误处理对象:exception对象
】page对象使用
在JSP页面中,由于page对象被提升成了Object类型。这个page在赋值的时候,赋值的this。
把page当做容器使用的时候,这时它中保存的内容只能在这个JSP页面中使用,在其他的地方无法使用。
问题:为什么数据保存在page容器中,只能在当前jsp页面使用?
Page对象定义在——_JspService()方法中,当方法进栈的时候,对象创建可以存取数据,当方法出栈的时候,page对象也随之消失,所以page中存放的数据只能在当前页面使用。
理解:因为page对象定义在_JSPService方法中,当方法执行完成之后,所有的局部变量都消失,所在page对象中保存的数据,只能在当前的jsp中使用。
Page容器中,应该存什么样的数据?
只在当前页面使用的数据,就应该存在page容器中。
例子:页面使用java代码做循环,比如:i<6,这样的6这个数据,不会再其他页面使用,那么就存入page容器。
总结:web中的四个域对象(容器对象)
Page(当前页面) < request(一次请求) < session(一次会话,多次请求) < ServletContext(整个项目)
为什么request比page范围大?
Request.getrequestdispather(“/index.jsp”).forward(request,response);获取转发器之后,可以将存入请求对象的数据转发到index.jsp这个页面上。Request中存贮的数据,可以跨越一个servlet和一个jsp,因为page中存贮数据,只能在当前页面使用。
简单总结:
一次请求,不止一个页面,一次会话,不止一次请求。
工作的时候:不用page的方法,使用PageContext对象来操作page。