• 沒有找到結果。

JSP 对象

在文檔中 JDBC API 数据库编程实作教程 (頁 150-159)

7.2 快速掌握 JSP

7.2.3 JSP 对象

<%@ taglib uri= "http://www.adamserver.com/mytag" prefix="mjsp"%>

7 jsp: useBean

在JSP文档中创建一个Java Bean的实例 并指定其名称和使用范围 使用格式如下

<jsp:useBean id=" name" scope=" page| request| session| application" classtypeSpec />

<jsp:useBean id=" name" scope=" page| request| session| application" classtypeSpec>

other element

</jsp:useBean>

其中

id 表示 Java Bean 的实例名称

scope 表示 Java Bean 实例的使用范围 其值可为 page 当前页 request session 或 application 对象

classtypeSpec 表示类型格式 可为如下内容 class="className"

class="className" type=" typeName"

beanName="beanName" type="typeName"

type="typeName"

8 jsp:setProperty

设置Java bean 的属性值 其使用格式如下

<jsp:setProperty name ="beanName" propSpec/>

其中

propSpec 可以为如下形式 property="*"

property="propertyName"

property ="propertyName " param ="parameterName "

property ="propertyName " value ="propertyValue "

9 jsp:getProperty

获得Java bean 的属性值 并将其显示在页面中 其使用格式如下

<jsp:getProperty name="name" property="propertyName" />

7.2.3 JSP 对象

JSP 的内部对象主要有 application exception out request response 和 session 下面 分别介绍这些对象



-1 application 对象

application 对象非常重要 一个 application 对象一旦被创建 则在服务器关闭前一直 存在 所以application 对象常用于保存多个 JSP 应用程序的公共信息 application 对象有 下列的方法可用

1 getAttribute String name

该方法用于获取由name 指定的属性的值 返回值是一个 Object 对象 2 getAttributeNames

该方法用于获取所有属性的名称 返回值是一个Enumeration 对象 3 getInitParameter String name

该方法用于获取由name 指定的属性的初始值 返回值是一个 Object 对象 4 getServerInfo

该方法用于获得当前服务器的相关信息

5 setAttribute String name Object object

该方法用一个Object 对象来设置由 name 指定的属性的值

需要说明的是 在一些服务器中 不支持使用Application.method 方法 在这类服 务器中我们可以使用getServletContext().method 方法

下面是一个简单的计数器 首先 在initapplication.jsp 文档中定义两个属性 welcome 和 countor 前者用于保存一个欢迎信息 后者保存客户访问 testapplication.jsp 文件的 次数

例程 7-2 initapplication.jsp

<%

<TITLE>Initiate application</TITLE>

</HEAD>

<BODY>

Initiate application OK!

</BODY>

</HTML>

启动服务器后 首先在浏览器中调用initapplication.jsp 例程中的语句

<%

application.setAttribute("welcome","欢迎光临阿当之家");

application.setAttribute("countor","0");

%>

创建了一个application 对象 并为该对象添加了两个属性 welcome 和 countor 前者被初始 化为一个字符串 欢迎光临阿当之家 后者的初始值为 1000 然后调用 testapplication.jsp 在JSP 文档中访问创建的 application 对象 JSWDK 服务器允许在 JSP 中使用 application



对象 所以 在initapplication.jsp 我们使用了 application.method()方法 而在 testapplication.jsp 中使用的是getServletContext().method 方法

例程 7-3 testapplication.jsp

<%

String welcome=(String)getServletContext().getAttribute("welcome");

String countorStr=(String)getServletContext().getAttribute("countor");

int countor=Integer.parseInt(countorStr)+1;

String countorNew=Integer.toString(countor);

getServletContext().setAttribute("countor",countorNew);

%>

<html>

<head>

<title>Appliction example</title>

</head>

<body>

<center>

<h1><%=welcome%></h1>

<br>

<h3>你是第<%=countor%>位来客</h3>

</center>

</body>

</html>

可在浏览器中反复调用该文件 以观察其运行结果 如图7-9 所示

图7-9 application 实例 2 Session

Session 对象也是一个非常重要的对象 它用于保存登录到网站的每个用户的信息 Application 对象用于保存多个应用程序间的共同信息 登录到网站的用户拥有一个相同的 Application 对象 只是每个用户都有一个该 Application 对象的拷贝而已 而不同用户拥有 的Session 对象是不相同的 一旦用户登录到网站 服务器将生成一个唯一的 Session 对象



-来保存该用户的信息 当用户退出网站时 session 对象被自动撤消 Session 对象主要拥有如下方法

1 getAttribute String name

该方法用于获取由name 指定的属性的值 返回值是一个 Object 对象 如果没有指定 的对象 则返回null

2 getAttributeNames

该方法用于获取所有属性的名称 返回值是一个Enumeration 对象 3 setAttribute String name Object object

该方法用一个Object 对象来设置由 name 指定的属性的值

8 removeAttribute String name 删除由name 指定的属性

在 下 面 的 例 程 7-4 中 分 别 使 用 了 session 对 象 的 getCreationTime 和 getLastAccessedTime 方法 分别获得用户登录服务器的时间和最近一次访问该Web 页 的时间

例程 7-4 testsession.jsp

<HTML>

<HEAD>

<TITLE>session example</TITLE>

</HEAD>

<BODY>

<%@ page import="java.sql.Date,java.sql.Time" %>

<%

Date date0=new Date(session.getCreationTime());

Time time0=new Time(session.getCreationTime());

Date date=new Date(session.getLastAccessedTime());

Time time=new Time(session.getLastAccessedTime());

%>

<pre>

你来自 <%=request.getRemoteAddr()%>

登录时间 <%=date0%> <%=time0 %>

上一次访问本页时间 <%=date%> <%=time %>



</pre>

</BODY>

</HTML>

该实例运行结果如图7-10 所示

7-10 testsession.jsp 3. out

out 对象用于输出各种类型的数据 out 对象可用的主要方法有 1 out.print()和 out.println()

这两个方法都是用于输出数据 区别是后者在输出数据后将换行 即下一个输出将在 下一行输出 方法的参数为各种类型的数据 包括boolean char char[] double float int long Object 和 String 等类型的数据

2 out.newLine() 输出一个换行符号 3 out.flush() 输出缓冲区中的数据

4 out.clearBuffer() 清除缓冲区内容 同时将内容输出到客户浏览器中 5 out.clear() 仅清除缓冲区内容 不输出

6 out.getBufferSize() 获得缓冲区大小

7 out.getRemaining() 获得缓冲区未使用的空间

8 out.isAutoFlush() 判断是否允许在缓冲区溢出时是否自动输出内容 返回值为 在<%@ page %>中设置的 isAutoFlush 的值 ]

下面是一个简单的out 对象实例 该例使用 out.print()方法输出几个字符串 例程 7-5 testout.jsp

<html>

<head>

<title>out example</title>

</head>

<body>

<font size=5>

<%

for(int i=1;i<=5;i++){

out.print("There are JSP out data<br>");

}



-%>

</font>

</body>

</html>

例程运行结果如图7-11 所示

图7-11 testout.jsp 4. request

request 对象常用于获取服务器或客户机的相关信息 request 对象的主要方法有 1 getCookies()

返回客户端通过request 对象传送的所有 Cookies 返回值为一个 Cookies 数组 2 getHeader(String name)

获得HTTP 协议中传送的文件头信息 3 getAttribute(String name)

获得由name 指定的属性的值 如果指定的属性不存在 则返回 Null 4 getAttributeNames()

获得request 对象所有的属性名称及其对应的属性值 返回值为一个 Enumeration 对象 5 getHeaderNames()

获得request 头文件中所有的属性名称及其对应的属性值 返回值为一个 Enumeration 对象

6 getHeaders(String name)

