JSP九大隐式对象

l每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一
servlet)
然后按照servlet的调用方式进行调用。
l由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序
执行效率不会受到影响。
JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用

JSP九大隐式对象

l request
l response
l config
l application
l exception
l Session
l page
l out
l pageContext
定义:就是JSP对应的Servlet中的service方法中定义的那些变量



out隐式对象

1.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.作为域对象(页面范围)

lpageContext对象的方法
üpublic voidsetAttribute(java.lang.String name,java.lang.Object value)
üpublicjava.lang.Object getAttribute(java.lang.String name)
üpublicvoid removeAttribute(java.lang.String name)
lpageContext对象中还封装了访问其它域的方法
üpublicjava.lang.Object getAttribute(java.lang.String name,int scope)
üpublic voidsetAttribute(java.lang.String name,java.lang.Object value,int scope)
üpublicvoid removeAttribute(java.lang.String name,int scope)
l代表各个域的常量
üPageContext.APPLICATION_SCOPE
üPageContext.SESSION_SCOPE
üPageContext.REQUEST_SCOPE
üPageContext.PAGE_SCOPE
findAttribute方法     

本身是一个域对象,存的数据只能当前页面来访问。还能操作其他的三个域对象(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 应用范围


2.jsp:

<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.请求转发和请求包含

6.jsp:
<body>
  	pageContext对象的第三个作用: 请求转发和请求包含
      
      <%
		   request.setAttribute("name", "东方不败") ;
  			//请求转发	
  		//	pageContext.forward("/7.jsp") ;
  			//请求包含
  			pageContext.include("/7.jsp") ;
      %>
      
  </body>

7.jsp:
<body>
  77777777
  	pageContext对象的第三个作用: 请求转发和请求包含
      
      <%
		  String name = (String) request.getAttribute("name") ;
  		  out.write(name) ;
      %>
      
  </body>


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