JSP的9个内置对象(隐含对象)

JSP内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员声明即可使用。

9个内置对象如下:
page:代表当前JSP页面
request:代表由用户提交请求而触发的request对象
session:代表会话对象,在发生HTTP请求时被创建
application:代表返回的ServletContext对象
response:代表用户提交请求而触发的对象
out:代表输出流的JspWrite对象,用来向客户端输出各种格式的数据,并且管理服务器上的输出缓冲区
config:代表为当前页面配置JSP的Servlet
exception:代表当前页面产生不可预测的异常
pageContext:提供对JSP页面所有对象和名字空间的访问。

JSP内置对象的作用域
所谓内置对象的作用域是指每个内置对象在多长时间和多大范围内有效,即在什么样的范围内可以有效的访问同一个对象的实例。

1-Application作用域:对应application对象的作用范围,起始于服务器启动时cpplication对象被创建之时,终止于服务器被关闭时,该作用域时间最长。

2-Session作用域:作用在客户端和服务器端连接的期间,直到连接中断为止。Session对象是服务器端为客户端开辟的存储空间,每个用户首次访问服务器时,,服务器自动为该用户创建一个session对象,该用户退出时,该session对象消失。

3-Request作用域:对应request对象的作用范围,客户每次向JSP页面提出请求时候创建一个request对象,当请求结束,该request立刻失效。

4-Page作用域:对应page对象的作用范围,仅在一个JSP页面有效,它的作用范围最小。

程序员应根据需要,合理使用JSP内置对象管理有关信息。
例如,涉及全局的网站访问次数就应该由applicatiion对象来管理,涉及多个页面的用户个人信息应该由session对象管理,只涉及一次请求过程的由reuqest对象管理,request对象包含了用户的所有请求信息。

JSP内置对象的使用方法
1-out对象
该对象是JspWriter类的实例,主要用来向客户端输出内容,同时管理应用服务器输出缓冲区。
out对象主要有out.println()和print()两个方法用于输出数据。
下面演示用out对象输出系统时间:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<html><head><title>$Title$</title></head><body><%SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;Date date = new Date() ;out.println("原始日期格式:" + date) ;String str1 = sdf.format(date) ;out.println("自定义日期格式1:" + str1) ;sdf.applyPattern("yyyy年MM月dd日");String str2 = sdf.format(date) ;out.println("自定义日期格式2:" + str2) ;%></body>
</html>

2-page对象
page对象代表了JSP本身,或者说它代表了被转换后的Servlet,因此它可以调用任何被Servlet所定义的方法,在JSP页面的JSP程序段以及JSP表达式中可以使用page对象,page对象的基类是Object类,如果要通过page类来调用方法,就只能调用Object的方法。
在JSP页面中,this关键字表示当前JSP页面这个对象。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page info ="江西理工大学软件工程学院" %>
<html><head><title>$Title$</title></head><body bgcolor = yellow>返回当前JSP页面的Info属性: <%= this.getServletInfo()%> <br>返回当前页面的一个ServletConfig对象:<%= this.getServletConfig()%><br><%= this.getClass()%><br></body>
</html>

3-request对象
客户每次向JSP服务器发送请求时,JSP引擎都会创建一个request对象,客户端的请求信息被封装到request对象中,通过它才能了解客户的需求,然后做出响应。在request封装了客户请求参数以及客户端的信息。
在request对象的方法中,比较常用有getParameter和getParameterValues两个方法。
getParameter()获取客户端提交页面中某一控件的值,这个函数的返回值是一个String对象。
getParameterValues()可以获取客户端提交页面中一组控件的值,返回值是一个String数组。

