JSP内置对象包括request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。这些对象在客户端和服务器端交互的过程中分别完成不同的功能。
1.Request对象
Request对象是javax.servlet.http.HtupServletRequest类的实例。代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。比如表单中的数据、网页地址后带的参数等。
常用方法 方法介绍
| 方法 | 说明 |
|---|---|
| String getParameter(String name) | 返回name指定参数的参数值 |
| String[] getParameterValues(String name) | 返回包含参数name的所有值的数组 |
| void setAttribute(String,Object) | 存储此请求中的属性 |
| Object getAttribute(String name) | 返回指定属性的属性值 |
| String getContentType() | 得到请求体的MIME类型 |
| String getProtocol() | 返回请求用的协议类型及版本号 |
| String getServerName() | 返回接受请求的服务器主机名 |
| int getServerPort() | 返回服务器接受此请求所用的端口号 |
| String getCharacterEncoding() | 返回字符编码方式 |
| void setCharacterEncoding() | 设置请求的字符编码方式 |
| int getContentLength() | 返回请求体的长度(以字节数) |
| String getRemoteAddr() | 返回发送此请求的客户端IP地址 |
| String getRealPath(String path) | 返回一虚拟路径的真实路径 |
| String request.getContextPath() | 返回上下文路径 |
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>用户注册</h1>
<form name="regForm" action="request.jsp" method="get">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>爱好:</td>
<td><input type="checkbox" name="favorite" value="read">读书
<input type="checkbox" name="favorite" value="music">音乐
<input type="checkbox" name="favorite" value="moive">电影
<input type="checkbox" name="favorite" value="internet">上网</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
<br>
<br>
<a href="request.jsp?username=xxx">测试URL传参数</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>request内置对象</h1>
<%
request.setAttribute("password", "123456");
%>
用户名:<%=request.getParameter("username")%>
<br>
爱好:
<%
if (request.getParameterValues("favorite") != null) {
String[] fav = request.getParameterValues("favorite");
for (int i = 0; i < fav.length; i++) {
out.println(fav[i] + " ");
}
}
%>
<br>
密码:<%=request.getAttribute("password")%><br>
请求体的mime类型:<%=request.getContentType()%><br>
协议类型及版本号:<%=request.getProtocol()%><br>
服务器主机名:<%=request.getServerName()%><br>
请求的端口号:<%=request.getServerPort()%><br>
字符编码方式:<%=request.getCharacterEncoding()%><br>
请求体的长度:<%=request.getContentLength()%><br>
返回发送请求的客户端IP地址:<%=request.getRemoteAddr()%><br>
返回虚拟路径的真实路径:<%=request.getRealPath("request.jsp")%><br>
返回上下文路径:<%=request.getContextPath()%><br>
</body>
</html>
2.Response对象
Response对象是javax.servlet.http.HttpServletResponse类的实例。代表响应对象,主要用于向客户端发送数据。
| 方法 | 说明 |
|---|---|
| addCookie | 添加一个Cookie对象 |
| addHeader | 添加Http文件指定名字头信息 |
| containsHeader | 判断指定名字Http文件头信息是否存在 |
| encodeURL | 使用sessionid封装URL |
| flushBuffer | 强制把当前缓冲区内容发送到客户端 |
| getBufferSize | 返回缓冲区大小 |
| getOutputStream | 返回到客户端的输出流对象 |
| sendError | 向客户端发送错误信息 |
| sendRedirect | 把响应发送到另一个位置进行处理 |
| setContentType | 设置响应的MIME类型 |
| setHeader | 设置指定名字的Http文件头信息 |
<%
response.sendRedirect("login.jsp"); //重定向到登录页面
%>
设置页面自动刷新
通过设置HTTP头还可以实现页面的自动刷新。
示例:使页面每隔10秒自动刷新一次。
<%
response.setHeader("refresh", "10");
%>
定时跳转网页
通过设置HTTP头还可以实现定时跳转页面功能。
示例:使页面5秒后自动跳转到指定的网页。
<% response.setHeader("refresh", "5;URL=login.jsp");%>
禁用缓存
在默认情况下,浏览器将会对显示的网页内容进行缓存,这样可以提高网页的显示速度。对于一些安全性要求比较高的网站,通常需要禁用缓存。
示例:通过设置HTTP头的方式实现禁用缓存。
<%
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
%>
1)如果使用request.getRequestDispatcher().forward() 这种方式进行跳转页面,前后页面共享一个request,存储在request里面的数据也会一起发送过去下一个页面, 。
2)如果用response.sendRedirect()是重新定向,前后页面不是一个request。
你在页面中写的request,当这个jsp页面被servlet容器编译成servlet,再生成html流,通过response输出到前端时生命周期才算结束,你的request在编译、执行期间都是有效的,这次请求响应的周期直到response.write才算结束。不要弄混淆,你写的JSP和用户在前端看到的并不是同一个东西,JSP只是脚本,用户看到的是脚本解释执行后输出的结果
3.Out对象
Out对象是javax.servletjspjspWriter类的实例。主要用于向客户端浏览器输出数据。
print()方法
示例:通过两种方式向客户端浏览器输出文字。
<% out.print("数字:");%>
println()方法
println()方法也可以用于向客户端浏览器输出信息,该方法输出内容后,还输出一个换行符。
示例:使用println()方法向客户端浏览器输出文字。
<pre>
<%
out.print("数字:");
out.println("1");
out.println("2");
out.println("3");
out.println("<b>4</b>");
%>
</pre>
说明:使用println()方法输出内容要有换行的效果,需要同时使用HTML的<pre>标记括起来,否则无法显示换行效果。
4.session对象
session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。
| 方法 | 说明 |
|---|---|
| setAttribute(String name Object value) | 该方法用于将信息保存到session范围内。 |
| Object getAtribute(String name) | 该访法用于获取session信息,返回值为Object类型。 |
| removeAttribute(String name) | 移除session对象。 |
| invalidate() | 销毁session对象。 |
| long getL astAccessedTime() | 返回客户端最后- -次与会话相关联的请求时间。 |
| int getMaxinactiveInterval() | 以秒为单位返回一个会话内两次请求最大时间间隔。 |
| setMaxinactiveInterval(int interval) | 以秒为单位设置session的有效时间。 |
| long getCreationTime() | 返回session对象被创建的时间,以毫秒为单位,从1970年1月1号凌晨开始算起。 |
| String getld) | 返回session对象的ID。 |
| boolean isNew() | 返回是否为- -个新的客户端,或者客户端是否拒绝加入session. |
<%
session.setAttribute("userName", "admin"); //保存session对象
String userName = session.getAttribute("userName").toString(); //获取session对象
%>
5.Application对象
Application对象是javax.servlet.ServletContext类的实例。主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。
| 方法 | 说明 |
|---|---|
| String getInitParameter(String name) | 获取已命名的应用程序初始化参数值。 |
| Enumeration<String> getInitParameterNames() | 获取所有已定义的应用程序初始化参数名的枚举。 |
| Enumeration<String> getAttributeNames() | 获取所有application对象使用的属性名。 |
| Object getAttribute(String name) | 从application对象中获取指定对象名。 |
| void setAttribute(String key,Object obj) | 使用指定名称和指定对象在application对象中进行关联。 |
| void removeAttribute(String name) | 从application对象中去掉指定名称的属性。 |
6.PageContext对象
PageContext对象是javax.servlet.jsp.PageContext类的实例。用来管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由JSP容器来完成的。
| 方法 | 说明 |
|---|---|
| forward(String relativeUrlPath) | 把页面转发给另一个页面。 |
| getAttribute(String name) | 获取参数值。 |
| getAttributeNamesInScope(int scope) | 获取某范围的参数名称的集合。 |
| getException() | 获取exception对象。 |
| getRequest() | 获取request对象。 |
| getResponse() | 获取response对象。 |
| getSession() | 获取session对象。 |
| getOut() 获取out对象。 | |
| setAttribute(String name,Object value) | 为指定范围内的属性设置属性值。 |
| removeAttribute(String name) | 删除指定范围内的指定对象。 |
7.Config对象
config对象主要用于取得服务器的配置信息。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
config对象的常用方法如下:
| 方法 | 说明 |
|---|---|
| getServletContext() | 获取Servlet上下文。 |
| getServletName() | 获取Servlet服务器名。 |
| getInitParameter(String name) | 获取服务器所有初始化参数名称。 |
| getInitParameterNames() | 获取服务器中name参数的初始值。 |
8.Page(相当于this)对象
Page对象是javax.servlet.jsp.HttpJspPage类的实例。用来处理JSP网页,它指的是JSP页面对象本身,或者说代表编译后的servlet对象,只有在JSP页面范围之内才是合法的。
| 方法 | 说明 |
|---|---|
| getClass() | 返回当前Object的类。 |
| hashCode() | 返回该Object的哈希代码。 |
| toString() | 把该Object类转换成字符串。 |
| equals(Object obj) | 比较该对象和指定的对象是否相等。 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page对象各方法的应用</title>
<meta name="author" content="">
</head>
<body>
<%! Object object; //声明一个Object型的变量 %>
<ul>
<li>getClass()方法的返回值:<%=page.getClass()%></li>
<li>hashCode()方法的返回值:<%=page.hashCode()%></li>
<li>toString()方法的返回值:<%=page.toString()%></li>
<li>与Object对象比较的返回值:<%=page.equals(object)%></li>
<li>与this对象比较的返回值:<%=page.equals(this)%></li>
</ul>
</body>
</html>
9.Exception对象
Exception对象是java.lang.Throwable类的实例。处理JSP文件执行时发生的错误和异常只有在JSP页面的page指令中指定isErrorPage=“true”后,才可以在本页面使用exception对象。
| 方法 | 说明 |
|---|---|
| getMessage() | 返回exception对象的异常信息字符串。 |
| getLocalizedMessage() | 返回本地化的异常错误。 |
| toString() | 返回关于异常错误的简单信息描述。 |
| fillInStackTrace() | 重写异常错误的栈行轨迹。 |
JSP四大作用域:
| 范围 | 说明 |
|---|---|
| pageContext范围 | 只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类)) |
| request范围 | 只在一个请求中保存数据(javax.servlet.httpServletRequest) |
| Session范围 | 在一个浏览器范围在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession) |
| Application范围 | 在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext) |