获得在request 头文件中由 name 指定的名称的对应值 返回值为一个 Enumeration 对 象

7 getMethod()

获得用户进行请求采用的方法 有GET POST 和 PUT 三种类型 8 getParameter(String name)

获得由name 指定的参数的值 9 getParameterNames()

获得所有参数的名称 返回值为一个Enumeration 对象 10 getParameterValues(String name)

获得由name 指定的参数的值



11 getQueryString()

获得客户通过GET 方法传递给服务器的查询字符串 12 getRequestURI()

获得向服务器发出请求的客户的地址 13 getServletPath()

获得客户请求的脚本文件的路径

14 setAttribute(String name,java.lang.Object o)

设置指定属性的值 属性名由name 指定 属性值由一个 java.lang.Object 对象指定 15 getServerName()

获得服务器名称 16 getServerPort() 获得服务器端口

17 getRemoteAddr() 获得客户机IP 地址

18 getRemoteHost() 获得客户机名称

19 getProtocol()

获得客户端和服务器进行通信使用的协议

下例使用request 对象来获得服务器和客户机的相关信息 例程 7-6 testrequest.jsp

<html>

<head><title>request example</title></head>

<body >

<font size="4">

<h3>服务器端的信息</h3>

服务器名称 <%=request.getServerName()%>

<br>

服务器端口 <%=request.getServerPort() %>

<h3>客户端的信息</h3>

客户机名称: <% out.print(request.getRemoteHost()); %>

<br>

客户机IP 地址: <% out.print(request.getRemoteAddr()); %>

<br>

用户名称: <% out.print(request.getRemoteUser()); %>

<br>

JSP 请求方法: <% out.print(request.getMethod()); %>

<br>

发出请求的文件地址: <% out.print(request.getRequestURI()); %>

<br>

所请求文件的路径: <% out.print(request.getServletPath()); %>



<br>

通信协议: <% out.print( request.getProtocol()); %>

<br>

内容类型: <% out.print(request.getContentType()); %>

<br>

使用的浏览器 <% out.print(request.getHeader("User-Agent")); %>

</font></body>

</html>

该例程运行结果如图7-12 所示

图7-12 testreqest.jsp 5. response

response 对象用于响应客户请求 向客户端发送信息 response 对象有如下的主要方 法

1 addCookie(Cookie cookie)

添加一个用于保存用户信息的Cookie 2 addHeader(String name String value) 向HTTP 头文件中添加信息

3 containsHeader(String name)

用于判断HTTP 头文件中是否已有指定名称的属性 4 sendError(int sc)

向客户端发送特定的错误代码

5 setHeader(String name, String value)

修改在HTTP 头文件中由 name 指定的属性的值

下面的例程使用response 对象来在指定时间间隔内自动刷新页面 并在页面中显示当 前日期



例程 7-7 testresponse.jsp

<html>

<head>

<title>response example</title>

</head>

<body>

<%response.setHeader("refresh","10"); %>

<center>

<%

out.print("当前时间 "+(new java.util.Date()).toString());

%>

</center>

</body>

</html>

该例程运行结果如图7-13 所示

7-13 testresponse.jsp 6. exception

exception 对象用于在 JSP 文件中处理 JSP 代码执行时发生的异常或错误 需要说明的 是 exception 对象的使用有一个前提条件 即设置<%@ page isErrorPage="true"%>

exception 对象有如下主要方法 1 getMessage()

用于获得错误的信息 2 printStackTrace()

采用标准方式输出一个错误及其堆栈信息 3 toString()

用于获得错误的描述信息

不同的JSP 服务器对 JSP 代码中出现的异常和错误通常都有自己的处理方法 当 JSP 代码出错时 服务器首先会用自己的异常和错误处理程序来处理 用户可以根据实际需要



-和使用的JSP 服务器的不同创建自己的处理程序 如果你要编写自己的异常处理程序 可 参考服务器的相关文档

在文檔中 JDBC API 数据库编程实作教程 (頁 150-159)