下面通过实例演示request对象几个常用方法的使用。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><%out.println("请求使用的协议:" + request.getProtocol() + "<br>") ;out.println("请求使用的Schema:" + request.getScheme() + "<br>") ;out.println("访问服务器的名称:" + request.getServerName() + "<br>") ;out.println("访问服务器的端口号:" + request.getServerPort() + "<br>") ;out.println("客户端用户IP地址:" + request.getRemoteAddr() + "<br>") ;out.println("客户端用户主机名称:" + request.getRemoteHost() + "<br>") ;out.println("客户端用户名称:" + request.getRemoteUser() + "<br>") ;out.println("请求的类型:" + request.getMethod() + "<br>") ;out.println("Session ID : " +  request.getRequestedSessionId() + "<br>" ) ;out.println("请求的资源定位:" + request.getRequestURI() + "<br>") ;out.println("servlet在相对服务器文件夹的位置:" + request.getServletPath() + "<br>") ;out.println("Host:" + request.getHeader("Host") + "<br>") ;out.println("Accept-Language" + request.getHeader("Accept-Language") + "<br>") ;out.println("得到链接的类型:" + request.getHeader("Connection") + "<br>")  ;out.println("得到Cookie的字符换信息:" + request.getHeader("Cookie") + "<br>") ;out.println("session相关信息-创建时间:" + session.getCreationTime()+ "<br>" ) ;out.println("session的相关信息-上次访问时间:" + session.getLastAccessedTime()+ "<br>") ;out.println("返回请求对象中的字符编码类型:" + request.getCharacterEncoding() + "<br>") ;%></body>
</html>

下面演示request.getParameter()和request.getParameterValues()方法的使用,由两个页面组成,
第一个页面是信息采集页面input.jsp,第二个页面是信息展示页面show.jsp,第一个页面采集的值,在第二个页面通过getParamter()和getParamValues()方法获取。

信息采集页面input.jsp

<%--Created by IntelliJ IDEA.User: nuist__NJUPTDate: 2021/10/4Time: 15:56To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action = "show.jsp" method = "post" name = "frm">基本资料</strong><table width = "500" cols = "2" border="1"><tr><td>姓名:</td><td><input type = "text" name = "name"/></td></tr><tr><td>性别:</td><td><input type = "radio" name = "rdo" value = "男" checked>男<input type = "radio" name = "rdo" value = "女">女</td></tr><tr><td>民族:</td><td><input type = "radio" name = "rdo1" value = "汉族" checked> 汉族<input type = "radio" name = "rdo1" value = "回族"> 回族<input type = "radio" name = "rdo1" value = "壮族"> 壮族<input type = "radio" name = "rdo1" value = "其它"> 其它</td></tr><tr><td>专业:</td><td><select name = "major"><option value = "计算机科学与技术">计算机科学与技术</option><option value = "软件工程">软件工程</option><option value = "网络工程">网络工程</option><option value = "信息安全">信息安全</option><option value = "其它">其它</option></select></td></tr></table><br>兴趣爱好</strong><table width = "500" cols = "2" border = "1"><tr><td>兴趣爱好:</td><td><input type = "checkbox" name = "ckbx" value = "电影">电影<input type = "checkbox" name = "ckbx" value = "戏剧">戏剧<input type = "checkbox" name = "ckbx" value = "音乐">音乐<input type = "checkbox" name = "ckbx" value = "美术">美术</td></tr></table><br><input type = "submit" value = "注册" name = "submit1"/>
</form>
</body>
</html>

信息展示页面show.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%request.setCharacterEncoding("utf-8");
%>
用户注册信息<br>
基本资料<br>
姓名:<%= request.getParameter("name")%><br>
性别:<%= request.getParameter("rdo")%><br>
民族:<%= request.getParameter("rdo1")%><br>
专业:<%= request.getParameter("major")%><br>
兴趣爱好:<%String [] arr = request.getParameterValues("ckbx") ;if(arr != null){for(int i=0; i<arr.length; i++){out.println(arr[i] + " ") ;}}
%>
</body>
</html>

4-response对象
该对象是服务器对request对象请求的响应,负责向客户端发送数据,通过response的方法还可以获得服务器相关的信息,例如:状态行,head,信息体等,其中,状态行包括使用的协议和状态码,head包括服务器和返回的文档消息。

下面使用response设置head信息,实现页面定时刷新功能.


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>设置头信息(自动刷新)</title>
</head>
<body>
<%! int count = 0 ; %>
<%response.setHeader("refresh", "2") ; //页面2秒刷新一次
%>
<h3>页面已经访问了<%= count ++%>次!</h3>
</body>
</html>

