程序员社区

JSP内置对象

目录

JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,不需要显式声明

1.jsp的9个内置对象

内置对象名 对象说明 作用域
request 请求对象 Request
response 响应对象 Page
session 会话对象 Session
application 应用程序对象 Application
page 页面对象 Page
out 输出对象 Page
config 配置对象 Page
exception 例外对象 Page
pageContext 页面上下文对象 Page

2.JSP的4个域对象

pageContext,如果把变量放在pageContext里,就说明它的作用域是page,有效范围只在当前jsp页面中
request,该对象中的数据的生命周期是一次请求的时间
session,该对象中的数据的生命周期较长
application,该对象中的数据的生命周期最长,从应用启动到应用结束。

JSP内置对象插图
JSP内置对象生命周期原理图

现在,有两个客户分别通过各自的浏览器IE_1和IE_2访问服务器

服务器启动时,会自动在内存中创建一个apllication对象,为整个应用所共享,该对象一直存在,直到服务器关闭。

当用户首次访问JSP页面时,服务器会自动创建一个session对象,并为该session对象分配一个ID,同时将该sessionID号返回给客户,保存在客户机Cookies中。
客户在随后的访问中,浏览器会将该sessionID随请求一起带给服务器,服务器根据这个ID找到之前为该客户创建的session对象。
用户断开退出服务器时,session对象失效。有些服务器出于安全性考虑,如果超过一定的时间限制,session会自动失效。

当用户每次访问某个JSP页面时,服务器会为该请求创建一个请求对象request,用于存放这次访问的所有请求信息。

所以,需要根据需求合理使用这几个对象

例如,涉及全局的网站访问次数就应该由application对象来管理
用户名等涉及多个页面的用户个人信息应由session对象管理
只涉及到一次请求过程需要的信息用request对象管理

3.http协议是无状态的

协议对事务处理没有记忆能力

无状态意味着如果后续处理需要前面的信息,它必须重传。

JSP中是通过session对象来解决http应用程序的状态需求的。

4.out对象 

out对象是javax.servlet.jsp.JspWriter类的实例,主要作用是用来向客户端输出内容,同时管理应用服务器输出缓冲区。

out对象有两个方法用于输出数据:print和println,该对象可以输出任何合法的Java表达式。

利用out对象在浏览器中输出服务器的系统时间 

out.jsp 

<%@ page language="java" import="java.util.*,java.text.SimpleDateFormat" pageEncoding="gbk"%>
<html>
<head></head>
<body>
	<%SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = new Date();
		out.print("原始日期:"+date);
		String str1 = sdf.format(date);
		out.print("<br>格式化日期:"+str1);
		sdf.applyPattern("yyyy年MM月dd日");
		String str2 = sdf.format(date);
		out.print("<br>另一格式的日期:"+str2);
	%>
</body>
</html>

JSP内置对象插图1

5.page对象

page对象代表JSP页面本身,或者说它代表了被转换后的Servlet

在JSP页面中,this关键字表示当前JSP页面这个对象。因此它可以调动任何被Servlet类所定义的方法。

page对象的基类是java.lang.Object类,可通过该对象调用Object类中的那些方法。

使用getServletInfo方法,获取当前页面的info属性

info.jsp 

<%@ page contentType="text/html;charset=GB2312"%>
<%@ page info="版权单位:信息科学技术学院"%>
<html>
<body>
	<%=this.getServletInfo()%>
</body>
</html>

JSP内置对象插图2

6.requset对象

客户每次向JSP服务器发送请求时,JSP引擎都会创建一个request对象。

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。

它是javax.servlet.http.HttpServletRequest类的实例。

①通过一个示例来说明Request对象的几个常用方法的使用

request_1.jsp 

<%@ page language="java" pageEncoding="utf-8"%>
<html>
	<body>
	<%
		out.println("请求使用的协议:"+request.getProtocol()+"<br>");
		out.println("请求使用Schema:"+request.getScheme()+"<br>");
		out.println("访问服务的名称:"+request.getServerName()+"<br>");
		out.println("访问端口号:"+request.getServerPort()+"<br>");
		out.println("客户端IP地址:"+request.getRemoteAddr()+"<br>");
		out.println("请求的类型(Method):"+request.getMethod()+"<br>");
		out.println("Session Id:"+request.getRequestedSessionId()+"<br>");
		out.println("请求的资源定位(Request URL):"+request.getRequestURL()+"<br>");
		out.println("servlet在服务器文件夹的相对位置:"+request.getServletPath()+"<br>");
		out.println("Host:"+request.getHeader("Host")+"<br>");
		out.println("Accept-Language:"+request.getHeader("Accept-Language")+"<br>");
		out.println("得到链接的类型(Connection):"+request.getHeader("Connection")+"<br>");
		out.println("得到Cookie的字符串信息:"+request.getHeader("Cookie")+"<br>");
		out.println("session的相关信息-创建时间:"+session.getCreationTime()+"<br>");
		out.println("session的相关信息-上次访问时间:"+session.getLastAccessedTime()+"<br>");
	 %>
	</body>
