JSP共有九种基本内置对象,所谓内置对象就是无需用户在编程中创建的对象,这些对象在运行过程中由系统自动加载创建。
1.out对象
out对象是一个输出流,用来向客户端输出数据,可用于各种数据的输出,主要应用在脚本程序中,它会通过jsp容器自动转换为
java.io.PrintWriter对象。out对象具有page作用范围
2.request对象
request对象用于服务器端接收从客户端传来的参数,该对象封装了用户提交的信息,通过调用该对象相应方法可以获取封装的信 息,当request对象获取客户提交的汉字字符时,会出现乱码,必须进行特殊处理。request对象具有request作用范围。
例如:在地址栏输入:
http://localhost:8080/myweb/a.jsp?name=admin&birth=1999-07-08;
在a.jsp页面使用request接收参数,返回一个String类型的值!
解决中文出现乱码的问题:重新编码方法即可!
3.response对象
用于服务器对客户的请求作出动态的相应,向客户端发送数据,response对象具有page作用范围!
例子记录:(1)动态响应contextType属性。response.setContentType("text/html;charset=utf-8");
(2)定时刷新:response.setHeader("refresh","5");//表示每隔5s刷新一次
4.application对象
application对象是应用程序级内置存储对象,存储在服务器端。可以被访问该网站所有用户共有。服务器启动后就产生了这个
application对象,当客户在所访问的网站的各个页面之间浏览时,它都是同一个,知道服务器关闭。与session不同的是,所有客
户的application对象都是同一个,即所有客户共享这个内置的application对象。
5.session对象
Session对象是会话级内置存储对象,从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
Session对象是javax.servlet.httpServletSession类的一个对象,它提供了当前用户会话的信息和对可用于存储信息的会话范围的缓存访问,以及控制如何管理会话的方法。每个客户都有对应的一个session对象,用来存放于这个客户相关的信息。
6.PageContext对象
pageContext对象代表该JSP页面上下文,也就是一个运行环境,使用该对象可以访问页面中的共享数据。常用的方法有
getServletContext()和getServletConfig()等。pageContext对象能够存取其他内置对象,当内置对象包含属性时,也可以读取和写入这些属性。使用pageContext设置属性,该属性默认在page范围内。
7.其他内置对象,剩余的三个(page,config,exception)
额外的一个对象的学习:即 cookie对象
cookies 是一种Web服务器通过浏览器在访问者的硬盘上存取信息的手段,它本身并不属于JSP的内置对象。
通常浏览器使用一个名为cookies.txt的本地文件保存从所有站点接收的Cookie信息;而IE浏览器吧Cookie信息保存在类似
C:\windows\cookies的目录下。当用户在此访问某个站点的时候,服务器端要求浏览器查找并返回先前发送的Cookie信息,
来识别这个用户。
附上练习代码。如下:
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<title>myFirstWeb</title>
<script language="javascript">
function jump()
{
alert("你点击了跳转按钮!");
document.write("<a href=\"https://www.baidu.com/?tn=98012088_5_dg&ch=12\">超链接-百度</a>");
}
</script>
</head>
<body>
<%
//System.out.println("This is my first web!");
//注意,上述代码是吧文本输出显示在控制台!
out.println("This is my first web!");
%>
<br>
<%! int x = 0; %>
<% int y = 10; %>
<%
out.println((++x)+"<br>"); //!定义的相当于全局变量,刷新时,该值一直保存
out.println(++y); //局部变量,刷新时,重新生成
%>
<!--做个按钮实现以下forward跳转的相关 -->
<input type="button" value="跳转" onclick="jump();">
<% if(x == 1000)
{ %>
<!-- forward动作是一个内部跳转动作,不会产生新的网页 -->>
<jsp:forward page="a.jsp">
<jsp:param name="p1" value="123" />
<jsp:param name="p2" value="456" />
</jsp:forward>
<%} %>
<%
//使用jsp的9种内置对象的response响应时间做一个网页时钟
Date date = new Date(); //获取系统时间
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
String time = format.format(date);
out.print("<br>"+time);
//一秒刷新一次
response.setHeader("Refresh","1");
%>
<%
//使用内置共享的application对象实现一个网页访问计数器
Object o = application.getAttribute("count");
if(o == null) //表示count还没有创建呢
{
out.println("<br>您是第 1 位访问该网站的用户!");
application.setAttribute("count", "1");
}else
{
String count = (String)o;
int index = Integer.parseInt(count);
out.println("<br>您是第 "+(++index)+" 位访问该网站的用户!");
application.setAttribute("count", String.valueOf(index));
}
%>
<%
pageContext.setAttribute("count2", (String)application.getAttribute("count"));
String count2 = (String)pageContext.getAttribute("count2");
out.println("<br>pageContext得到共享数据count: "+count2);
%>
</body>
</html>