下面利用response设置head信息,实现页面定时跳转功能,可以从一个JSP页面,定时跳转到另一个JSP页面,但是这种跳转不是万能的,有时候不一定能完成跳转操作。


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>定时跳转指令</title>
</head>
<body>
<h3>3秒后跳转到index.jsp,如果没有跳转,请戳这里<a href = "index.jsp">戳这里!!!</a></h3>
<%response.setHeader("refresh", "3; URL = index.jsp") ; //3秒后跳转到index.jsp
%></body>
</html>

5-session对象
在web开发中 ,客户端与服务器端进行通信是以HTTP协议为基础的,而HTTP协议本身是无状态的,无状态是指协议对事务处理没有记忆能力,HTTP无状态的特性严重阻碍了web应用程序的实现,比如:典型的购物车程序需要知道用户在其它页面选择了什么商品。有两种用于保持HTTP连接的技术,分别是session和Cookie。

session对象是用户首次访问服务器由服务器创造的,在jsp页面可以通过getSession()方法获取session对象,服务器创建session对象的同时会为Session对象生成唯一的sessionId,发送到客户端的就是sessionId,客户端再次发送请求时,服务器根据sessionId找到相应的session对象,从而使用它。

由于浏览器在关闭之前不会通知服务器,因此服务器不会知道浏览器是否已经关闭,因此服务器为session设置一个有效时间,当距离客户上次活跃时间已经超过这个失效时间,服务器就可以认为客户端已经停止了活动,就会把session删除,以节省存储空间。

下面演示一个例子,如何存取request及session对象中的属性,两个JSP文件,login.jsp为登录页面,用于输入用户登录的信息,如果用户输入的登录名为admin,密码为123,则将登录名存入session中,跳转到logok.jsp页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%String path = request.getContextPath() ;String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/" ;
%><%--进行登录验证--%>
<%request.setCharacterEncoding("utf-8");//获取用户请求信息,首次请求没有这些信息从页面填写信息提交后,再次请求就有信息了String user = request.getParameter("user") ;String password = request.getParameter("password") ;if("admin".equals(user) && "123".equals(password)){request.getSession().setAttribute("username", user); //将用户保存到session中
%><jsp:forward page="loginok.jsp"><jsp:param name="info" value="你好啊,加油啊"/>
</jsp:forward>
<%}
%>
<html>
<head><base href = "<%=basePath%>">
</head>
<body><center><form action="login.jsp" method="post"><table><tr><td>用户登录</td></tr><tr><td>登录名:</td><td><input type = "text" name = "user"></td></tr><tr><td>密码:</td><td><input type = "password" name = "password"></td></tr><tr><td><input type = "submit" value = "登录"></td><td><input type = "reset" value = "重置"></td></tr></table></form>
</center>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录成功</title>当前用户(从session对象中获取):<%= request.getSession().getAttribute("username")%><br>从request对象获取一下参数:<br>info = <%= request.getParameter("info")%><br>user = <%= request.getParameter("user")%><br>password = <%= request.getParameter("password")%><br><a href = "login.jsp">返回登录页面</a><br>
</head>
<body></body>
</html>

6-application对象
该对象是web服务器启动时由服务器自动创建的,它的生命周期是所有JSP隐含对象中最长的,一旦创建了application对象,那么这个对象将一直保存下去,直至服务器关闭。
正是由于application对象的这个特性,可以将要在多个用户中 共享的数据放到application对象中,如在线人数的统计,实现聊天室等功能。

application对象的常用方法主要由两个:setAttribute(),getAttribute()

下面实现一个页面访问计数器的案例。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>页面访问计数器</title>
</head>
<body>
<%if(application.getAttribute("count") == null){application.setAttribute("count", "1") ;out.println("欢迎,您是本网页的第1位访客!!!") ;}else{int i = Integer.parseInt((String)application.getAttribute("count")) ;i ++ ;application.setAttribute("count", String.valueOf(i)) ;out.println("欢迎,您是本网页的第" + i + "位访客!!!") ;}
%>
</body>
</html>

运行程序,即使将页面关闭重新打开,或者从不同客户端浏览器打开网页,计数器仍然有效,只到服务器重启为止,此计数器记录的是所有访问过本网页的次数,而与是否是同一客户端无关。

