一、jsp内置对象是指不用声明就可以在jsp页面的脚本部分直接使用的组件
是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP内置对象也被称为预定义变量。
按照期作用分类为:
1.输入输出对象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;
2.作用域通信对象 : HttpSession的session, ServletContext的application, PageContext的pageContext;
3.servlet对象 : Object的page, ServletConfig的config;
4.错误对象 : Throwable的exception;
对象 | 描述 | 作用域 |
---|---|---|
request | HttpServletRequest类的实例,提供对客户端HTTP请求数据的访问 | request |
response | HttpServletResponse类的实例,响应信息,用来向客户端输出数据。 | page |
out | PrintWriter类的实例,用于把结果输出至网页上(提供对输出流的访问) | page |
session | HttpSession类的实例,session对象用来跟踪在各个客户端请求间的会话。 | session |
application | ServletContext类的实例,与应用上下文有关,通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。 | application |
config | ServletConfig类的实例,该对象允许将初始化数据传递给一个jsp页面 | page |
pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 | page |
page | 类似于Java类中的this关键字(jsp页面对应的servlet类实例) | page |
Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 | page |
二、各个对象详解
1.首先要了解JSP的四个作用域:
application,session,request,page.
名称 | 作用域 |
---|---|
request | 在当前请求中有效 |
application | 在所有应用程序中有效,application作用域就是服务器或tomcat启动到关闭的整段时间, |
page | 在当前页面中有效,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。 |
session | 在当前会话中有效 |
2.request常用方法
request.getParameter(String name)
用于获取客户端传送给服务器端的参数(通常是表单中的参数)。
request.getMethod()
获取客户端发起请求的方法
request.getProtocol()
获取客户使用的协议
request.getServletPath()
获取客户提交信息的页面。
request.getHeader("accept")
获取HTTP头文件中的accept、accept-encoding和Host的值。
示例如下:
String strHeader =request.getHeader("accept")
request.getCookies()
获取客户端请求包含的所有cookie的集合
示例如下:
<%
Cookie cookies[] = request.getCookies();
for(int i = 0;i < cookies.length;i++){
out.write("cookies名称:"+cookies[i].getName()+"\t\tcookies值:"+cookies[i].getValue()+"<br>");
}
%>
request.setCharacterEncoding(String type)
重载正文中使用的字符编码。
如果提交请求的页面编码和响应输出页面的编码不一致,在处理中文时就会出现乱码,这个时候,一般使用 request.setCharacterEncoding (String type)来处理。
request.getRemoteAddr()
获取客户端的ip地址
request.getRemoteHost()
获取客户端主机名称
request.getServerName()
获取服务器名称
request.getServerPort()
获取服务器的端口号
2.response常用方法
response.setHeader(String name,String value)
将指定的参数名称和值设置到头信息中
示例如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%response.setHeader("Cache-Control","no-store")%> //实现禁止页面缓存
<%response.setHeader("refresh","30")%> //定时每30秒自动刷新
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>test</title>
</head>
<body>
</body>
</html>
response.sendRedirect(String location)
把响应送到另外一个位置进行处理(客户端跳转) 『request对象无法传递到新页面』
response .setCharacterEncoding(String type)
设置响应页面的字符编码
response.setContentType(String charset)
设置响应内容的类型
示例如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
//设置响应内容类型为office xls类型,以便实现在客户端用Excel打开
<%response.setContentType("application/vnd.ms-excel");%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<table border="1px" cellspacing="0" cellpadding="0" width="850px">
<tr>
<th>学号</th>
<th>姓名</th>
<th>专业</th>
</tr>
<tr>
<td>11</td>
<td>小马</td>
<td>通信</td>
</tr>
</table>
</body>
</html>
response.addCookie(Cookie cookie)
添加一个指定的cookie到响应中
示例如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
Cookie cookie = new Cookie("iborder","no1");
response.addCookie(cookie);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
添加一个指定的cookie到本页面中
</body>
</html>
3.out常用方法
通常情况下,服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区,只有在下面三种情况下,才会把该缓冲区的内容输出到客户端:
(1)该jsp网页已经完成信息的输出;
(2)输出缓冲区已满;
(3)jsp中调用了out.flush()或response.flushbuffer()。
输出缓冲区可以由<%@ page buffer="1kb"%>来设定,当设置<%@ page buffer="none"%>时,表示不使用缓冲区,直接输出。也可以由response.setBufferSize()来设定缓冲区大小。
out.getBufferSize()
获得当前实际缓冲区的大小
out.clearBuffer()
清空当前缓冲区内容。如果已经有内容被输出,不会返回IO错误信息
out.clear()
清空当前缓冲区内容。如果已经有内容被输出,返回IO错误信息
out.flush()
立刻输出缓冲区中的色内容
out.close()
先调用flush()功能,在关闭输出流,该方法会在jsp页面结束时自动调用。
out.print(String s)·
输出字符串
out.println(String s)
输出字符串,并以换行符结束
示例如下:
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="8kb"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>当前缓冲区大小为<span><%=out.getBufferSize() %></span></p>
<%
out.flush();
out.println("1不可见,因为下一句将调用out.clearBuffer()<br>");
out.clearBuffer();
out.println("2可见,因为接下来将调用out.flush(),再调用out.clearBuffer()<br>");
out.flush();
out.clearBuffer();
out.println("3可见,因为接下来将调用out.close()<br>");
out.close();
%>
</body>
</html>
运行结果:
4.session常用方法
session对象用来保存单个用户访问时的一些信息。
服务器对每一个客户端会话,分配一个不会重复的会话sessionID,以此来区分不同用户,从而实现针对每一用户的请求,作出正确响应。
session.getId()
获取sessionID
session.setAttribute(String key,Object value)
将value放入索引关键字为key的字符串中
session.getAttribute(String key)
获取session对象中索引关键字为key的对象
session.removeAttribute(String key)
删除session对象中索引关键字为key的对象
session. isNew()
判断是否是一个新的客户。
示例如下:
(1)session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>单击提交按钮查看存入的session</p>
<form action="showsession.jsp" method="get">
<% session.setAttribute("username", "iborder"); %>
<p>保存username为<span><%="iborder" %></span></p>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
(2)showsession.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>取得username为<span><%=session.getAttribute("username") %></span></p>
</body>
</html>
5.application常用方法
application对象实现了用户间数据的共享,可存放全局变量
代表JSP文件生成的异常对象,只能在引入了下面代码 的JSP文件中使用。
<%@ page isErrorPage="true"%>
application. setAttribute(String name,Object object)
在application中以name为关键字存入一个对象
application.get Attribute(String name)
从application中获取关键字 为 name的 对象
application.remove Attribute(String name)
从application中获取关键字 为 name的 对象
示例如下:
网站访问计数器
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String str = "";
int i=1;
if(application.getAttribute("count") == null){
application.setAttribute("count", "1");
} else{
if(session.isNew()){
str = application.getAttribute("count").toString();
i = Integer.parseInt(str);
application.setAttribute("count", Integer.toString(i+1));
}
}
%>
<p>你是本站第<%=application.getAttribute("count") %>位访问者</p>
</body>
</html>
6.config常用方法
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
String getServletName() | 返回Servlet的名字 |
ServletContext getServletContext() | 返回含有服务器相关信息的ServletContext对象 |
String getInitParameter(String name) | 返回初始化参数的值 |
Enumeration getInitParameterNames() | 返回Servlet初始化所需所有参数的枚举 |
7.pageContext常用方法
pageContext是页面上下文对象,提供了对JSP页面内所有的对象及名字空间的访问,PageContext类拥有getRequest,getResponse,getOut,getSession等方法,他相当于集成其他内置对象的功能。
JspWriter getOut() | 返回当前客户端响应被使用的JspWriter流(out) |
HttpSession getSession() | 返回当前页中的HttpSession对象(session) |
Object getPage() | 返回当前页的Object对象(page) |
ServletRequest getRequest() | 返回当前页的ServletRequest对象(request) |
ServletResponse getResponse() | 返回当前页的ServletResponse对象(response) |
Exception getException() | 返回当前页的Exception对象(exception) |
ServletConfig getServletConfig() | 返回当前页的ServletConfig对象(config) |
ServletContext getServletContext() | 返回当前页的ServletContext对象(application) |
void setAttribute(String name,Object attribute) | 设置属性及属性值 |
void setAttribute(String name,Object obj,int scope) | 在指定范围内设置属性及属性值 |
public Object getAttribute(String name) | 取属性的值 |
Object getAttribute(String name,int scope) | 在指定范围内取属性的值 |
public Object findAttribute(String name) | 寻找一属性,返回起属性值或NULL |
void removeAttribute(String name) | 删除某属性 |
void removeAttribute(String name,int scope) | 在指定范围删除某属性 |
int getAttributeScope(String name) | 返回某属性的作用范围 |
Enumeration getAttributeNamesInScope(int scope) | 返回指定范围内可用的属性名枚举 |
void release() | 释放pageContext所占用的资源 |
void forward(String relativeUrlPath) | 使当前页面重导到另一页面 |
void include(String relativeUrlPath) | 在当前位置包含另一文件 |
8.page常用功能
page对象就是指向当前JSP页面本身,类似于类中的this指针
class getClass | 返回此Object的类 |
int hashCode() | 返回此Object的hash码 |
boolean equals(Object obj) | 判断此Object是否与指定的Object对象相等 |
void copy(Object obj) | 把此Object拷贝到指定的Object对象中 |
Object clone() | 克隆此Object对象 |
String toString() | 把此Object对象转换成String类的对象 |
void notify() | 唤醒一个等待的线程 |
void notifyAll() | 唤醒所有等待的线程 |
void wait(int timeout) | 使一个线程处于等待直到timeout结束或被唤醒 |
void wait() | 使一个线程处于等待直到被唤醒 |
void enterMonitor() | 对Object加锁 |
void exitMonitor() | 对Object开锁 |
9.exception对象
exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。