</html>

JSP内置对象插图3

 ②request.getParameter()方法和request.getParameterValues()方法的使用

getParameter()可以获取客户端提交页面中某一个控件的值,如:文本框、单选按钮、下拉列表框等。
getParameterValues()可以获取客户端提交页面中的一组控件的值

inputInfo.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<html>
	<body>
		<form action="showInfo.jsp" method="post" name="frm">
			<strong><font size="4">基本资料</font></strong>
			<table width="400" cols="2" border="1">
				<tr>
					<td><font color="red" size="2">*</font>姓名:</td>
					<td><input type="text" size="18" name="name"></td>
				</tr>
				<tr>
					<td><font color="red" size="2">*</font>性别:</td>
					<td><input type="radio" name="rdo" value="男" checked><font size="3">男</font>
					<input type="radio" name="rdo" value="女" checked><font size="3">女</font></td>
				</tr>
				<tr>
					<td><font font="2">*</font>民族:</td>
					<td><input type="radio" value="汉族" name="rdo1" checked><font size="3">汉族</font>
					<input type="radio" value="回族" name="rdo1"><font size="3">回族</font>
					<input type="radio" value="壮族" name="rdo1"><font size="3">壮族</font></td>
				</tr>
				<tr>
					<td><font color="#ff8000" font="2">*</font>专业:</td>
					<td>
						<select name="Major">
							<option value="计算机科学与技术">计算机科学与技术</option>
							<option value="软件工程">软件工程</option>
							<option value="网络工程">网络工程</option>
							<option value="信息安全">信息安全</option>
						</select>专业
					</td>
				</tr>
				<tr>
					<td>兴趣爱好:</td>
					<td>
						<input type="checkbox" name="ckbx" value="电影">电影
						<input type="checkbox" name="ckbx" value="戏剧">戏剧
						<input type="checkbox" name="ckbx" value="音乐">音乐
						<input type="checkbox" name="ckbx" value="美术">美术
					</td>
				</tr>
			</table><br>
			<input type="submit" value="注册" name="submit">
		</form>
	</body>
</html>




showInfo.jsp 

<%@ page contentType="text/html;charset=utf-8" import="java.lang.reflect.*"%>
<html>
<body>
	用户注册信息<br>
	基本资料<br>
		<!-- 防止中文乱码 -->
		<%request.setCharacterEncoding("utf-8"); %>
		姓名:<%=request.getParameter("name")%><br>
		性别:<%=request.getParameter("rdo")%><br>
		民族:<%=request.getParameter("rdo1")%><br>
		专业:<%=request.getParameter("Major")%> 专业<br>
		兴趣爱好:<%
			String ckbx[] = request.getParameterValues("ckbx");
			if(ckbx != null) {
				for(int i=0;i<Array.getLength(ckbx);i++)
					out.println(ckbx[i]+" ");
			}%>
</body>
</html>

inputInfo.jsp页面展示 

JSP内置对象插图4

点击注册,跳转到showInfo.jsp页面 

JSP内置对象插图5

7.response对象

response对象是javax.servlet.http.httpServletResponse接口的实例,是服务器对request对象请求的回应,负责向客户端发送数据。
通过调用response对象的方法还可以获得服务器端的相关信息,如状态行、head和信息体等 

①sendRedirect()方法 

可向服务器发送一个重定向的请求,用它转到另外一个页面时,相当于从客户端重新发了一个请求,浏览器地址栏上会出现重定向后页面的URL,这种跳转属于客户端跳转
服务器会重新生成一个request对象,原来的request对象就失效了。
此语句之后的其它语句仍然会执行。 

resp_sendRedirect.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head></head>
<body>
<% System.out.println("跳转之前"); %>
<% response.sendRedirect("index.html"); %>
<% System.out.println("跳转之后"); %>
</body>
</html>

index.html 

<!DOCTYPE html>
<html>
  <head>
    <title>index.html</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    This is my HTML page. <br>
  </body>
</html>

JSP内置对象插图6

控制台输出: 
跳转之前
跳转之后

②setHeader()方法

利用response设置head信息,实现页面定时刷新的功能 

resp_refresh.jsp 

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<html>
<head>
	<title>设置头信息(自动刷新)</title>
</head>
<body>
<%! int count=0; %>
<%
	response.setHeader("refresh", "2"); //页面2秒一刷新
%>
<h3>已经访问了<%=count++ %>次!</h3>
</body>
</html>

 JSP内置对象插图7

利用response设置head信息,实现页面定时跳转的功能 

resp_from.jsp 

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<html>
<head>
	<title>设置头信息(定时跳转)</title>
</head>
<body>
<h3>
	3秒后跳转到index.html页面,<br>
	如果没有跳转,请按<a href="index.html">这里</a>!
</h3>
<%
	response.setHeader("refresh", "3;URL=index.html");
%>
</body>
</html>

