在jsp开发中,会频繁使用到一些对象,例如HttpSession, ServletContext, ServletContext, HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫内置对象!!!!
序号 | 内置对象名 | 类型 |
---|---|---|
1 | request | HttpServletRequest |
2 | response | HttpServletResponse |
3 | config | ServletConfig |
4 | application | ServletContext |
5 | session | HttpSession |
6 | exception | Throwable |
7 | page | Object(this) |
8 | out | JspWriter |
9 | pageContext | PageContext |
out对象类型,JspWriter类型,相当于带缓存的PrintWriter
对比JspWriter和PrintWriter:
PrintWriter: wrier(内容): 直接向浏览器写出内容。
JspWriter:writer(内容): 向jsp缓冲区写出内容
当满足以下条件之一,缓冲区内容写出:
1)缓冲区满了
2)刷新缓存区
3)关闭缓存区
4)执行完毕jsp页面
pageContext对象的类型是PageContext,叫jsp的上下文对象
1)可以获取其他八个内置对象
PageContext类提供了一系列getXXX方法,可以获取得JSP的7个内置对象
另外,PageContext继承自JspContext类,JspContext类提供了getOut()方法,用于得到out对象。
使用场景: 在自定义标签的时候,PageContext对象频繁使用到!!!如果一个方法以pageContext对象为传入参数,那么通过pageContext对象就可以间接得到另外8个JSP内置对象。
2)本身是一个域对象
作用: 保存数据和获取数据,用于共享数据
#保存数据
(1)默认情况下,保存到page域:pageContext.setAttribute("name");
(2)可以向四个域对象保存数据:pageContext.setAttribute("name",域范围常量)
#获取数据
(1)默认情况下,从page域获取:pageContext.getAttribute("name")
(2)可以从四个域中获取数据:pageContext.getAttribute("name",域范围常量)
域范围常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
(3)自动在四个域中搜索数据:pageContext.findAttribute("name");
顺序: page域 -> request域 -> session域- > context域(application域)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSP内置对象pageContext</title> </head> <body> <% //保存数据。默认情况下,保存在page域中 //pageContext.setAttribute("msg", "page's message");//向pageContext中存储数据 //pageContext.setAttribute("msg", "page's message", pageContext.PAGE_SCOPE);//保存到page域,等价于上一条语句 pageContext.setAttribute("msg", "request's message", pageContext.REQUEST_SCOPE);//保存到request域 //request.setAttribute("msg", "request's message");//等价于上一条语句 pageContext.setAttribute("msg", "session's message", pageContext.SESSION_SCOPE);//保存到session域 //session.setAttribute("msg", "session's message");//等价于上一条语句 pageContext.setAttribute("msg", "application's message", pageContext.APPLICATION_SCOPE);//保存到application域 //application.setAttribute("msg", "application's message"); %> <%-- 从域对象中读取数据 --%> <h1>使用pageContext.getAttribute方法读取数据:</h1> <%-- 原则: 在哪个域中保存数据,就必须从哪个域取出数据!!! --%> <strong>page域中的数据:</strong><%= pageContext.getAttribute("msg",pageContext.PAGE_SCOPE) %><br/> <strong>request域中的数据:</strong><%= pageContext.getAttribute("msg",pageContext.REQUEST_SCOPE) %><br/> <strong>session域中的数据:</strong><%= pageContext.getAttribute("msg",pageContext.SESSION_SCOPE) %><br/> <strong>application域中的数据:</strong><%= pageContext.getAttribute("msg",pageContext.APPLICATION_SCOPE) %><br/> <hr/> <h1>使用pageContext.findAttribute方法读取数据:</h1> <%-- findAttribute(): 在四个域自动搜索数据 顺序: page域 -> request域 -> session域 -> context域 --%> <%=pageContext.findAttribute("msg") %> <hr/> </body> </html>
序号 | 域对象名 | 类型 | 域 | 备注 |
---|---|---|---|---|
1 | pageContext | PageContext | page域 | 在JSP中学习的 |
2 | request | HttpServletRequest | request域 | 在Servlet中学习的 |
3 | session | HttpSession | session域 | 在Servlet中学习的 |
4 | application | ServletContext | context域 | 在Servlet中学习的 |
(在Servlet中有3个域对象,而在JSP中有4个域对象。)
1)域对象作用:保存数据 和 获取数据 ,用于数据共享。
2)域对象方法:
setAttribute("name",Object) 保存数据
getAttribute("name") 获取数据
removeAttribute("name") 清除数据
3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)
Servlet技术: 开发动态资源。是一个java类,最擅长写java代码。
jsp技术: 开发动态资源。通过java代码最擅长输出html代码。
在web项目中涉及到逻辑:
1)接收参数-->servlet做
2)处理业务逻辑,返回结果-->servlet做
3)显示数据到浏览器-->jsp做
4)跳转到其他页面 -->servlet做
servlet+jsp模式
servlet:
1)接收参数
2)处理业务逻辑
3)把结果保存到域对象中
4)跳转到jsp页面
Jsp:
1)从域对象取出数据
2)把数据显示到浏览器