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

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__NJUPT
  Date: 2021/10/4
  Time: 15:56
  To 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也支持对这些属性的读取和写入。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值