JSP基础(三)JSP内置对象
JSP内置对象
JSP有以下九种内置对象,包括:
request,请求对象
response,响应对象
pageContext,页面上下文对象
session,会话对象
application,应用程序对象
out,输出对象
config,配置对象
page,页面对象
exception,异常对象
从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成。
JSP内置对象映射表
对象名 |
类型 |
作用域 |
request |
javax.servlet.ServletRequest |
Request |
response |
javax.servlet.ServletResponse |
Page |
pageContext |
javax.servlet.jsp.PageContxt |
Page |
session |
javax.servlet.http.HttpSession |
Session |
application |
javax.servlet.ServletContext |
Application |
out |
javax.servlet.jsp.JspWriter |
Page |
config |
javax.servlet.ServletConfig |
Page |
page |
java.lang.Object |
Page |
exception |
java.lang.Throwable |
Page |
request对象
request对象代表的是来自客户端的请求,例如在form表单中填写的信息等,是最常用的对象。
关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值。
request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值。
setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。
request的getParameter方法的作用是获取到客户端通过表单或url请求参数发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想获取到客户端发送过来的数据,就需要使用getParameter方法来获取。
没有与getParameter方法对应的setParameter方法。
request对象内数据的存活范围就是在request对象的存活范围内,当客户端想服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;
之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。
隐藏域(hidden):一般都是用于信息的更新,向导式的注册。
My1.jsp
<body> <form method="post" action="My2.jsp"> <input type="text" name="username"> <input type="submit" value="submit"> </form> </body>
My2.jsp
<body> <%String username=request.getParameter("username"); %> 您的姓名:<%=username %> <form action="My3.jsp" method="post"> <input type="hidden" name="username" value="<%=username%>"> <input type="text" name="ai" > <input type="submit" value="submit"> </form> </body>
My3.jsp
<body> 您的姓名是<%=request.getParameter("username") %><br> 您的爱好是<%=request.getParameter("ai") %> </body>
response对象
response对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。
但是由于组织方式比较底层,所以不建议一般人使用。
需要向客户端发送文字时直接用out对象即可。
session对象
session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。
HTTP是无状态协议;
Web Server对每一个客户端请求都没有历史记忆;
session用来保存客户端状态信息。
浏览器不关闭,session对象会一直存在(姑且这样认为),且session对象只有一个。
如果浏览器关闭重启,会创建新的session对象。
application对象
application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
运用实例:网页访问计数器。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'Counter.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
if(application.getAttribute("counter") == null)
{
application.setAttribute("counter", "1");
}
else
{
String strnum = null;
strnum = application.getAttribute("counter").toString();
int icount = 0;
icount = Integer.valueOf(strnum).intValue();
icount++;
application.setAttribute("counter", Integer.toString(icount));
}
%>
您是第<%=application.getAttribute("counter") %>位访问者!
</body>
</html>
运行结果就是访问到该页面之后显示你是第几位访客,刷新之后数目会增加,更换浏览器或者更换客户端地址都会使其访问值正常递增。
application的存活范围比request和session都要大。
只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。
其中getRealPath这个方法可以获取资源在服务器上的物理路径(绝对路径),常用来获取上传文件时要存储文件的路径。
out对象
out对象代表了向客户端发送数据的对象,与response对象不同,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。
常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
参考资料
圣思园张龙老师视频教程。