1、什么是内置对象?
在jsp开发中,会频繁使用到一些对象,如:HttpSession,ServletContext,HttpServletRequest。
如果每次使用这些对象时,都要去创建对象 显示非常麻烦。所有sun公司就设计jsp时,在jsp页面加载完毕后会自动帮助开发者创建好这些对象,而开发者只需要直接使用这些对象去调用方法即可,这些创建好的对象就叫内置对象。
举例:
Servlet: HttpSession session = Request.getSession(true);(需要开发者动手做) Jsp: Tomcat服务器: HttpSession session = request.getSession(true);(不需要开发者动手做) 开发者只需要用session对象去调用相应的方法即可,比如:session.getId();
2、9大内置对象
内置对象名 | 对应类型 |
request response config application session exception page out pageContext |
HttpServletRequest HttpServletResponse ServletConfig ServletContext HttpSession Throwable Object(this) JspWriter pageContext |
2.1、Out 对象
out对象是jspWrite类中的,相当于带缓冲的PrintWriter
printWriter:
writer(内容):直接向浏览器写出内容
jspWriter
writer(内容):向jsp缓冲区写出内容
当满足以下条件之一,缓冲区内容就会写出(如下面代码)
1) 缓冲区满了
2) 刷新缓冲区
3) 关闭缓冲区
4) 执行完jsp页面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" buffer="1kb" %> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'MyJsp.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 </head> 23 <body> 24 <% 25 //方法1:顶部设置缓冲区的大小为1Kb(buffer="1kb") 26 for(int i=1;i<=500;i++){ 27 out.write("123"); 28 } 29 //查看缓冲区大小 30 System.out.println("当前缓冲区的大小:"+out.getBufferSize()); 31 //查看缓冲区剩余大小 32 System.out.println("剩余缓冲区大小:"+out.getRemaining()); 33 //方法2:刷新缓存 34 //out.flush(); 35 36 response.getWriter().write("a"); //解析:方法1或2,都能让123先输出来,最后输出a;如果两者都去掉,那么先输出a,后输出123. 37 %> 38 </body> 39 </html>
2.2、pageContext 对象
PageContext对象类型是PageContext,叫jsp的上下文对象
2.2.1、可以获取其他八个内置对象
1 public class pageContext{ 2 public void _jspService(){ 3 //创建了对象 4 HttpSession session=””… 5 ServletConfig config=””…. 6 //把8个常见使用的内置对象封装到了PageContext对象中了 7 public void method(PageContext pageContext){ 8 //从pageContext对象中获取其他八个内置对象 9 JspWriter out=pageContext.getOut(); 10 .... 11 } 12 } 13 }
2.2.2、pageContext 对象,本身就是一个域对象
ServletContext context域对象
HttpServletRequest request域对象
HttpSession session域对象
PageContext page 域对象
作用:保存数据和获取数据,用于共享数据
#保存数据
1)默认情况下,保存到page域:PageContext.setAttribute(“name”);
2)可以向四个域对象保存数据:PageContext.setAttribute(“name”,域范围常量);
#获取数据
1)默认情况,从page域获取:PageContext.getAttribute(“name”);
2)可以从4个域中获取数据:PageContext.getAttribute(“name”,域范围常量);
域范围常量
PageContext.PAGE_Scope
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
3)自动在四个域中搜索数据:PageContext.findAttribute(“name”);
顺序:page域 ----> request域 ----> session域 ----> context域(application域) 注:请求转发:request就有值;浏览器不关闭:session就有值;服务器不关闭:context域(application域)就有值
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>pageContext对象</title> 6 </head> 7 <body> 8 <% 9 //1)可以获取其他八个内置对象 10 response.getWriter().write("是否相等?"+(out==pageContext.getOut())+"<br/>"); 11 response.getWriter().write("是否相等?"+(session==pageContext.getSession())+"<br/>"); 12 %> 13 <%-- 14 2)pageContext作为作用域对象使用 15 2.1可以往不同域对象存取数据 16 --%> 17 <% 18 //保存数据,默认情况下,保存在page域中 19 pageContext.setAttribute("message","page message"); 20 pageContext.setAttribute("message","request message",pageContext.REQUEST_SCOPE);//保存到request域中 21 pageContext.setAttribute("message", "session message",pageContext.SESSION_SCOPE);//保存到session域中 22 pageContext.setAttribute("message","application message",PageContext.APPLICATION_SCOPE);//保存到context域中 23 // request.setAttribute("message","request message");//等价于上面代码 24 %> 25 <% 26 //获取数据 27 String message=(String)pageContext.getAttribute("message"); 28 out.write(message); 29 %> 30 <%-- 31 原则: 32 1)在哪个域中存储数据,就必须在哪个域中取出数据!!! 33 --%> 34 <hr/> 35 <%=pageContext.getAttribute("message",pageContext.PAGE_SCOPE) %><br/> 36 <%=pageContext.getAttribute("message",pageContext.REQUEST_SCOPE) %><br/> 37 <%=pageContext.getAttribute("message",pageContext.SESSION_SCOPE) %><br/> 38 <%=pageContext.getAttribute("message",pageContext.APPLICATION_SCOPE) %><br/> 39 <hr/> 40 <%-- findAttribute():在四个域中自动搜索数据 41 顺序:page域-->request域--->session域--->application域 42 --%> 43 44 <%=pageContext.findAttribute("message") %><br/> 45 <%=session.getAttribute("message") %> 46 <% 47 //转发 48 //request.getRequestDispatcher("/pageContext2.jsp").forward(request, response); 49 response.sendRedirect("/pageContext2.jsp"); 50 %> 51 </body> 52 </html>
3、jsp中的四个域对象
PageContext page域
request reuquest域
session session域
application context域
1)域对象的作用
保存数据和获取数据 ,用于数据共享.
2)域对象方法
SetAttribute(“name”,Object)保存数据
getAttribute(“name”)获取数据
removeAttribute(“name”)清除数据
3)域对象的范围
Page域:只能在当前jsp页面使用(当前页面)
Request域:只能在同一个请求中使用(转发)
Session域:只能在同一个会话(Seesion对象)中使用(私有的)
Context域:只能在同一个文本应用中使用(全局的)
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'pageContext3.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 page域 <%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/> 27 reuest域 <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/> 28 session域 <%=pageContext.getAttribute("message",pageContext.SESSION_SCOPE) %><br/> 29 context域 <%=pageContext.getAttribute("message",pageContext.APPLICATION_SCOPE) %><br/> 30 </body> 31 </html>
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/9816583.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |