概念

什么是JSP内置对象?

}JSP 内置对象是 Web 容器创建的一组对象
}JSP 内置对象是可以直接在JSP页面使用的对象 ,无需使用“new”获取实例
}JSP 内置对象的名称是 JSP 的保留字
}内置对象说白了就是别人创建好了的对象,我们直接用即可

九大内置对象

内置对象 类型 作用
out  JspWriter 用于向客户端、浏览器输出数据
request HttpServletRequest 来自客户端、浏览器的各种请求信息
response HttpServletResponse 服务器的响应信息
session HttpSession 保存会话信息。实现同一用户的信息共享
exception Throwable jsp程序执行过程中发生的异常
page Servlet(this) 指向了当前jsp程序本身
config ServletConfig 操作应用程序的配置信息
application ServletContext 不同用户之间的信息共享
pageContext  PageContext 提供了对jsp页面所有对象的访问

从上一篇文章的学习中,我们指定Jsp文件在运行时会被翻译成servlet,那么这里的内置对象其实就是在被翻译之后的servlet中所定义的,这里我们可以打开对应的运行在tomcat上的work文件夹中的项目查看。

1. out对象

从翻译后的代码中可以发现,out对象的作用基本和我们之前用在Servlet中的PrintWrite的用法一致,都是将字符串的内容发送给浏览器上显示。

这里我们也创建一个jsp文件来练习一下:

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp九大内置对象之一:out对象,对应的类名JspWriter -->
<!-- 判断当前是上午还是下午 -->
<% Calendar calendar=Calendar.getInstance();int AM_PM= calendar.get(Calendar.AM_PM);if(AM_PM==Calendar.AM){out.print("<p style='color:red;'>当前时间为上午</p>");}else if(AM_PM==Calendar.PM){out.print("<p style='color:green;'>当前时间为下午</p>");}
%>
</body>
</html>

2.request对象

该对象已在Servlet中做了详细讲解和介绍,这里就不再做过多的赘述,我们创建一个jsp文件来简单复习一下:

在浏览器访问该页面的地址后面拼接name和psd的数据发送给该页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!-- request:用于接收浏览器发送过来的数据 --><%String name=request.getParameter("name");String psd=request.getParameter("psd");out.write("jsp接收到浏览器的数据为"+name+"---"+psd);//请求转发,携带数据跳转jsp页面//request对象也能存储数据,//并且也可以让多个servlet和jsp之间共享数据//但是必须要是请求转发跳转页面的方式才能共享数据request.setAttribute("a", "苹果");request.getRequestDispatcher("a.jsp").forward(request, response);%>
</body>
</html>

再创建a.jsp文件用于接收该页面通过请求转发而得到的数据:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%String a=(String)request.getAttribute("a");out.write("获得请求转发的数据为:"+a);%>
</body>
</html>

注意:request对象存储的数据只能通过请求转发的方式让其他页面进行获得和共享

3.response对象

该对象已在Servlet中做了详细讲解和介绍,这里就不再做过多的赘述,我们创建一个jsp文件来简单复习一下:

该对象用于操作和设置浏览器的显示,例如:定时刷新页面,文件下载,跳转页面等等都是指挥浏览器操作数据。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!-- response给浏览器回复数据使用该对象可以实现,页面跳转,称为重定向 --><%  response.sendRedirect("OutDemo.jsp"); %>
</body>
</html>

4. session对象

该对象已在Servlet中做了详细讲解和介绍,这里就不再做过多的赘述,我们创建一个jsp文件来简单复习一下:

该对象用于区分浏览器并保存各自浏览器要存储的数据,并在不切换浏览器的情况下,项目中的任何jsp和servlet都能共享session中存储的数据。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!-- session:比喻成档案,用于存放数据的,数据的是否存在只和浏览器是否相同有关只要不切换浏览器,任何servlet,jsp都能共享 --><% session.setAttribute("b", "我是session的数据");out.write((String)session.getAttribute("b"));%>
</body>
</html>

5.exception对象

该对象实际是java基础中的异常处理,用于在代码报错的时候,输出和打印报错信息,以便于开发者的理解和解决bug问题。

这里结合上一篇文章中的page指令的知识来综合使用一下:

该代码演示了算术异常,空指针异常,数组下标越界异常,类型转换异常等等常见的错误异常,并在该页面报错的时候,指定跳转至error.jsp页面。

<%@ page language="java" errorPage="error.jsp" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//算数异常
//int x=100/0;
//空指针异常
int[] nums=null;
//int a=nums.length;
//下标越界异常
nums=new int[3];
//nums[5]=8;//类型转换异常
//子类对象赋值给父类对象成为向上转型
//父类对象赋值给子类对象称为向下转型
//(前提父类对象原本就是子类对象)
Object object=new Object();
String str=(String)object;
out.write(str);
%>
</body>
</html>

error.jsp