7-config对象
config对象中存储着一些Servlet初始的数据结构,它跟page对象一样,它跟page一样,很少被用到,可以通过config对象获取Servlet初始参数值。

8-exception对象
当JSP页面发生错误时,会产生异常,exception对象就是用来针对异常进行处理的对象。

9-pageContext对象
pageContext对象能够存取其它内置对象,当内置对象包括属性时候,pageContext也支持对这些属性的读取和写入。

JSP的9个内置对象(隐含对象)相关推荐

  1. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

  2. JavaScript内置方法-Date对象

    Date对象 >介绍 是一个构造函数,使用时需要new,实例化 主要看常用方法 console.log(new Date()); //返回电脑当前的时间 console.log(new Date ...

  3. jsp的9个内置对象

    Jsp提供了request.response.session.application.out.page.config.exception.pageContext9个内置对象.1. Request Re ...

  4. JSP的9个内置对象-application

    JSP页面中包含9个内置对象,这9个内置对象都是Servlet API的类或者接口的实例,只是JSP规范将它们完成了默认初始化,即它们已经是对象,可以直接使用. application:javax.s ...

  5. Java Web学习总结(16)——JSP的九个内置对象

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

  6. javaweb之jsp的内置九大对象(request,response,out,session,application,pageContext,page,config,exception)的说明应用

    四.jsp的九大内置对象 jsp内置对象是指在警示牌页面中不用声明就可以在脚本和表达式中直接使用的对象. **特点** 内置对象有Web容器自动加载,不需要实例化. 内置对象通过Web容器来管理和实现 ...

  7. 内置类和对象锁改变 笔记记录

    当内置类是私有的,若实例化该类与内置类 在一个包下可以实例化.若不在一个包下要实例化,需要将内置类改为public package com.inner; public class PublicClas ...

  8. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

  9. python通过内置函数测试对象类型_python测试开发(01-递归函数+内置函数)

    # 生成器三个方法:send,close throw # send()发送数据 f # def gen(): # for i in range(10): # j=yield i # print(j) ...

最新文章

  1. Gitlab CI 持续集成的完整实践
  2. 静静守候属于我们的幸福。坚守我们的约定
  3. docker安装influxdb、grafana及展示数据到grafana
  4. 成人高考大学计算机基础答案,江苏省2019年成人高考大学计算机基础统考样卷...
  5. 妙用世界之窗浏览器的隐私保护功能
  6. SUN:开源在Web2.0时代
  7. Python爬取并简单分析2024年普通高校招生专业(专业类)选考科目要求
  8. uniapp 即时通讯_uniapp与webview的实时通讯
  9. SpringBoot + MyBatis + Thymeleaf 之 HelloWorld
  10. 软件开发工作量评估:基于FPA功能点分析法的深入解读
  11. ati自定义分辨率_在Windows 10上设置自定义分辨率 | MOS86
  12. 高质量论文配图配色(附RGB值及16进制码)
  13. 2 电感耦合方式的射频前端
  14. java时钟时针绘制代码_java实现时钟效果
  15. Canonical标签的作用及使用方法
  16. 小公司需要企业邮箱么?小企业用什么企业邮箱?
  17. redis中数据倾斜问题的产生和解决方案
  18. b站视频素材哪里找?怎么找b站素材?
  19. 查询出一班、二班的人数和平均分,并且按照由高到低排序
  20. HM代码阅读2:AMVP预测函数Void TEncSearch::xEstimateMvPredAMVP()

热门文章

  1. CDMA2000 1X和GPRS网络的对比(转)
  2. 通过ssh代理连接内网MySQL
  3. 业务架构、数据架构、应用架构、技术架构对比
  4. VGA显示8色彩条RGB888(一)
  5. 亚马逊,速卖通,阿里国际,shopee等卖家如何补单?
  6. 土地出让金骤降是“危”还是“机”?
  7. python下载ts视频文件_Python3爬虫通过m3u8文件下载ts视频 Python爬虫
  8. 基于nodejs爬虫
  9. 浅谈“自动化技术对世界的影响”
  10. jSignature签名和横向签名转至元数据结尾