14.JSP内置对象(或者称为内建对象或隐含对象):是不需要声明便可以直接在JSP中使用的JAVA对象。
JSP内置对象有9个,他们是:Request、Response、Out、PageContext、Session、Application、Config、Page、Exception。
14.1.Request :是javax.servlet.http.HttpServletRequest对象在jsp端的内置对象。该对象包含:1.所有的请求信息 ---->如请求来源、标题头(<head>)、cookies和请求相关的参数数值等,常用方法如下:
14.1.1.Object getAttribute (String name) :返回由name指定的属性值,该属性不存在时返回null。
14.1.2.void setAttribute (String name, Object value):在属性列表添加指定属性。(相关书记上说该属性还可以删除指定属性,这个需要证实一下)
14.1.3.String getParameter (String name) : 获取客户端发送给服务器端的参数值。
14.1.4.String[] getParameterValues (String name):获得请求中指定参数的所有值。
14.1.5.String getProtocol () : 返回请求使用的协议,可以是HTTP1.1 或者 HTTP1.0.
14.1.6.String RequestURI():返回发出请求的客户端地址(不包括请求的参数字符串)
14.1.7.String getRemoteAddr():获取发出请求的客户端IP地址。
14.1.8.HttpSession getSession():获取Session.
下面根据以上的常用方法给出一个具体的代码实例,详见下方:
<%@ 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 'welcome.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>
欢迎:<%=request.getParameter("username") %><br>
<p> 协议: <%= request.getProtocol() %> </p><br>
<p> 地址: <%= request.getRequestURI() %> </p><br>
<p> 本机地址: <%= request.getRemoteAddr() %> </p><br>
</body>
</html>
发布之后的显示效果如下:
14.2.Response,是HttpServletResponse对象在JSP中的内置对象的表现。该对象提供了用于设置送回浏览器的响应方法,比较常用的方法如下:
14.2.1sendRedirect(URL) :重定向方法,将用户重定向到一个不同的URL上去。
该方法和jsp动作标签<forward>的区别如下:
a.标签重定向只是在JSP容器(本例为Tomcat)内进行的同一个WEB应用程序的重定向,重定向后浏览器的URL不会发生改变。方法的重定向是通过修改HTTP头来实现的,重定向后地址栏发生变化
b.标签的重定向在一个Request中完成,实现了一个Servlet实例到另外一个Servlet实例的转变,方法是在两个Request中进行的。
c.标签重定向会带着原来请求的参数,方法则不会。
14.2.2setContenType(String type) :????响应设置内容类型头.....????(网上是这么说的,我还需要再看看,不明白呀)
14.2.3addHeader(String name,String value) :为HTTP文件头添加一个String类型的值。
14.3.Out对象:该对象作用是向客户端以输出流的方式输出数据,该对象为javax.jsp.JspWriter的一个实例。常用方法如下:
14.3.1.out.print() ---->输出各种类型的数据。
14.3.2.out.newLine() ---->输出一个换行符。
14.3.3.out.close() ---->关闭流。
下面给出out的用法说明的例子,详见代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%
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 'myoutjsp.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>
<%
Date Now = new Date();
String hours = String.valueOf(Now.getHours());
String mine = String.valueOf(Now.getMinutes());
String secs = String.valueOf(Now.getSeconds());
%>
<p>现在小时:</p>
<% out.println(String.valueOf(Now.getHours()));
out.println(hours);
%>
<br>
<p>现在分钟:</p>
<br>
<% out.println(String.valueOf(Now.getMinutes()));
out.println(mine);
%>
<br>
<p>现在秒:</p>
<br>
<% out.println(String.valueOf(Now.getSeconds()));
out.println(secs);
%>
</body>
</html>
在页面上的效果如下:
14.4.Application、pageContext:这里需要说的是一个关于内置对象范围的事情先看下边的图。
在JSP中,我们会遇到JSP范围这个概念(也就是JSP Scope),从大到小分别是
1. Application: --->对应的内置方法为Application --->相关方法都是 setAttribute() 和 getAttribute():生命周期是【服务器启发到服务器关闭】
2. Session: --->对应的内置方法为Session--->相关方法都是 setAttribute() 和 getAttribute():生命周期是【客户端与服务器的连接从开始到断开】
3. Request: --->对应的内置方法为Request--->相关方法都是 setAttribute() 和 getAttribute() :生命周期是【一个JSP页面发出请求到一个JSP页面】
4. Page: --->对应的内置方法为 pageContext--->相关方法都是 setAttribute() 和 getAttribute():生命周期是【JSP 页面内】
14.5.Session:是javax.servlet.http.HttpSession对象在JSP中的内置对象的表示。该对象可以存储用户的状态信息。该对象在浏览器第一个JSP页面被装载时自动创建,用于完成会话期(也就是一个Session的生命周期)的管理。从浏览器连接到服务器开始,到浏览器关闭并断开与服务器的连接终止,这个生命周期被称为是一次会话。而Session最大的用处就是帮助浏览器知道是同一个用户在进行操作(还有cookie这个进行辅助,这个需要单独进行学习了),该对象的常用方法如下:
14.5.1public String getId():获取Session对象编号。
14.5.2public void setAttribute (String key , Object obj):将参数Object指定的对象obj添加到Session对象中,并为其添加一个对象指定的索引关键字。
14.5.3public Object getAttribute (String key): 获取Session 对象中含有关键字的对象。
14.5.4public Boolean isNew(): 判断是否为一个新的客户。
下面展示一个代码例子来说明用法(记录有多少新的Session连接到了某个网站上,记录历史累计的次数):
<%@ 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>This is my JSP 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>
<%!
int number = 0;
synchronized void countPeople(){
number++;
}
%>
<%
if(session.isNew())
{
countPeople();
String countStr = String.valueOf(number);
session.setAttribute("count",countStr);
}
%>
<body>
<br>
<form method="post" action="welcome.jsp" name="loginFrom">
<p> <input type="text" maxlength="25" size="20" name="username" value="用户名"></p>
<p> <input type="text" maxlength="25" size="20" value="密码" name="password"></p>
<p> <input type="Submit" value="提交" name="submit"></p>
</form></body>
<p>第<%=(String)session.getAttribute("count")%>个访问本网站的人</p>
</html>
显示效果如下:
14.6.Page对象:某个JSP页面转化成为Servlet都会在JSP页面提供Page对象,该对象是Servlet类的this,可以用Page对象访问该Servlet实例的属性和函数。
14.7.Config对象: 该对象表示的是javax.servlet.ServletConfig对象,也就是javax.servlet.ServletConfig对象在JSP页面上的体现,可以通过该对象存取Servlet实例的初始化参数,其中,返回某参数的初始化值用的比较多--->String getInitParameter(String name),另外返回某JSP页面上全部初始参数的名称集合的方法用的也很多--->Enumeration getInitParameters(),当我们想要返回Servlet名称时可以执行String getServletName()方法,如果想要返回执行者的Servlet上下文,可以执行ServletContext getContext()方法。
14.8.Exception对象---异常处理对象:前提JSP页面包含<%@ page isErrorPage = "true" %> ,用来处理JSP文件执行时发生的错误和异常。语法为:<%=exception.getMessage() %>,该方法的常用方法为String getMessage() 和 异常堆栈信息void printStackTrace()。