JSP内置对象插图8

利用response实现禁用浏览器缓存,使用浏览器“回退”按钮回到前一页,也必须重新从服务器上获取。

resp_nocache.jsp 

<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.Date" pageEncoding="utf-8" %>
<html>
<head>
	<title>禁用页面缓存</title>
	<%
		response.addHeader("Pragma", "no-cache");
		response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
		response.addHeader("Cache-Control", "pre-check=0, post-check=0");
		response.setDateHeader("Expires", 0);
	 %>
</head>
<body>
<%
	Date d = new Date();
	out.println(d);
%><br>
<a href="index.html">去index.html看看</a>
</body>
</html>

JSP内置对象插图9

8.session对象

session对象是javax.servlet.http.HttpSession接口的实例对象

session对象是用户首次访问服务器时由服务器自动为其创建的。创建的同时,会为该session对象生成唯一的session id,该对象的其它属性只保存在服务器中,发到客户端的只有session id,当客户端再次发送请求的时候,会将这个session id带上,服务器会依据这个session id找到相应的session对象。

服务器会为session设置一个失效时间

在JSP中通过HttpServletRequest的getSession(true)方法获得session对象。

下面是一个用户登录的例子

login.jsp 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<%--进行登录验证--%>
<%
	request.setCharacterEncoding("utf-8");
	// 获取用户请求信息
	String user = request.getParameter("user");
	String password = request.getParameter("password");
	if("admin".equals(user) && "123".equals(password)) {
	request.getSession().setAttribute("username", user);	//将用户保存在session中
%>
<jsp:forward page="login_ok.jsp">
	<jsp:param name="info" value="新人乍到,请多关照!" />
</jsp:forward>
<%}%>
<html>
<head>
	<base href="<%=basePath %>">
</head>
<body>
	<body>
		<form action="login.jsp" method="post">
			<table>
				<tr><td colspan="2" align="center">用户登录</td></tr>
				<%
					if(user != null && password != null) {
				%>
					<tr><td colspan="2">用户名或密码错误,请重新登录!</td></tr>
				<%}%>
				<tr><td>登录名:</td><td><input type="text" name="user"></td></tr>
				<tr><td>密码:</td><td><input type="password" name="password"></td></tr>
				<tr><td colspan="2" align="center"><input type="submit" value="登录"></td></tr>
			</table>
		</form>
	</body>
</body>
</html>

 login_ok.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<html>
<head>
	<title>登录成功</title>
</head>
<body>
	当前用户:<%=request.getSession().getAttribute("username") %><br>
	从request对象中获取了如下参数:<br>
	info=<%=request.getParameter("info") %><br>
	user=<%=request.getParameter("user") %><br>
	password=<%=request.getParameter("password") %><br>
	<a href="login.jsp">返回登录页面</a>
</body>
</html>

JSP内置对象插图10

9. application对象

application对象是在Web服务器启动时由服务器自动创建的,它的生命周期是JSP所有隐含对象中最长的,一旦创建了application对象,直到服务器关闭它才会销毁。

利用application对象实现网站计数器的功能 

application.jsp 

<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
	<title>网站访问计数器</title>
</head>
<body>
	<%
		if(application.getAttribute("count") == null) {
			application.setAttribute("count","1");
			out.println("欢迎,您是第1位访客!");
		} else {
		  int i = Integer.parseInt(application.getAttribute("count").toString());
		  i++;
		  application.setAttribute("count",String.valueOf(i));
		  out.println("欢迎,您是第"+i+"位访客!");
		}
	 %>
	 <hr>
</body>
</html>

JSP内置对象插图11

10.config对象

config对象中存储着一些servlet初始的数据结构。
config对象实现了javax.servlet.ServletConfig接口。
如果在web.xml文件中,针对某个Servlet文件或JSP文件设置了初始化参数,则可以通过config对象来获取这些初始化参数。

11.exception对象

当JSP页面发生错误时,会产生异常。exception对象就是用来针对异常作出相应处理的对象。

12.pageContext对象 

pageContext能够存取其他内置对象,当内置对象包括属性时,pageContext也支持对这些属性的读取和写入。 

JSP引擎在把JSP转换成Servlet时经常需要用到pageContext对象,但在普通的JSP开发中一般都很少直接用到该对象。 

pagecontext.jsp 

<%@ page import="java.util.Enumeration" contentType="text/html;charset=GB2312"%>
<html>
<head></head>
<body>
<h2>PageContext实例</h2>
<%
	// APPLICATION_SCOPE表示在application对象中搜索
	Enumeration enums = pageContext.getAttributeNamesInScope(PageContext.APPLICATION_SCOPE);
	while(enums.hasMoreElements()) {
		out.println("application scope attributes: " + enums.nextElement()+"<br>");
	}
 %>
</body>
</html>

JSP内置对象插图12

赞(0) 打赏
未经允许不得转载:IDEA激活码 » JSP内置对象

一个分享Java & Python知识的社区