JSP系列:(3)JSP进阶-九大内置对象和四个域对象

1、JSP九大内置对象


1.1、什么是内置对象?

在jsp开发中,会频繁使用到一些对象,例如HttpSession, ServletContext, ServletContext,  HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫内置对象!!!!


1.2、9大内置对象


9大内置对象
序号 内置对象名 类型
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


1.3、Out对象

out对象类型,JspWriter类型,相当于带缓存的PrintWriter

对比JspWriter和PrintWriter:

PrintWriter: wrier(内容): 直接向浏览器写出内容。

JspWriter:writer(内容): 向jsp缓冲区写出内容

当满足以下条件之一,缓冲区内容写出:

1)缓冲区满了

2)刷新缓存区

3)关闭缓存区

4)执行完毕jsp页面


1.4、pageContext对象

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>


2、Jsp中的四个域对象

Jsp中的四个域对象
序号 域对象名 类型 备注
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应用中使用。(全局的)


3、Jsp的最佳实践

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)把数据显示到浏览器



你可能感兴趣的:(jsp)