<%@ page language="java" isErrorPage="true" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
当前页面出现除法异常,请仔细检查除数是否为0
<p><%=exception.getMessage() %></p>
<p><%=exception.toString() %></p>
</body>
</html>

通过运行,可以看到所产生的错误异常信息。

6.page对象

通过查看翻译后的servlet代码可以看到,其实page就是Object的对象,赋值为当前类对象。

该对象使用频率比较小,这里做简单的演示

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp九大内置对象之一: page,对应的类Object类 -->
<%out.write(page.equals(this)?"page对象等于当前类对象":"不等于");
%>
</body>
</html>

7.config对象

该对象在Servlet的学习中已经讲过,需要学习的初学者请翻阅之前的文章进行学习。其本质的作用是获得Servlet在注册信息中的静态数据和配置信息,那在jsp中并不需要我们开发者对jsp进行注册,而是程序自动封装了注册信息的代码,隐藏该对象在jsp中使用频率较小。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp九大内置对象之一:config对象,对应的类名ServletConfig -->
<%  String name= config.getServletName();out.write(name);
%>
</body>
</html>

8.application对象

该对象的类名为ServletContext,其作用和用法也是Servlet的学习中已详细讲解过,用于共享数据,其分为共享静态数据,共享动态数据,共享文件数据等作用。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!-- application是ServletContext这个类的对象这个类在整个项目中只有一个对象,tomcat服务器一启动,就开始创建,tomcat服务器一关闭,该对象就被销毁,存在这个对象中的数据就会被删除只要服务器不关闭,任何Servlet和jsp都能共享数据--><% application.setAttribute("c", "我是application的数据");out.write((String)application.getAttribute("c"));%>
</body>
</html>

9.pageContext对象

该对象是jsp中独有的对象,该对象的作用是用于管理其余八个内置对象的快速使用和数据存储。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp九大内置对象之一:pageContext
pageContext:当前页面的上下文对象
作用:1.用于管理和获得其他内置对象2.存储数据
pageContext可以获得任意其他的内置对象,可以管理所有内置对象--><%//out.write("aaaaa");pageContext.getOut().write("aaaa");//requestpageContext.getRequest();//responsepageContext.getResponse();//sessionpageContext.getSession();//exceptionpageContext.getException();//pagepageContext.getPage();//configpageContext.getServletConfig();//applicationpageContext.getServletContext();%></body>
</html>

四大作用域

内置对象 作用域
application 整个项目
session 一次会话
request  一次请求 
pageContext 一个页面

按作用域从小到大排列:pageContext->request ->session->application

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp九大内置对象之一:pageContext
pageContext:当前页面的上下文对象
作用:1.用于管理和获得其他内置对象2.存储数据
pageContext可以获得任意其他的内置对象,可以管理所有内置对象--><!-- 四大作用域 --><%//存储数据//pageContext是可以存储数据,但是其作用域只能供其本身的jsp页面使用pageContext.setAttribute("a", "我是pageContext的数据");String info=(String)pageContext.getAttribute("a");out.write("<br>");out.write(info);//request对象中的数据是可以形成多个页面共享数据,但是要通过请求转发的方式打开其他页面才能形成共享数据//写法一//request.setAttribute("b", "我是request的数据");//写法二//第一个参数表示要添加的数据的名称 第二个参数表示要存储的数据  第三个参数表示要把数据存储给哪个对象pageContext.setAttribute("b", "我是request的数据", PageContext.REQUEST_SCOPE);String b=(String)request.getAttribute("b");out.write("<br>");out.write(b);//通过请求转发的方式跳转至five.jsp//request.getRequestDispatcher("five.jsp").forward(request, response);//判断session是否是刚刚创建//session对象中的数据可以供任何jsp和servlet页面进行共享//但是一旦切换浏览器访问服务器,那么数据就不存在//说明session对象能不能共享数据和浏览器有关if(session.isNew()){out.write("<br>");out.write("因为开启了一个新的浏览器,所以创建了一个新的session对象");//方法一    直接使用session存储数据//session.setAttribute("c", "我是session的数据");//方法二   使用pageContext间接帮session存储数据pageContext.setAttribute("c", "我是session的数据", PageContext.SESSION_SCOPE);}String c=(String)session.getAttribute("c");out.write("<br>");out.write(c);//application对象存储的数据可以让任何jsp和servlet进行共享数据//但是application对象的数据与服务器有关,只要服务器不停止,数据都能共享//方法一//application.setAttribute("d", "我是application的数据");//方法二pageContext.setAttribute("d", "我是application的数据",PageContext.APPLICATION_SCOPE);String d=(String)application.getAttribute("d");out.write("<br>");out.write(d);%>
</body>
</html>

