写点什么

JSP 的内置对象

作者:java易二三
  • 2023-08-09
    湖南
  • 本文字数:2797 字

    阅读完需:约 9 分钟

Jsp 的内置对象什么是内置对象: 在 jsp 开发中,会频繁使用到一些对象, 例如 HttpSession, ServletContext, ServletContext, HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以 Sun 公司设计 Jsp 时,在 jsp 页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可!这些创建好的对象就叫内置对象!举例:servlet: HttpSession session = request.getSession(true); (需要开发者做)jsp:tomcat 服务器: HttpSession session = request.getSession(true);(不需要开发者做)开发者做的: session.getId();JSP-9 大内置对象(内置对象名 : 类型)request : HttpServletRequestresponse : HttpServletResponseconfig : ServletConfigapplication : ServletContextsession : HttpSessionexception : Throwablepage : Object(this)out : JspWriterpageContext : PageContextOut 对象 out 对象类型,JspWriter 类,相当于带缓存的 PrintWriterPrintWriter.wrier(内容) : 直接向浏览器写出内容 JspWriter.writer(内容) : 向 jsp 缓冲区写出内容(默认 8kb)JSP 页面缓冲机制 :JspWriter 首先写到 JspWriter 缓冲区, 然后当缓冲区满足下面 4 个条件时, 缓冲区的内容会向外写入 PrintWriter 到的对象当中,最后 PrintWriter 的 write 方法直接输送到浏览器中当满足以下条件之一,缓冲区内容写出:1)缓冲区满了 :2)刷新缓存区 : out.flush3)关闭缓存区 : buffer = "0kb"4)执行完毕 jsp 页面 :方法:out.flush() : 刷新缓存 out.getRemaining : 查看缓冲区剩余大小 out.getBufferSize : 查看缓冲区大小<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="1kb"%><%for(int i=1;i<=1024;i++){out.write("a");}//查看缓存区大小 System.out.println("当前缓存区大小:"+out.getBufferSize());//查看缓存区剩余大小 System.out.println("缓存区剩余大小:"+out.getRemaining());//刷新缓存//out.flush();response.getWriter().write("123");%></body></html>pageContext 对象 pageContext 对象的类型是 PageContext,叫 jsp 的上下文对象可以从 PageContext 对象中获取其他 8 个内置对象使用场景: 在自定义标签的时候,PageContext 对象频繁使用到!JspWriter out =pageContext.getOut();HttpServletRequest rquest = pageContext.getRequest();本身是一个域对象 ServletContext : context 域 HttpServletRequet : request 域 HttpSession : session 域 Servlet 中的域对象: ServletContext, HttpServletRequet, HttpSessionPageContext : page 域 (jsp 特有的)作用 : 保存数据和获取数据,用于共享数据


保存数据 1)默认情况下,保存到 page 域 : pageContext.setAttribute("name");2)可以向四个域对象保存数据 : pageContext.setAttribute("name",域范围常量)


获取数据 1)默认情况下,从 page 域获取 : pageContext.getAttribute("name")2)可以从四个域中获取数据 : pageContext.getAttribute("name",域范围常量)


域范围常量:PageContext.PAGE_SCOPEPageContext.REQUEST_SCOPEPageContext..SESSION_SCOPEPageContext.APPLICATION_SCOPE3)自动在四个域中搜索数据: pageContext.findAttribute("name");


顺序 : page 域 -> request 域 -> session 域- > context 域(application 域)


Jsp 中的四个域对象 :简介:pageContext : page 域 request : request 域 session : session 域 application : context 域域对象作用:保存数据和获取数据, 用于数据共享域对象方法:setAttribute("name",Object) : 保存数据 getAttribute("name") : 获取数据 removeAttribute("name") : 清除数据域对象作用范围:page 域 : 只能在当前 jsp 页面中使用 (当前页面)request 域 : 只能在同一个请求中使用 (转发)session 域 : 只能在同一个会话 (session 对象) 中使用 (私有的)context 域 : 只能在同一个 web 应用中使用(全局的)


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"isErrorPage="true"session="true"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>pageContext 对象</title>


</head>


<body>从四个域中获取数据 page 域 :<% = pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/>request 域 : <% = pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/>session 域 : <% = pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/>context 域 : <% = pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/>


<%    //1)可以获取其他8个内置对象    //response.getWriter().write("是否相等?"+(out==pageContext.getOut()) +"<br/>");    //response.getWriter().write("是否相等?"+(session==pageContext.getSession())); %>  <%--    2)pageContext作为域对象使用            2.1 可以往不同域对象中存取数据  --%>  <%    //保存数据。默认情况下,保存在page域中    pageContext.setAttribute("message","page's message");    pageContext.setAttribute("message","request's messsage",PageContext.REQUEST_SCOPE);//保存到request域中    pageContext.setAttribute("message","session's messsage",PageContext.SESSION_SCOPE);//保存到sessio域中    pageContext.setAttribute("message","application's messsage",PageContext.APPLICATION_SCOPE);//保存到context域中    //request.setAttribute("message","request's message"); 等价于上面的代码
%> <% //获取数据 //String message = (String)pageContext.getAttribute("message"); //out.write(message); %> <%--从request域中取出数据 --%> <%-- 原则: 1)在哪个域中保存数据,就必须从哪个域取出数据!!! --%> <%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/> <%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/> <hr/> <%-- findAttribute(): 在四个域自动搜索数据 顺序: page域 -> request域 -> session域 -> context域 --%> <%=pageContext.findAttribute("message") %> <% //request.getAttribute("message") %><br/> <% //转发 // request.getRequestDispatcher("/03.pageContext2.jsp").forward(request,response); //重定向 response.sendRedirect(request.getContextPath()+"/03.pageContext2.jsp"); %>
复制代码


</body></html>


用户头像

java易二三

关注

还未添加个人签名 2021-11-23 加入

还未添加个人简介

评论

发布
暂无评论
JSP的内置对象_编程_java易二三_InfoQ写作社区