在JavaWeb开发中jsp是常用的脚本,jsp内置对象,是指可以不加声明和创建就可以在JSP页面脚本中使用的成员变量。在jsp中封装了九大内置对象,分别是:out,request,response,session,application,pageContext,page,config,exception。
out对象
out对象是javax.servlet.jsp.JspWriter类的实例,是向客户端浏览器输出内容的常用对象。
常用方法:
- void print():向客户端打印字符串
- void clear():清除缓冲区的内容,如果在flush之后调用会抛出异常
- void clearBuffer():清除缓冲区的内容,如果在flush之后调用不会抛出异常
- void flush():将缓冲区内容输出到客户端
- int getBufferSize():返回缓冲区字节数的大小,如不设缓冲区则为0
- int getRemaining():返回缓冲区还剩余多少可用
- boolean isAutoFlush():返回缓冲区满时,是自动清空还是抛出异常
- void close():关闭输出流
flush()方法是清空缓冲区的内容,如果后面直接调用clear()方法,在浏览器上clear()之后的内容就不会输出,示例:
<body>
<%
out.println("<h1>悯农</h1>");
out.println("锄禾日当午<br>");
out.println("汗滴禾下土<br>");
out.flush();//清空缓冲区内容
out.clear();//用在flush方法之后会抛出IO异常
out.println("谁知盘中餐<br>");
out.println("粒粒皆辛苦<br>");
%>
缓冲区大小:<%=out.getBufferSize() %>字节<br>
缓冲区剩余大小:<%=out.getRemaining() %>字节<br>
是否自动清空缓冲区:<%=out.isAutoFlush() %>
</body>
在浏览器中输出的结果:
可以使用clearBuffer()方法来清空缓冲区。
request对象
客户端请求被封装到request对象中,通过它才能了解到客户端的需求,然后做出响应。request对象是javax.servlet.http.HttpServletRequest类的实例,具有请求域,在完成客户端请求之前,该对象一直有效。
常用方法:
- 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.getContentPath()返回上下文路径
用户登录实例:
login.jsp页面
<body>
<h1>用户登录</h1>
<hr>
<form action="dologin.jsp" name="login" method="post">
<table>
<tr>
<td>
用户名:<input type="text" name="user">
</td>
</tr>
<tr>
<td>
密码:<input type="password" name="pwd">
</td>
</tr>
<tr>
<td>
<input type="submit" value="登录">
</td>
</tr>
</table>
<a href="dologin.jsp?user=李四">测试URL传递参数</a>
</form>
</body>
dologin.jsp页面
<body>
<h1>登录成功</h1>
<%
//设置编码格式
request.setCharacterEncoding("utf-8");
%>
用户名:<%=request.getParameter("user") %><br>
密码:<%=request.getParameter("pwd") %><br>
</body>
response对象
response对象包含了响应客户请求的有关信息,但在jsp中很少用到它。它是javax.servlet.http.HttpServletResponse类的实例,该对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对象对该页面无效。
常用方法:
- String getCharacterEncoding()返回响应用的是何种字符编码
- void setContentType(String type)设置响应的MIME类型
- PrintWriter getWriter()返回可以向客户端输出字符的一个对象,在浏览器上输出的内容提前于内置对象out
- sendRedirect(String location)重新定向客户端的请求,链接发生改变
请求转发和请求重定向
请求转发:属于服务器行为,调用的方法是
request.getRequestDispatcher(String url).forward(req,resp); 是一次请求,转发后请求对象会保存,地址栏的URL不会改变;
请求重定向:属于客户端行为,调用的方法是response.sendRedirect(String utl),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL发生改变;
session对象
Session表示客户端与服务器的一次会话,Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。Session实际上是一个特定的时间概念。在服务器的内存中保存着不同用户的session。
session是javax.servlet.http.HttpSession类的实例。从一个用户打开浏览器并连接到服务器开始,到用户关闭浏览器离开这个服务器结束,被称为一个会话。当一个用户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。Session对象在第一个JSP页面被加载时自动创建,完成会话期管理。
常用方法:
- long getCreationTime()返回Session创建时间
- String getId()返回session创建时JSP引擎为它设的唯一ID号
- Object setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
- Object getAttribute(String
name)返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null - String[] getValueNames()返回一个包含此session中所有可用属性的数组
- int getMaxInactiveInterval()返回两次请求间隔多长时间此session被取消(单位秒)
application对象
appliction对象是javax.servlet.ServletContext类的实例,定义了servlet用于和它的servlet容器进行通信的一套方法。application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。
常用方法:
- void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
- Object getAttribute(String name)
返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null - Enumeration getAttributeNames()返回所有可用属性名的枚举
- String getServerInfo()返回JSP引擎名及版本号
统计页面访问次数,实例:
<body>
<%
if(application.getAttribute("count")==null){
application.setAttribute("count", new Integer(1));
}else{
Integer i = (Integer)application.getAttribute("count");
i++;
application.setAttribute("count", i);
}
out.print("您是我们网站第"+application.getAttribute("count")+"位访问者");
%>
</body>
page对象
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例。
pageContext对象
pageContext对象是javax.servlet.jsp.PageContext类的实例,该对象提供了对JSP页面内所有的对象及名字空间的访问,可以访问到本页的session,也可以取本页面所在的application的某一属性。pageContext对象相当于页面中所有功能的集大成者。
常用方法:
- JspWriter getOut()返回当前客户端响应被使用的JspWriter流(out)
- HttpSession getSession()返回当前页中的HttpSession对象(session)
- Object getPage()返回当前页的Object对象(page)
- ServletRequest getRequest()返回当前页的ServletRequest对象(request)
- ServletResponse getResponse()返回当前页的ServletResponse对象(response)
- void setAttribute(String name,Object obj)设置属性及属性值
- Object getAttribute(String name,int scope)在指定范围内取属性的值
- int getAttributeScope(String name)返回某属性的作用范围
- void forward(String rul)使当前页面重导到另一个页面,地址不改变
- void include(String url)在当前位置包含另一个文件
在页面中导入另一个页面的内容,实例:
time.jsp页面
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
out.print(time);
%>
pageContextDemo.jsp页面
<%
pageContext.include("time.jsp");
%>
config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。该对象是javax.servlet.ServletConfig类的实例。
常用方法:
- ServletContext getServletContext()返回含有服务器有关信息的ServletContext对象
- String getInitParameter(String name)返回初始化参数的值
- Enumeration getInitParameterNames()返回Servlet初始化所需的所有参数的枚举
exception对象
exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的实例。
常用方法:
- String getMessage()返回描述异常的信息
- String toString()返回关于异常的简短描述消息
- void printStackTrace()显示异常及其栈轨迹
- Throwable FillInStackTrace()重写异常的执行栈轨迹
实例:
error.jsp页面
<!-- 在抛出异常的页面page指令中添加errorPage属性,属性值为处理异常的页面 -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="exception.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
……
</head>
<body>
<%
//在此处抛出异常
out.print(100/0);
%>
</body>
</html>
exception.jsp页面
<!-- 在处理异常的页面的page指令中,添加isErrorPage属性,值为true -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
……
</head>
<body>
异常消息:<%=exception.getMessage() %><br>
异常的字符串:<%=exception.toString() %><br>
异常轨迹:<%=exception.getStackTrace() %>
</body>
</html>
浏览器显示结果: