一、什么是内置对象
在jsp开发中会频繁的用到一些对象,为了方便,在你访问jsp页面时它会自动为你创建九个对象,你可以直接在jsp中拿来使用,这九个对象就是jsp中九大内置对象
二、九大内置对象有哪些
1、request对象:
request 对象是 httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求
是客户端对服务器发出的请求。客户端的请求信息被封装在request对象中,通过它发送请求给服务器。它是HttpServletRequest类的实例,作用域为request(用户请求期)。
request对象常用方法
request.setAttribute(String name,Object value) //储存此请求中的属性 request.getAttribute(String name) //返回指定属性的属性值 request.getParameter(String name) //返回name指定参数的参数值 request.getParameterValues(String name) //返回包含参数name的所有值的数组
<%@ 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>
2.response
该对象是服务器对request对象请求的响应,负责向客户端发送数据,通过response的方法还可以获得服务器相关的信息,例如:状态行,head,信息体等,其中,状态行包括使用的协议和状态码,head包括服务器和返回的文档消息。
下面使用response设置head信息,实现页面定时刷新功能.
代码如下(示例):
response.getCharacterEncoding() //返回响应用的是何种字符编码 response.getWriter() //返回可以向客户端输出字符的一个对象 response.sendRedirect(java.lang.String location) //重新定向客户端的请求
下面使用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>
3.out
该对象是JspWriter类的实例,主要用来向客户端输出内容,同时管理应用服务器输出缓冲区。
out对象主要有out.println()和print()两个方法用于输出数据。
下面演示用out对象输出系统时间:
代码如下(示例):
out.println()//向浏览器输出数据 out.newLine()//输出换行
<%@ 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>
4.page
page对象代表了JSP本身,或者说它代表了被转换后的Servlet,因此它可以调用任何被Servlet所定义的方法,在JSP页面的JSP程序段以及JSP表达式中可以使用page对象,page对象的基类是Object类,如果要通过page类来调用方法,就只能调用Object的方法。
在JSP页面中,this关键字表示当前JSP页面这个对象。
代码如下(示例):
page. getClass() //返回此Object的类 page.toString() //把此Object对象转换成String类的对象 page.hashCode()//返回Object对象的hashCode值
<%@ 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>
5.config
代码如下(示例):
config.getServletName()//返回所执行的Servlet的名字 config.getInitParameter()//返回指定名字的初始参数值
6.session
代码如下(示例):
session.getId()//返回session的ID号 session. setAttribute(String name,Object value)//将value值存在session域中,名字为name session.getAttribute(String name)//返回与此会话中的指定名称绑定在一起的值,如果没有值绑定在该名称下,则返回null session.setMaxInactiveInterval(int i)//设置两次请求间隔多长时间此session被取消(单位秒) session.getMaxInactiveInterval()//返回两次请求间隔多长时间此session被取消(单位秒) session.invalidate()//销毁session
7.application
该对象是web服务器启动时由服务器自动创建的,它的生命周期是所有JSP隐含对象中最长的,一旦创建了application对象,那么这个对象将一直保存下去,直至服务器关闭。
正是由于application对象的这个特性,可以将要在多个用户中 共享的数据放到application对象中,如在线人数的统计,实现聊天室等功能。
application对象的常用方法主要由两个:setAttribute(),getAttribute()
代码如下(示例):
application.setAttribute(key,value)//设置应用对象中指定名字的属性值 application.getAttribute(key)//获取应用对象中指定名字的属性值 application.getAttributeNames()//获取应用对象中所有属性的名字,一个枚举
下面实现一个页面访问计数器的案例。
<%@ 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>
8.pageContext
pageContetx对象比较特殊,它是jsp页面中所有对象功能的最大集成者。使用他可以访问所有的jsp内置对象
代码如下(示例):
pageContetx.getRequest()//返回当前页面中的request对象。 pageContetx.getResponse()//使用此方法将返回当前页面中的response对象。 pageContetx.getPage()//此方法返回当前页面中的page对象。 pageContetx.getSession()//返回当前页面中的session对象。 pageContetx.getOut()//返回当前页面中的out对象。 pageContetx.getException()//返回当前页面中的exception对象。 pageContetx.getServletConfig()//返回当前页的config对象。 pageContetx.getServletContext()//返回当前页中的application对象。 pageContetx.setAttribute(String name)//给指定的属性名设置属性值。 pageContetx.getAttribute(String name)//根据属性名称找到相应的属性值。 pageContetx.findAttribute(String name)//寻找一个属性并返回,如果没有找到则返回一个null。 pageContetx.removeAttribute(String name)//通过属性名删除掉某个属性。 pageContetx.removeAttribute(String name, int scope)//在指定的某个范围内删除某个属性。 pageContetx.getAttributeScope(String scope)//返回某属性的作用域。 pageContetx.getAttributeNamesInScope(int scope)//返回指定范围内的所有属性名的枚举。 pageContetx.release()//释放掉pageContext()所占的所有资源。 pageContetx.forward(String relativeURLpath)//使用当前页面重导到另一个页面。
9.exception
exception对象表示jsp引擎在执行代码时抛出的异常
如果想要使用exception对象,那么需要配置编译指令的isErrorPage属性为true,即在页面指令中设置:
<%@page isErrorPage=“true”%>