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内置对象生命周期原理图

现在,有两个客户分别通过各自的浏览器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>

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>

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>

 ②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页面展示 

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

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>

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

②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>

 

利用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>

利用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>

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>

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>

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值