您的位置:首页 > Web前端 > JavaScript

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

2016-05-26 23:48 447 查看

1、JSP九大内置对象

1.1、什么是内置对象?

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

1.2、9大内置对象

9大内置对象
序号内置对象名类型
1requestHttpServletRequest
2responseHttpServletResponse
3configServletConfig
4applicationServletContext
5sessionHttpSession
6exceptionThrowable
7pageObject(this)
8outJspWriter
9pageContextPageContext

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_SCOPEPageContext.REQUEST_SCOPEPageContext..SESSION_SCOPEPageContext.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中的四个域对象
序号域对象名类型备注
1pageContextPageContextpage域在JSP中学习的
2requestHttpServletRequestrequest域在Servlet中学习的
3sessionHttpSessionsession域在Servlet中学习的
4applicationServletContextcontext域在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