JSP的九大隐式对象
JSP九大隐式对象l每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照servlet的调用方式进行调用。l由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变
JSP九大隐式对象
JSP九大隐式对象
out隐式对象
2.out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
3.JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,
甚至关闭它的缓存。
4.只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对
象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
(1)设置page指令的buffer属性关闭了out对象的缓存功能
(2)out对象的缓冲区已满
(3)整个JSP页面结束
同时使用out和response.getWriter()输出数据:
<body>
<%
out.println("aaa");
response.getWriter().write("bbb");
%>
<%
out.write("abc") ;
// out.flush() ; abcdef 也可以把buffer设为0(一般不这么设,因为缓存可以提高效率)
response.getWriter().write("def") ;
%>
</body>
pageContext对象
代表的是一个页面的上下文对象
作用:
1.作为域对象(页面范围)
本身是一个域对象,存的数据只能当前页面来访问。还能操作其他的三个域对象(ServletRequest HttpSessionServletContext)中的数据
(1)本身是一个域对象(页面范围):PageContext内部有一个Map<String,Object>
voidsetAttribute(String key,Object value)
voidremoveAttribute(String key)
Object getAttribute(Stringkey)
特点:放的数据,只能当前页面中来用
(2)操作其他的三个域对象(ServletRequestHttpSession ServletContext)中的数据
voidsetAttribute(String key,Object value,int scope)
voidremoveAttribute(String key,int scope)
ObjectgetAttribute(String key,int scope)
scope:
PageContext.PAGE_SCOPE 页面范围
PageContext.REQUEST_SCOPE 请求范围
PageContext.SESSION_SCOPE 会话范围
PageContext.APPLICATION_SCOPE 应用范围
<body>
<!-- pageContext对象的第一个作用: 1. 作为域对象
a.存储数据
-->
<%
pageContext.setAttribute("name", "张无忌") ;
pageContext.setAttribute("name1", "张三丰",PageContext.SESSION_SCOPE) ;
%>
<%
String name = (String) pageContext.getAttribute("name") ;
out.write(name) ;
String name1 = (String) session.getAttribute("name1") ;
out.write(name1) ;
%>
</body>
3.jsp:
<body>
从pageContext对象中拿取数据:
<%
String name = (String) session.getAttribute("name1") ;
out.write(name) ;
%>
</body>
存:
取:
(3)从四大域范围中查找数据
Object obj = pageContext.findAttribute(String key)
依次从页面、请求、会话、应用范围查找指定的key值,找到为止。
<body>
pageContext对象从4个范围中寻找数据:
<%
// pageContext.setAttribute("name", "张三丰") ;
//request.setAttribute("name", "张无忌") ;
// session.setAttribute("name", "张翠山") ;
application.setAttribute("name", "张果老") ;
%>
<%
String name = (String) pageContext.findAttribute("name1") ;
out.write(name) ;
%>
</body>
2.获得其他8个隐式对象
<body>
pageContext对象的第二个作用: 获取其他8个对象
两种写法没有任何差别
<%
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest() ;
req.setAttribute("name", "东方不败") ;
request.setAttribute("name", "张三丰") ;
%>
<%
String name = (String) pageContext.findAttribute("name") ;
out.write(name) ;
%>
</body>
打出张三丰,因为是一样的,所以被覆盖掉了
3.请求转发和请求包含
<body>
pageContext对象的第三个作用: 请求转发和请求包含
<%
request.setAttribute("name", "东方不败") ;
//请求转发
// pageContext.forward("/7.jsp") ;
//请求包含
pageContext.include("/7.jsp") ;
%>
</body>
<body>
77777777
pageContext对象的第三个作用: 请求转发和请求包含
<%
String name = (String) request.getAttribute("name") ;
out.write(name) ;
%>
</body>
更多推荐
所有评论(0)