JavaWeb学习之JSP九大内置对象

时间:2022-12-26 23:39:11

在JavaWeb开发中jsp是常用的脚本,jsp内置对象,是指可以不加声明和创建就可以在JSP页面脚本中使用的成员变量。在jsp中封装了九大内置对象,分别是:out,request,response,session,application,pageContext,page,config,exception。
JavaWeb学习之JSP九大内置对象

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>

在浏览器中输出的结果:

JavaWeb学习之JSP九大内置对象

可以使用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>

浏览器显示结果:
JavaWeb学习之JSP九大内置对象