在其他jsp页面也能获得其添加的数据:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%
//通过运行看到效果会报错,报空指针错误,说明pageContext的数据在这个页面上获取不到
//pageContext的数据不能多个页面之间共享数据
//String info=(String)pageContext.getAttribute("a");//out.write(info);
//方法一    request对象自己直接获得数据
//String b=(String)request.getAttribute("b");
//方法二   pageContext帮request获得数据
//String b=(String)pageContext.getAttribute("b", PageContext.REQUEST_SCOPE);
//out.write("我获得了four.jsp页面的request对象的数据:"+b);//方法一    使用session直接获得数据
//String c=(String)session.getAttribute("c");
//方法二   pageContext帮session获得数据
//String c=(String)pageContext.getAttribute("c", PageContext.SESSION_SCOPE);
//out.write("我获得了four.jsp页面的session对象的数据:"+c);//方法一
//String d=(String)application.getAttribute("d");
//方法二
String d=(String)pageContext.getAttribute("d",PageContext.APPLICATION_SCOPE);
out.write("我获得了four.jsp页面的application对象的数据:"+d);
%>
</body>
</html>

findAttribute(String key)(该方法的作用,在后面章节的EL表达式中进行讲解和对比,这里占时不做演示)

依次从pageContext,request,session,application四个作用域中,查找响应的属性,如果找到了返回值,且结束本次查找。

如果找不到,返回一个null

本章内容结束!!!

【Jsp】第七课 Jsp内置对象的学习和使用相关推荐

  1. 七、jsp基础(二)- 内置对象

    一.什么是内置对象 1.1 内置对象的来源 为了开发者方便使用,JSP中预先定义了9个内置对象,由容器为用户进行实例化,用户直接使用即可.举例:servlet: HttpSession session ...

  2. JSP中的九个内置对象

    2019独角兽企业重金招聘Python工程师标准>>> 一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引 ...

  3. JavaWeb学习总结(十七)——JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  4. JavaWeb学习总结(十七):JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  5. JavaWeb学习总结(二)——JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  6. JavaWeb(十七)——JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  7. js内置对象【学习笔记】

    今天系统的学了一下javascript的内置对象.mark相关的知识点: 首先,什么是js的内置对象,它包括了些什么内容?(以下内容转自网上资源的整合) (W3shool JS手册地址:http:// ...

  8. 2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象

    回顾:Servlect常用的对象,过滤器,监听器. ServletConfig:对象获得静态数据 ServletContext对象:获取共享静态数据,获取共享动态数据,获取共享文件数据. HttpSe ...

  9. JSP的内置对象详解

    JSP内置对象 文章目录 JSP内置对象 前言 一.out对象 1.原理 2. 向客户端输出数据 二.page对象 1.范围 三.pageContext 对象 1.获取内置对象 2.存储数据 四.re ...

  10. JSP的概念||原理||JSP的脚本||JSP的内置对象||response.getWriter()和out.write()的区别||案例:改造Cookie案例

    1. 概念 * Java Server Pages: java服务器端页面         * 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码         * ...

最新文章

  1. Web开发的机器学习框架
  2. LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)
  3. ubuntu下android源码编译环境,ubuntu12.04 64位上搭建android源码编译环境
  4. GW48CK/PK2/PK/PK4 系统万能接插口与结构图信号/与芯片引脚对照表
  5. Uva 10305 - Ordering Tasks
  6. annotationprocessor 提示找不到类_StackOverflow上87万访问量的问题:什么是“找不到符号”?...
  7. python用户界面画图_通过海龟绘图学习Python-01
  8. Android 10.0修改系统型号(Build.MODEL)
  9. 使用Python进行数独求解(一)
  10. MySQL year函数
  11. Uncaught Error: Syntax error, unrecognized expression: |117的js错误
  12. 阳光系统 软件无法卸载怎么办
  13. c语言 编程 打怪,一起用C语言打怪物
  14. 《RA-UNet: A hybrid deep attention-aware network to extract liver and tumor in CT scans》
  15. 血糖仪和糖化血红蛋白分析仪区别?
  16. Android向:实现同一局域网内两台手机之间的文件互传
  17. 贾跃亭自救 FF签约投行斯提夫尔加速推进全球融资
  18. 怎么把avi转成mp4格式?
  19. 【解决方案】RTMP推流协议视频智能分析/直播点播/人脸识别平台EasyDSS打造智能多媒体展厅解决方案
  20. 生活随记 - 不懂就问心老人不老

热门文章

  1. 【数字信号处理】基于Matlab GUI数字均衡器设计【含Matlab源码 904期】
  2. 数学之美:余弦定理和新闻分类
  3. 自己动手打印一寸/两寸证件照
  4. 如何用手机制作电子版证件照?
  5. 使用html5+canvas+Jquery实现的纯代码连线题Demo
  6. jeesit框架通过jBox获取弹窗信息
  7. 一文看尽 2020 年谷歌 AI 重大突破
  8. 联发科MT2503芯片资料MT2503原理图
  9. ApiPost测试接口直接生成API文档
  10. JSON网络传输协议