首先,有两个概念:
1.JSP页面的域对象:pageContext,request,session,application对象(四个)
void setAttribute(String name,Object o):设置属性名对应的属性值
Object getAttribute(String name):获取指定属性名的属性值
Enumeration getAttributeNames():获取所有的属性名组成的Enumeration对象
removeAttribute(String name):移除指定属性名的属性
pageContext<request<session<application对象(对属性的作用域的范围从小到大)都有这些方法,这四个对象称之为域对象。
pageContext:属性的作用范围仅限于当前JSP页面
request:属性的作用范围仅限于同一个请求
session:属性的作用范围仅限于一次会话
application:属性的作用范围限于当前WEB应用,是范围最大的属性作用范围。只要在一处设置属性,在其他各处的JSP或Servlet中都可以获取到。
2.JSP页面的隐含对象:没有声明就可以使用的对象,共9个。
①request:HttpServletRequest的一个对象
②response:HttpServletResponse的一个对象
③pageContext:页面的上下文,是PageContext的一个对象。
可以从该对象中获取到其他8个隐含对象,
也可以从中获取到当前页面的其他信息(在自定义标签时,可以获取比如属性,参数等):
定义一个类:HelloSimpleTag.java
然后在TestTag.jsp页面里使用tt:helloSimple标签
从上面的例子中可以看出,pageContext确实可以获取到request、out等对象。
注意:不是说这9个对象就不能在servlet程序里调用,只是说在JSP页面里可以直接调用这9个对象而不需要先获取到对象。
比如:在JSP页面就可以直接调用session对象:session.getAttribute。
而在servlet程序里如果要调用session对象,必须先获取到session对象才可以使用:request.getSession().setAttribute。
又比如在上面的HelloSimpleTag.java里,存在一个函数setJspContext,这个函数就传入了一个JspContext对象。所以我们可以利用该对象强转成pageContext对象,这样就在java程序里获取到了pageContext对象。于是此时才可以利用该对象获取其他隐含对象比如request、out等对象,然后再利用request、out去实现想实现的功能。
④session:代表浏览器和服务器的一次会话,是HttpSession的一个对象
⑤application:代表当前WEB应用,是ServletContext对象
⑥config:当前JSP对应的Servlet的ServletConfig对象(了解)
⑦out:JspWriter对象,调用out.println()可以直接把字符串打印到浏览器上
⑧page:指向当前JSP对应的servlet对象的引用(了解)
⑨exception:在JSP文件的开头声明了Page指令的isErrorPage="true"时,才可以使用.
<%@ page isErrorPage="true">