6、JSP内置对象
为了方便、有效地开发Web应用程序,JSP提供了一系列内置对象。这些对象不需要预先声明,而是由JSP容器自动定义。这些内置对象在JSP网页环境下可以直接使用。
1)、out对象
out内置对象主要用于将数据输出到客户端的浏览器网页,该对象是通过引用javax.servlet.JspWriter对象来实现的。out内置对象提供了一些用来控制输出的方法。
方法 | 说明 |
clear() | 清除缓冲区的数据 |
clearBuffer() | 清除当前缓冲区的数据 |
flush() | 输出缓冲区中的数据 |
getBufferSize() | 返回缓冲区的大小 |
getRemaining() | 返回缓冲区中剩余空间的大小 |
isAutoFlush() | 返回一个布尔值,如果AutoFlush为真,则返回true,否则返回false |
newline() | 输出换行 |
print(String s) | 输出数据 |
println(String s) | 输出数据并自动换行 |
表中的方法可以分为两类:一类是用于控制缓冲区的行为,缓冲区是JSP将数据输出至浏览器之前用来暂时存储数据的一个区域;另一类则是数据的输出操作。下面是一个关于out内置对象的实例:
<%@pagecontentType="text/html" pageEncoding="gb2312"%>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=gb2312"/>
<title>JSP Page</title>
</head>
<body>
<%
out.println("这是一个JSP网页<br>");
out.clearBuffer();
out.println("欢迎你访问<br>");
out.flush();
out.println("日期<br>");
out.println(new java.util.Date().toLocaleString()+ "<br>");
out.println("剩余缓冲区大小" +out.getRemaining() + "<br>");
out.println("缓冲区大小" +out.getBufferSize() + "<br>");
out.println("AutoFlush" +out.isAutoFlush());
%>
</body>
</html>
2)、request对象
request对象的主要作用是当客户端发出一个请求时,它封装了用户所提交的信息,然后通过调用该对象相应的方法来获取封装的信息。request内置对象提供了一些方法如下表:
方法 | 说明 |
getParameter(String name) | 返回请求参数的值,如果参数不存在则返回null |
getParameterValues(String name) | 返回请求参数的所有值 |
getParameterNames() | 返回所有参数的名称,其结果为枚举对象 |
getProtocol() | 返回通信协议的协议名称 |
getRemoteAddr() | 返回客户端的IP地址 |
getRemoteHost() | 返回客户端的名字 |
getScheme() | 返回发出请求的方式,如http、ftp、telnet |
getServerName() | 返回服务器的名字 |
getServerPort() | 返回服务器主机的端口号 |
getMethod() | 返回传送数据的方式 |
getQueryString() | 返回网址栏后的查询字符串 |
getRquestURI() | 返回请求的URI字符串,不包括网址栏后的查询字符串 |
getPathInfo() | 返回任何额外的路径信息 |
getServletPath() | 返回客户端请求的文件的路径 |
getHeaders(String name) | 返回已命名的所有报头的值的集合 |
getHeader(String name) | 返回已命名的报头的值 |
getHeaderNames() | 返回已命名的所有报头的名称的集合 |
getAttribute(String name) | 返回已命名的属性的值,如果给定名称的任何属性都不存在,则返回null |
getAttributeNames() | 返回所有属性的名称集合,其结果类型为枚举类型 |
removeAttibute(String name) | 删除请求中的一个属性 |
setAttribute(String name , Object) | 存储请求中的一个属性 |
getCharacterEncoding() | 返回请求的字符编码方式 |
getContentLength() | 返回请求内容的大小 |
下面是一个关于request对象的实例:
jspTest01.jsp:
<%@ pagelanguage="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>使用request对象</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); %>
<%
String name = request.getParameter("name"); //获取用户姓名
String tel = request.getParameter("tel"); //获取电话
String QQ = request.getParameter("QQ"); //获取QQ
%>
姓名:<%=name %> <br>
电话:<%=tel %> <br>
QQ :<%=QQ %> <br>
<h3>阿斯顿发送到</h3>
<%
//获取request内置对象的属性
out.println("协议名称:");
out.println(request.getRequestURI() + "<br>");
out.println("请求的方式:");
out.println(request.getMethod() + "<br>");
out.println("客户端地址:");
out.println(request.getRemoteAddr() + "<br>");
out.println("客户端名称:");
out.println(request.getRemoteHost() + "<br>");
out.println("返回参数值:");
out.println(request.getParameter(name) +"<br>");
out.println("字符的编码方式:");
out.println(request.getCharacterEncoding() +"<br>");
out.println("内容的大小:");
out.println(request.getContentLength() +"<br>");
out.println("服务器名称:");
out.println(request.getServerName() + "<br>");
out.println("服务器端口号:");
out.println(request.getServerPort() + "<br>");
out.println("文件的路径:");
out.println(request.getServletPath() +"<br>");
out.println("URI字符串:");
out.println(request.getRequestURI() + "<br>");
out.println("网址栏后的字符串:");
out.println(request.getQueryString() +"<br>");
out.println("发出请求的方式:");
out.println(request.getScheme() + "<br>");
out.println("URI字符串:");
out.println(request.getRequestURL() + "<br>");
%>
</body>
</html>
htmlTest01.html:
<%@contentType="text/html charset=UTF-8" %>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action="jspTest01.jsp"name="myform" method="post">
姓名:<input type="text" name="name"><br>
电话:<input type="text" name="tel"> <br>
QQ :<input type="text"name="QQ">
<input type="submit" value="确定">
</form>
</body>
</html>
Request对象的主要作用是当客户端发出一个请求时,它封装了用户所提交的信息,然后他通过调用该对象相应的方法来获取封装的信息。
3)、response对象
Response对象的主要作用是当服务器返回一个信息时,它封装了所返回的信息,然后将其送到客户端以相应客户的请求。Response是HttpServletResponse类的对象。Response内置对象提供了一些方法如下表所示:
方法 | 说明 |
flushBuffer() | 强制将缓冲区中的内容发送给客户 |
getBufferSize() | 返回缓冲区的大小 |
setBufferSize() | 设置缓冲区的大小 |
isCommitted() | 表示数据是否提交 |
Rest() | 清除缓冲区中的数据 |
getCharacterEncoding() | 返回文件的编码方式 |
setContentType() | 设置网页文件的格式和编码的方式 |
SendError() | 向客户发送错误信息 |
setStatus() | 设置response对象的状态,告诉浏览器如何处理服务器发来的信息 |
ContainsHeader(String name) | 返回布尔值表示名称为name的标头是否存在 |
setDateHeader(String name , log date) | 设置一个给定名称和日期的响应报头,如果该值已经存在,则新值会覆盖原有的值 |
setHeader(String name , String value) | 设置一个给定名称和值的响应报头,如果该值已经存在,则新值会覆盖原有的值 |
setIntHeader(String name , String value) | 设置一个给定名称和整数值的响应报头,如果该值已经存在,则新值会覆盖原有的值 |
addHeader(String name , String value) | 增加一个给定名称和值的响应报头 |
addDateHeader(String name , long date) | 增加一个给定名称和日期的响应报头 |
addIntHeader(String name , int value) | 增加一个给定名称和整数值的响应报头 |
sendRedirect(“pageUrl”) | 重新定向网页 |
下面是一个关于response对象的实例:
htmlTest.html:
<%@ contentType="text/htmlcharset=UTF-8" %>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action="jspTest01.jsp"name="myform" method="post">
<input type="radio" name="using"value="a">网页刷新 <br>
<input type="radio" name="using"value="b">操作缓冲区 <br>
<input type="submit" value="确定" >
</form>
</body>
</html>
jspTest01.jsp:
<%@ pagelanguage="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>使用request对象</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); %>
<%
String using = request.getParameter("using");//获取用户名
if(using.equals("a"))
response.sendRedirect("show1.jsp");//若选a,则跳转到show1.jsp
else if(using.equals("b"))
response.sendRedirect("show2.jsp");//若选b,则跳转到show2.jsp
%>
</body>
</html>
show1.jsp:
<%@ pagelanguage="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>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>show1</title>
</head>
<body>
<%! int c = 0 ; %>
<%
if(c == 3) c = 0;
response.setHeader("Refresh", "2");
c++;
%>
<img src="<%=c%>.png"><br>
</body>
</html>
show2.jsp:
<%@ pagelanguage="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>show2</title>
</head>
<body>
<%
out.println("缓冲区大小:");
out.println(response.getBufferSize() +"<br>");
out.println("是否写出缓冲区的数据:");
out.println(request.isSecure() + "<br>");
%>
</body>
</html>
4)、session对象
Session对象是由javax.servlet.http.HttpSession接口衍生而来的,该内建对象封装了属于客户会话的所有信息。Session存在于服务器端,当用户向服务器请求页面时,若该页面有关于session的程序代码,那么session对象便产生。他用来存放该用户的信息。下面是session的一些常用方法:
方法 | 说明 |
setAttribute(String name , Object value) | 将一个指定的名称存储在session对象中 |
getAttribute(String name) | 返回与指定参数相关的属性 |
getAttributeNames() | 返回该session对象中所有属性的名称,其结果为枚举类型 |
removeAttribute(name) | 删除与name相关的session |
getCreationTime() | 返回session建立的时间,单位为毫秒 |
getId() | 返回一个关于session的ID号 |
getLastAccessedTime() | 返回客户端向服务器发出请求的最后时间 |
getMaxInactiveInterval() | 返回一个会话两个请求的最大时间间隔,单位为秒 |
isNew() | 返回一个布尔值表示是否为新建的session |
Invalidate() | 撤销一个session对象 |
下面的实例使用session对象将客户的信息或服务器的信息存储,在需要的时候可以提取出来:
htmlTest.html:
<%@contentType="text/html charset=UTF-8" %>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action="jspTest01.jsp"name="myform" method="post">
<input type="radio" name="using"value="a">数据访问 <br>
<input type="radio" name="using"value="b">内建对象 <br>
<input type="submit" value="确定" >
</form>
</body>
</html>
jspTest01.jsp:
<%@ pagelanguage="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>使用request对象</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); %>
<%
String using = request.getParameter("using");//获取用户名
if(using.equals("a"))
response.sendRedirect("show1.jsp");//若选a,则跳转到show1.jsp
else if(using.equals("b"))
response.sendRedirect("show2.jsp");//若选b,则跳转到show2.jsp
%>
</body>
</html>
show1.jsp:
<%@ pagelanguage="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>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>show1</title>
</head>
<body>
<%
session.setAttribute("name", "小武");
session.setAttribute("number","41009160");
session.setAttribute("class", "地信1班");
%>
<%
out.println("姓名:");
out.println(session.getAttribute("name") +"<br>");
out.println("学号:");
out.println(session.getAttribute("number") +"<br>");
out.println("班级");
out.println(session.getAttribute("class") +"<br>");
%>
</body>
</html>
show2.jsp:
<%@pageimport="java.sql.Date"%>
<%@ pagelanguage="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>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>show2</title>
</head>
<body>
<%
out.println("session建立的时间");
out.println(new Date((Long)session.getCreationTime()) +"<br>");
out.println("session的ID号");
out.println(session.getId() + "<br>");
out.println("session最后被请求的时间");
out.println(session.getLastAccessedTime() +"<br>");
out.println("session最大时间间隔");
out.println(session.getMaxInactiveInterval() +"<br>");
out.println("session是否新建");
out.println(session.isNew() + "<br>");
%>
</body>
</html>
Session对象是由javax.servlet.http.HttpSession接口衍生而来的,该内建对象封装了属于客户会话的所有信息