1 / 69

Java 与数据库连接

Java 与数据库连接. 11.1 JSP 概念及主要特性、运行模式. 11.2 JSP基本语法、指令及其应用. 11.3 JSP与表单的交互方法. 11.4 JSP内部对象的使用. 11.5 JavaBeans的使用. 11.6 JSP访问数据库. 11.1 JSP概念及主要特性、运行模式.

chul
Download Presentation

Java 与数据库连接

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java与数据库连接 11.1 JSP概念及主要特性、运行模式 11.2 JSP基本语法、指令及其应用 11.3 JSP与表单的交互方法 11.4 JSP内部对象的使用 11.5 JavaBeans的使用 11.6 JSP访问数据库

  2. 11.1 JSP概念及主要特性、运行模式 Java Server Pages(简称JSP),是由Sun Microsystems公司倡导、多家公司参与合作而建立起的一种动态网页技术标准,其网址为http://www.javasoft.com/products/jsp。它正式发布于1999年6月,是基于Java Servlet以及整个Java体系的WEB开发技术,也是Servlet2.1 API的扩展。JSP可以不加修改地在85%以上的Web Server上运行,其中包含微软的Windows 9x/NT/2000系统。 一.JSP概念 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请示时,首先执行其中的程序片段,然后将执行的结果以HTML格式返回给客户。程序片段可以操作数据库、重新定义网页以及发送E-Mail等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无Java Applet,甚至无Frame。由于JSP是将Java代码嵌在html标记里(同ASP一样用<% ...%>),JSP的界面设计同后台开发人员的工作可以有效分离。可以想像让开发人员用Servlet写一个花俏的Web页面有多困难,所以JSP+Servlet混合Web应用是比较理想的选择。

  3. 二.JSP主要特性 1.将内容的生成和显示进行分离 2.生成可重用的组件 3.采用标识简化页面开发 4.具有“一次编写,各处运行”的特点 5.程序执行的效率和安全性更高 6.强大的数据库支持 7.JSP组件(Component)方式更方便 8.JSP的适应平台更广

  4. 三.JSP运行模式 1.JSP的运行模式 • Web服务器向浏览器传送一个页面的过程如下: • 浏览器发出对Web页面的请求; • 浏览器利用URL辨别Web服务器的地址,找到自己需要的主页,并给出Web服务器需要的其他信息。这些信息包括浏览名称(Internet Explorer)、版本(6.0)、操作系统(Windows 98)以及由用来来填写的表。 • 当请求的是HTML文件时,Web服务器就简单地找到该文件,然后传送该文件的内容到浏览器,浏览器得到内容后就开始将基于HTML的代码译成页面。 • 当请求的是JSP页面时,并不立即发送文件的内容。首先执行脚本。由脚本产生一些HTML代码,然后将这些代码传送给JSP执行引擎,再由它将HTML文件传送给Web浏览器。JJSP的运行模式如图11-1所示。

  5. 图11-1 JSP运行模式 图11-1 JSP运行模式

  6. 2.JSP的运行过程 当Web服务器接收到一个后缀为“.jsp”页的请求时,触发JSP引擎。JSP引擎首先检查JSP文件是新的还是未修改过的文件,对这两种情况会有不同的处理。 • JSP引擎把JSP文件转换成Java Servlet,然后使用标准的Java编译器编译Servlet,使用用标准的API执行Java Servlet。这个翻译步骤也是JSP为什么慢的一个原因。 • 对于旧文件则直接进行编译,省略了前面翻译的工作,接下来的步骤是一样的。 • JSP是将网页的表现形式和服务器端的代码逻辑分开。作为服务器进程的JSP页面,首先被转换成Servlet。Servlet支持HTTP协议的请求和响应。多个用户同时请求一个JSP页面时,应用实例化线程来响应请求。这些线程由Web服务器进程来管理。 • JSP在执行以前先被编写成字节码,然后字节码由Java虚拟机解释执行,比源码解释的效率高──服务器上还有字节码的Cache机制,能提高字节码的访问效率。第一次调用JSP网页可能稍慢,因为它被编译成Cache,以后就快得多了。另外,JSP源程序不大可能被下载,特别是JavaBeans程序完全可以放到不对外的目录中。JSP的运行过程如图11-2所示。

  7. 图11-2JSP的运行过程

  8. 四.JSP运行环境的配置 本书以安装配置Resin2.1.4为例,简单讲述JSP运行环境的配置。 1.安装JDK:这一步同Java开发环境的配置中的安装JDK一样,不再重复。 2.配置环境变量:这一步也与Java开发环境的配置一样。 3.配置Resin:

  9. 11.2 JSP基本语法、指令及其应用 11.2.1 JSP语法基本原理 JSP可以在HTML文件内直接嵌入简单的脚本命令,就可以轻易地将静态Web页面,升级为动态Web页面,你可以用任何Web页面编辑器(如FrontePage,MicroMedia UltraDev等),如通常方式一样编写HTML。然后用特殊的标记来附上动态部分的代码,这个特殊标记一般都是以“<%”开头,以“%>”结尾的(这点和ASP一样)。 一般情况下文件以.jsp为扩展名,并放在一般的Web页面所放的地方,虽然你写的更像一个正常的HTML文件,而不是一个servlet,但在幕后JSP页面被转换成正常的servlet。被第一次请求时,JSP页面,被翻译成servlet,接着servlet被编译和装载。

  10. JSP指令和脚本元素共有以下所示的五种类型

  11. 示例11-1简单的JSP程序 程序:Sample11_1.jsp <HTML> <HEAD> <TITLE>JSP页面</TITLE> </HEAD> <BODY> <%@ page language="java" %> <%! String str="0";int i=0; %> <% for (int i=0;i<10;i++){ str = str + i; }%> JSP输出之前。 <P> <%= str %> <P> JSP输出之后。 </BODY> </HTML>

  12. JSP页面由以下四个部分组成: 1.首先它应描述页面的基本信息,如所使用的语言,是否维持会话状态、是否使用缓冲等。在此<%@ page language="java" %>只简单地定义了本例使用的是Java语言。 2.接下来的是JSP的声明,JSP声明可以看成是定义类这一层次的变量和方法的地方,在此<%! String str="0";int i=0; %>只定义了一个字符串变量和一个整数变量。要注意的是:在每一项声明的后面都必须有一个分号,就是在普通Java类中声明成员变量一样。 3.接下来的是位于<%和%>之间的程序代码段,它是一个for循环,由它来描述JSP页面处理逻辑的Java代码。 <% for (int i=0;i<10;i++){ str = str + i; }%> 4.最后是位于<%=和%>之间的运算式代码,被称为JSP表达式,它提供了一种将JSP生成的数值嵌入到HTML页面的简单方法。如本例中的<% = str %>所示。

  13. 一.编译器指引(Directives) JSP的编译器指引是针对JSP引擎而设计的。他们并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在 “<%@ %>”标记中。两个最重要的指令是“Page”和“Include”。“Taglib”指令不在讨论之列,但是在用JSP1.1创建自定义标记可以使用它。 你几乎可以在所有JSP页面顶部都会看到“Page”指令。尽管不是必须的,但它可以让你指定: 到何处查找起支持作用的Java类别: <%@ page import="java.util.Date" %>, 出现Java运行问题时,将网上冲浪者引向何处: <%@ page errorPage="errorPage.jsp" %>, 还有你是否需要管理用户的会话级信息,这些信息可能来自多个网页(在下面的JavaBeans一节将对此做进一步讲)述: <%@ page session="true" %>。 “Include”指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的HTML 页面或更多的JSP内容: <%@ include file="filename.jsp" %>

  14. 二.声明 (Declarelations) 1.声明的JSP语法 <%! Declaration;[declaration;]+... %> 2.声明的语法描述 JSP声明用来让你定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的支持方法。如果你发现代码太多,通常最好把它们写成一个独立的Java类别。 当你声明方法或变量时,请注意以下的一些规则: (1)你可以一次性声明多个变量和方法,声明一般都在“<%! ?%>”标记中。一定要以分号(;)结束变量声明,因为任何内容都必须是有效的Java语句:(Scriptlet有同样的规则,但是表达式就不同了)。 (2)你可以直接使用在<%@ page %>中被包含进来 的已经声明的变量和方法,不需要对它们重新进行声明。 (3)一个声明仅在一个页面中有效。如果你想每个页面都用到一些声明,最好把他们写成一个单独的文件,然后用<%@ include %>或<jsp:include>元素包含进去。 (4)声明不能产生任何输出,它通常用作JSP表达式和scriptlets之间连接。

  15. 三.表达式 有了JSP表达式,表达式结果会被转换成一个字符串,并且被直接包括在输出页面之内。JSP 表达式包含在“<%= ?%>” 标记中,没有分号,除非在加引号的字符串部分使用分号。 因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式(形式和ASP完全一样)。 当您在JSP中使用表达式时请记住以下几点: (1)你不能用一个分号(“;”)作为表达式的结束符,但是scriptlet就需要以分号来结尾! (2)一个表达式元素能够包含任何一个符合Java语言规范的表达式。 (3)有时候表达式也能做为其他JSP元素的属性值。 (4)一个表达式能够变得复杂,它可能由多个表达式组成,这些表达式的顺序是从左到右。 在XML中也有JSP表达式的类似语法: <jsp:expression> Java Expression </jsp:expression> 记住XML要素不像HTML,它是很敏感的,务必要使用小写字母。

  16. 四.程序代码片段/脚本片段(Scriptlets) 1.程序代码片段的JSP语法 <% code fragment %> 2.程序代码片段的语法描述 Scriptlet是指一个有效的程序段,这个程序段可以包含多个jsp语句、方法变量和表达式。 JSP代码片段或脚本片段是嵌在“<% code fragment %>”标记中的。这种Java代码在Web服务器响应请求时就会运行。在脚本片段周围可能是原始的HTML或XML语句,在这些地方,代码片段可以使你创建条件执行代码,或要用到另外一段代码的代码。 使用scriptlet,我们可以做以下事情,下面就对scriptlet进行一下说明: (1)可以声明将要用到的变量或方法,scriptlet也可以象表达式那样随意定义变量。 (2)可以编写JSP表达式(请参考前面表达式的描述)。 (3)可以使用任何隐含的对象和任何用<jsp:useBean>声明过的对象。 (4)可以编写JSP语句(如果你使用的是Java语言,它必须遵从Java语言的规范)。 (5)任何文本,HTML标记,必须写在JSP元素scriptlet(即:<% %>)之外。 当JSP编译器收到客户端的请求时,scriptlet就会被执行,如果scriptlet有显示内容,这些显示的内容被保存在out对象中。

  17. 五.注释 最后一个主要的JSP元素是嵌入式注释。尽管你始终可以在文件中加入HTML注释,但用户在查看页面源代码时会看到这些注释。如果你不想让用户看到它,你就应该将其嵌入“<%-- comment--%>” 标记中: <%-- comment for server side only --%>. 更详细的说,JSP的注释可分为两种:HTML注释和隐藏注释。 1.HTML注释 (1)HTML注释 <!—comment[<%= expression %>] (2)HTML的语法描述 JSP中的HTML注释与其他HTML中的注释很像,它可以在客户端浏览器的“查看源代码”中看到,唯一有些不同的就是,你可以在这个注释中使用各种表达式,只要表达式是合法的就行。顺便提到Java的注释/* comment */和//也当属此类。

  18. 2.隐藏注释 (1)隐藏注释的JSP语法 <%--comment--%> (2)隐藏注释的语法描述 尽管你始终可以在文件中加入HTML注释,但用户在查看页面源代码时会看到这些注释。如果你不想让用户看到它,就应该将其嵌入到“<%--?--%>”标记中,这在你希望隐藏或注释你的JSP程序时是很有用的。JSP编译器会忽略掉这些隐藏注释标记中的字符,而不对该语句进行编译。 隐藏注释文档不发给客户端。 (3)隐藏注释的例子

  19. JSP指令是为JSP引擎而设计的。他们并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在“<%@ ? %>”标记中。 一.include指令 1.include的JSP语法 <%@ include file = “relativeURL” %> 2.include语法描述 include指令将会在JSP编译时插入一个包含文本或代码的文件,当你使用<%@ include %>指令时,这个包含的过程就当是静态的。静态的包含就是指这个被包含的文件将会被插入到JSP文件中去,这个包含的文件可以是JSP文件、HTML文件、文本文件。如果包含的是JSP文件,这个包含的JSP文件中的代码将会被执行。 如果你仅仅只是用include来包含一个静态文件,那么这个包含的文件所执行的结果将会插入到JSP文件中放include的地方。一旦包含文件被执行,那么主JSP文件的过程将会被恢复,继续执行下一行。 11.2.2 JSP指令及其应用

  20. 3.几点值得说明和初学者要注意的地方: (1)包含文件中不能使用<html>,</html>,<body>,</body>标记,因为这将会影响在原JSP文件中同样的标记而导致错误。 (2)如果某个包含文件被改变,包含此文件的JSP文件也将被重新编译。 (3)有一些<%@ include %>指令的行为是以特殊的JSP编译条件为基础的,比如:这个被包含的文件必须对所有客户都开放且必须有效,或者它有安全限制。 (4)file="relativeURL"这个包含文件的路径名一般来说是指相对路径,不需要什么端口,协议和主机域名。 (5)同C语言一样,include文件是不能嵌套使用的。

  21. 二.Page指令 1.Page的JSP语法 <%@ page [language="java"] [extends="package.class"] [import="{package.class|package.*},…"] [session="true|false"] [buffer="none|8kb|size kb"] [autoFlush="true|false"] [isThreadSafe="true|false"] [info="text"] [errorPage="relativeURL"] [contentType="mimeType[;charset=characterSet]"| "text/html;charset=ISO-8859-1"] [isErrorPage="true|false"] 2.Page语法描述 Page指令的作用是定义JSP文件中的全局属性。 Page指令作用于整个JSP页面,同样包括静态的包含文件。但是Page指令不能作用于动态的包含文件,比如<jsp:include>。 3.Page的属性及其用法 (1)声明脚本语言的种类,目前只有“java”一种语言,所以暂时只能用“java”。 例如:<%@ page language="java" %> (2)extends="package.class" 该属性指出将要生成的Servlet使用哪个超类。使用该属性应当十分小心,因为服务器可能已经在用自定义的超类。

  22. (3)import="{package.class|package.*},…" 表示需要导入的Java包的列表,这些包(以及它们的类)作用于程序段、表达式、声明以及JSP文件内的标签,它必须放在调用它的类的标签之前。 下面的包在JSP编译时已经导入了,所以不需要再特别指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* (4)session="true|false" 默认值true表明预定义变量session(类型为HttpSession)应该绑定到已有的会话,如果不存在已有的会话,则新建一个并绑定session变量。如果取值false,表明不会用到会话,试图访问变量session将导致JSP转换成Servlet时出错。Session的缺省值是true。 例如:<%@ page session="true" %> (5)buffer="none|8kb|sizekb" buffer的大小以千字节为单位,是out对象处理JSP页面到客户端浏览器输出时使用的缓冲区。如自定义,则以最后定义的为准,但必须不小于8kb。Buffer的缺省值是8kb。

  23. (6)autoFlush="true|false" 设置对buffer溢出时的处理方式,是否需要强制输出。 如果其值被定义为true,输出正常。如果其值被定义为false,一旦buffer溢出,就会导致一个意外错误的发生。如果buffer设置为none,那么autoFlush就不能设置为false。autoFlush缺省值是true。 (7)isThreadSafe="true|false" 设置JSP文件是否能多线程使用。如果设置为true,假定有多个请求访问实例变量的时候,多重请求都可以被单个servlet实例同时执行。如果设置为false,表明servlet为单线程模式,每个请求分配给一个独立的servlet实例,即一次只能处理一个请求。isThreadSafe的缺省值是true。 (8)info="text" 一个插入到JSP页面中的文本,被合并编译后,你能够使用Servlet.getServletInfo方法重新得到这个文本。 (9)errorPage="relativeURL" 设置处理异常事件的JSP文件。 例如:<%@ page errorPage="errorPage.jsp" %>

  24. (10)isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception异常处理对象。如果设置为false,意味着在你的JSP文件中不能使用异常处理对象。 (11)contentType= "mimeType [ ;charset=characterSet ]" | "text/html;charset=ISO-8859-1" 设置JSP文件的MIME类型和字符集,是用于反馈给客户回答信息而设置的。你能够使用任何对servlet有效的MIME类型和字符集。缺省MIME 类型是: text/html;缺省字符集为 ISO-8859-1。 例如:<%@ Page contentType=”text/html;Charset=gb2312” %>

  25. 3.Page的属性及其用法 (1)声明脚本语言的种类,目前只有“java”一种语言,所以暂时只能用“java”。 例如:<%@ page language="java" %> (2)extends="package.class" 该属性指出将要生成的Servlet使用哪个超类。使用该属性应当十分小心,因为服务器可能已经在用自定义的超类。 (3)import="{package.class|package.*},…" 表示需要导入的Java包的列表,这些包(以及它们的类)作用于程序段、表达式、声明以及JSP文件内的标签,它必须放在调用它的类的标签之前。 下面的包在JSP编译时已经导入了,所以不需要再特别指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* (4)session="true|false" 默认值true表明预定义变量session(类型为HttpSession)应该绑定到已有的会话,如果不存在已有的会话,则新建一个并绑定session变量。如果取值false,表明不会用到会话,试图访问变量session将导致JSP转换成Servlet时出错。Session的缺省值是true。 例如:<%@ page session="true" %>

  26. (5)buffer="none|8kb|sizekb" buffer的大小以千字节为单位,是out对象处理JSP页面到客户端浏览器输出时使用的缓冲区。如自定义,则以最后定义的为准,但必须不小于8kb。Buffer的缺省值是8kb。 4.Page例子 <%@ page import = “java.util.*,java.lang.*” %> <%@ page buffer = “5kb” autoFlush = ”false” %> <%@ page errorPage = “error.jsp” %> 三.<jsp:forward> 重定向一个HTML文件,JSP文件,或者是一个程序段. 1.<jsp:forward>的JSP语法 <jsp:forward page={"relativeURL" | "<%= expression %>"} /> 或 <jsp:forward page={"relativeURL" | "<%= expression %>"} > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> </jsp:forward>

  27. 2.<jsp:forward>语法描述 <jsp:forward>重定向一个HTML文件、JSP文件、或者是一个程序段。 (1)<jsp:forward>标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。<jsp:forward>标签以下的代码,将不能执行. (2)你能够向目标文件传送参数和值。 例:<jsp:forward page=<%=otherpage.jsp%> <jsp:param name="username" value="scott" /> </jsp:forward> 在这个例子中我们传递的参数名为username,值为scott,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参数。 (3)如果你使用了非缓冲输出的话,那么使用<jsp:forward>时就要小心。如果在你使用<jsp:forward>之前,jsp文件已经有了数据,那么文件执行就会出错. 3.<jsp:forward>属性及其用法 (1)page="{relativeURL | <%= expression %>}" (2)<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />

  28. 四.<jsp:include> 包含一个静态或动态文件. 1.<jsp:include>的JSP语法 <jsp:include page="{relativeURL | <%= expression%>}" flush="true" /> 或 <jsp:include page="{relativeURL | <%= expression %>}" flush="true" > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> </jsp:include> 2.<jsp:include>描述 <jsp:include>元素允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被Jsp编译器执行(这一切与asp相似) 3.<jsp:include>属性及其用法 (1)page="{relativeURL | <%= expression %>}" (2)flush="true" 这里你必须使用flush="true",你不能使用false值。 (3)<jsp:param name="parameterName" value="{parameterValue | <%= expression %> }" /> <jsp:param>子句能让你传递一个或多个参数给动态文件,你能在一个页面中使用多个<jsp:param>来传递多个参数。

  29. 五.<jsp:plugin> 执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它. 1.<jsp:plugin>的JSP语法 <jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName" [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom | top | middle | left | right" ] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber | 1.1" ] [ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] > [ <jsp:params> [ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+ </jsp:params> ] [ <jsp:fallback> text message for user </jsp:fallback> ] </jsp:plugin>

  30. 2.<jsp:plugin>语法描述 (1)<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件。 当Jsp文件被编译,送往浏览器时,<jsp:plugin>元素将会根据浏览器的版本替换成<object>或者<embed>元素。(注意,<object>用于HTML 4.0 ,<embed>用于HTML 3.2)。 (2)<jsp:params>元素的作用是,在启动时向applet或Bean传递参数名和值。<jsp:fallback>元素的作用是,一旦plugin不能启动时向用户提示信息;如果plugin启动了,但applet和Bean未启动,plugin一般是弹出一个窗口,将错误信息告知用户。 (3)<jsp:plugin>标签的许多属性来自于HTML的<applet>和<object>标签(即:HTML3.2的<applet>及HTML4.0的<object>),如果你想深入了解的话,可参考有关HTML说明书中的相关部分。 一般来说,<jsp:plugin>元素会指定对象是Applet还是Bean,同样也会指定class的名字,还有位置,另外还会指定将从哪里下载这个Java插件。请继续阅读下面的属性详解: 3.<jsp:plugin>属性 (1)type="bean | applet" .将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值.。

  31. (2)code="classFileName" 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。 (3)codebase="classFileDirectoryName" 将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的jsp文件的目录将会被使用。 (4)name="instanceName" 这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。 (5)archive="URLToArchive, ..." 一些由逗号分开的路径名,这些路径名用于预装一些将要使用的class,这会提高applet的性能。 (6)align="bottom | top | middle | left | right" 图形,对象,Applet的位置,有以下值: bottom:图形的底部与文本的基线对齐 top:图形的顶部与文本的顶部对齐 middle:图形的水平中心线与文本的水平中心线对齐 left:图形放置左边的空白页,文本沿着图形的右侧排列 right:图形放置右边的空白页,文本沿着图形的左侧排列 这些均和HTML的属性值相同。

  32. (7)height="displayPixels" width="displayPixels" Applet或Bean将要显示的长宽的值,此值为数字,单位为象素。 (8)hspace="leftRightPixels" vspace="topBottomPixels" Applet或Bean显示时在屏幕左右,上下所需留下的空间,单位为象素。 (9)jreversion="JREVersionNumber | 1.1" Applet或Bean运行所需的Java Runtime Environment (JRE) 的版本。缺省值是 1.1。 (10)nspluginurl="URLToPlugin" Netscape Navigator用户能够使用的JRE的下载地址,此值为一个标准的URL,带有协议名、端口号、域名。 (11)iepluginurl="URLToPlugin" IE用户能够使用的JRE的下载地址,此值为一个标准的URL,带有协议名、端口号、域名。 (12)<jsp:params> [ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ] </jsp:params> 你需要向applet或Bean传送的参数或参数值。 (13)<jsp:fallback> text message for user </jsp:fallback> 一段文字用于Java 插件不能启动时显示给用户的,如果插件能够启动而applet或Bean不能时,那么浏览器会有一个出错信息弹出。

  33. 六.<jsp:setProperty> 设置Bean中的属性值. 1.<jsp:setProperty>的JSP语法 <jsp:setProperty name="beanInstanceName" { property= "*" | property="propertyName" [ param="parameterName" ] | property="propertyName" value="{string | <%= expression %>}" } /> 2.<jsp:setProperty>语法描述 (1)<jsp:setProperty>元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。 (2)在使用这个元素之前必须得使用<jsp:useBean>声明此Bean。.因为,<jsp:useBean>和<jsp:setProperty>是联系在一起的,同时这他们使用的Bean实例的名字也应当相匹配(就是说,在<jsp:setProperty>中的name的值应当和<jsp:useBean>中id的值相同) (3)你能使用多种方法利用<jsp:setProperty>来设定属性值: 通过用户输入的所有值(被做为参数储存中request对象中)来匹配Bean中的属性 通过用户输入的指定的值来匹配Bean中指定的属性 在运行时使用一个表达式来匹配Bean的属性

  34. 3.属性及其用法 (1)name="beanInstanceName" 表示已经在<jsp:useBean>中创建的Bean实例的名字,而这个Bean实例已经存在或已经由<jsp:useBean>标签创建好了。<jsp:setProperty>标签的名字name与<jsp:Bean>标签中的id一致,并且<jsp:useBean>标签在JSP程序中的位置一定要排在<jsp:setProperty>标签之前。 (2)property="*" 储存用户在Jsp输入的所有值,用于匹配Bean中的属性。在Bean中的属性的名字必须和request对象中的参数名一致。这个参数名通常来自于HTML元素和用户的输入。 从客户传到服器上的参数值一般都是字符类型 ,这些字符串为了能够在Bean中匹配就必须转换成其它的类型,下面的表中列出了Bean属性的类型以及他们的转换方法: (3)property="propertyName" [ param="parameterName" ] 使用request中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,param指定request中的参数名。如果bean属性和request参数的名字不同,那么你就必须得指定property和param ,如果他们同名,那么你就只需要指明property就行了。如查参数值为空(或未初始化),对应的Bean属性不被设定。 (4)property="propertyName" value="{string | <%= expression %>}" 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(查看上面的表).如果它是一个表达式,那么它类型就必须和它将要设定的属性值的类型一致。 如果参数值为空,那么对应的属性值也不会被设定。

  35. 七.<jsp:getProperty>指令 1.<jsp:getProperty>的JSP语法 <jsp:getProperty name="beanInstanceName" property="propertyName"/> 2.<jsp:getProperty>语法描述 (1)这个<jsp:getProperty>标签将获得Bean的属性值,并可以将其显示在JSP结果页面中。但你应知道在使用<jsp:getProperty>之前,如果不存在有可利用的<jsp:useBean>实例的话,你必须首先创建<jsp:useBean>实例。 2.<jsp:getProperty>属性 (1)name="beanInstanceName" Bean实例的名字,由<jsp:useBean>标签中的id指出。 (2)property="propertyName" Bean属性的名字,可以显示。 技巧:在SUN的JSP参考中提到,如果你用<jsp:getProperty>检索,其值为空时,将显示NullPointerException字样。 如果使用程序段或表达式来检索,则在浏览器上出现的是null(空值)。 3.<jsp:getProperty>例子 <jsp:useBean id="calendar" scope="page" class="employee.Calendar"/> <h2> Calendar of <jsp:getProperty name="calendar" property="username"/> </h2>

  36. 八.<jsp:useBean> 创建一个Bean实例并指定它的名字和作用范围。通常我们可以编写一段一段的功能独立的Java小程序,把它放在一个特定的地方,在程序需要执行某些功能时,象调用函数那样调用它。这样的Java小程序是属于可以重复使用的元件,我们称之为JavaBean。JavaBean就跟ActiveX Controls一样,它们提供一些常用的基本功能,是为了便于随时重复使用的目的而设计的。人们对JavaBean的使用,正是通过<jsp:useBean>来完成的。 1.<jsp:useBean>的JSP 语法 <jsp:useBean id="beanInstanceName" scope="page | request | session | application" { class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | <%= expression %>}" type="package.class" } { /> | > other elements </jsp:useBean> }

  37. 2.<jsp:useBean>语法描述 <jsp:useBean>用于定位或示例一个JavaBeans组件。<jsp:useBean>首先会试图定位一个Bean实例,如果这个Bean不存在,那么<jsp:useBean>就会从一个class或相关的模版为基础,创建一个Bean示例。 为了定位或示例一个Bean,<jsp:useBean>会进行以下步聚,顺序如下: (1)通过给定的名字(name)和范围(scope)试图定位一个Bean。 (2)对这个Bean对象引用变量以你指定的名字命名。 (3)如果发现了这个Bean,即这个Bean存在,将会在这个变量中储存这个引用。如果你也指定了类型,那么这个Bean也设置为相应的类型。 (4)如果没有发现这个Bean,将会从你指定的class中进行示例,并将此引用储存到一个新的变量中去。如果这个class的名字代表的是一个模版,那么这个Bean被java.beans.Beans.instantiate示例. (5)如果<jsp:useBean>已经示例(不是定位)了这个Bean,同时<jsp:useBean>和</jsp:useBean>中有元素,那么将会执行其中的代码. <jsp:useBean>元素的主体通常包含有<jsp:setProperty>元素,用于设置Bean的属性值。正如上面第五步所说的,<jsp:useBean>的主体仅仅只有在<jsp:useBean>示例Bean时才会被执行,如果这个Bean已经存在,<jsp:useBean>能够定位它,那么主体中的内容将不会起作用。

  38. 3.<jsp:useBean>属性以及用法 • (1)id="beanInstanceName" • 在你所定义的范围中确认Bean的变量,你能在后面的程序中使用此变量名来分辨不同的Bean。 • 这个变量名对大小写敏感,必须符合你所使用的脚本语言的规定,在Java Programming Language中,这个规定在Java Language 规范已经写明。如果这个Bean已经在别的<jsp:useBean>中创建,那么这个id的值必须与原来的那个id值一致。 • (2)scope="page | request | session | application" • Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: • Page:你能在包含<jsp:useBean>元素的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 • Request:你在任何执行相同请求的Jsp文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。你能够使用Request对象访问Bean,比如request.getAttribute(beanInstanceName)。 • Session:从创建Bean开始,你就能在任何使用相同session的Jsp文件中使用Bean.这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在你创建Bean的Jsp文件中<% @ page %>指令中必须指定session=true。 • Application:从创建Bean开始,你就能在任何使用相同application的Jsp文件中使用Bean.这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean。

  39. (3)class="package.class" 使用new关键字以及class构造器从一个class中示例一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。 (4)type="package.class" 如果这个Bean已经在指定的范围中存在,那么写这个Bean一个新的数据库类型 。如果你没有使用class或beanName指定type,Bean将不会被示例。package和class的名字区分大小写。 (5)beanName="{package.class | <%= expression %>}" type="package.class" 使用java.beans.Beans.instantiate方法来从一个class或连续模版中示例一个Bean,同时指定Bean的类型。 说明: beanName可以是package和class也可以是表达式,它的值会传给Beans.instantiate.tupe的值可以和Bean相同。 package 和 class 名字区分大小写。

  40. 11.3JSP与表单的交互方法 一.什么是HTML表单 在Web上获取用户的信息,大多数情况下都是通过表单来实现的。比如说输入注册用户的姓名、地址,或者输入一个词来使用搜索引擎来查找,或者从来访问者处收集数据提供参考等等。 1.HTML表单的数据流 11.3.1 HTML表单的基本概念 HTML表单的数据流

  41. 二.创建表单的步骤 • 建立HTML表单; • 使用GET和POST方法; • 写Bean; • 传数据到Bean; • Request对象; • 从Bean中调数据到JSP页面; • 如何运行例子 1.建立HTML表单 一个HTML表单分为三个部分: (1)表单及其参数定义: (2)输入域的制作及设置: (3)提交按钮的制作: 2.使用GET和POST方法

  42. 3.写Bean 如果JSP程序用到了Bean,你就得按照JavaBean API的说明设计你的Bean。记住下面两个关键部分。 如果JSP程序里用<jsp:getProperty>标签,那你就得在Bean里边写配合的GET方法。 如果JSP程序里用<jsp:setProperty>标签,那你就得在Bean里边写配合的Set方法。 • 4.传数据到Bean • 把HTML表单的数据传到Bean里需要两个工作: • 用<jsp:useBean>标签创建或者定位到Bean。 • 在Bean里面用<jsp:setProperty>设置属性值。 5.Request对象 用户输入的数据用来存放在Request对象里,用javax.servlet.HttpServletRequest来执行(也可以用其他不同的工具来执行,但他们其实都是javax.servletHttpServletRequest的子集)。 也可以直接用scriptlet来直接访问Request对象。Scriptlet因限于篇幅不作详细讨论。现在只要知道他是用脚本语言写的一段放在<%和%>之间的代码就足够了。 你经常会用到如下方法处理Request对象,如表11-2所示。

  43. 表11-2 使用方法处理Request对象 6.从Bean中调数据到JSP页面 一旦用户的数据被传到Bean,你就想重新得到数据,然后在JSP页面中显示出来。想达到这一步,你就得用到<jsp:getProperty>标签传Bean名和属性名。 <jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>标签必须相配。

  44. 11.4 JSP内部对象的使用 • JSP内部对象有以下几种: • Request:客户端请求,此请求会包含来自GET/POST请求的参数。 • Response:网页传回客户端的响应。 • pageContext:网页的属性是在这里管理。 • session:与请求有关的会话。 • application:正在执行的内容。 • out:用来传送响应的输出流。 • config:servlet的架构对象。 • page:处理JSP网页本身。 • exception:处理JSP文件执行时发生的错误和异常。 11.4.1 Request对象的使用 Request对象主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。 一、Request对象的主要方法 (1)getCookies() 使用该方法可以返回客户端Cookie对象,结果是一个Cookie数组。 (2)getHeader(String name) 使用该方法可以获得HTTP协议定义的传送文件头信息,例如:Request.getHeader("User-Agent")将返回客户端浏览器的版本号、类型。

  45. (3)getAttribute(String name) 使用该方法可以返回name指定的属性值,如果不存在指定的属性,则返回空值(null)。 (4)getAttributeName() 使用该方法可以返回Request对象所有属性的名字,结果集是一个Enumeration(类举)类的实例。 (5)getHeaderName() 使用该方法可以返回所有RequestHeader的名字,结果集是一个Enumeration类的实例。 (6)getHeaders(String name) 使用该方法可以返回指定名字的RequestHeader的所有值,结果集是一个Enumeration类的实例。 (7)getMethod () 使用该方法可以获得客户端向服务器端传送数据的类型,有GET,POST或PUT等类型。 (8)getParameter(String name) 使用该方法可以获得客户端传送给服务器端的参数值,该参数由name指定。 (9)getParameterNames () 使用该方法可以获得客户端传送给服务器商的所有参数名字,结果集是一个Enumeration类的实例。

  46. (10)getParameterValues (String name) 使用该方法可以获得指定参数所有值。 (11)getQueryString () 使用该方法可以获得查询字符串,该字符串由客户端以GET方法向服务器端传送。 (12)getRequestURI () 使用该方法可以获得发出请求字符串的客户端地址。 (13)getServletPath () 使用该方法可以获得客户端所请求文件的文件路径。 (14)setAttribute(String name,Java.lang.Object o) 使用该方法可以设定名字为name的Request参数的值,该值由Object类型的O指定。 (15)getServerName()、getServerPort()、getRemoteAddr()、getRemoteHost() 使用以上四个中以分别获得服务器的名字、端口号、客户端的IP地址和微机的名字,其中getRemoteHost()方法如果失败,将会返回客户端电脑的IP地址。 (16)getProtocol() 使用该方法可以获取客户端向服务器端传送数据所依据的协议名称。 二、Request对象的用法 用法一:使用Request的方法获得服务器端的各个参数,并把它们用out.print()输出到浏览器上。 用法二:使用getMethod()方法,返回GET,使用getQueryString()方法,返回”bal=123.45,fName=Steven”。

  47. 11.4.2 Response对象的使用 Response对象和Request对象相反,主要用于向客户端发送数据,例如Cookie、HTTP文件头信息等。 一、Response对象的主要方法 (1)addCookie(Cookie cookie) 使用该方法可以添加一个Cookie对象,用来保存客户端的用信息,括号中的前一个Cookie表示Cookie的名称,后一个cookie表示对应的Cookie的值。例如: Cookie userCookie = new Cookie("user", "uid1234"); response.addCookie(userCookie); 用getCookies()方法可以获得这个Cookie。 (2)addHeader(String name,String value) 使用该方法可以添加HTTP文件头,该Header将会传到客户端去,如果同名的Header存在,那么原来的Header将会被覆盖。 (3)Contains Header(String name) 使用该方法可以判断指定名字的HTTP文件头是否存在并返回布尔值。 (4)Send Error(int sc) 使用该方法要以向客户端发送错误信息,例如:服务器内部错误(500),网页找不到错误(404)。 (5)setHeader(String name,String value) 使用该方法可以设定指定名字的HTTP文件头的值,如果该值存在,则它会被新的值覆盖。

  48. 二、Response对象的用法   使用Response方法,定时刷新页面,服务器重新解释执行这个程序,产生新的时间,然后输出到客户端。 11.4.3 Session对象的使用 Session对象用来在每一个用户之间分别保存用户信息。会话状态维持是Web应用开发者必须面对的问题。有多种方法可以用来解决这个问题,如使用Cookies、隐藏的表单输入域,或直接将状态信息附加到URL中。Java Servlet提供了一个在多个请求之间持续有效的会话对象,该对象允许用户存储和提取会话状态信息。JSP也同样支持Servlet中的这个概念。 Session对象和前面的Request,Response一样也是一个内部对象。这个对象在第一个JSP页面被封装时自动创建,并被关联到request对象上。与ASP中的会话对象相似,JSP中的Session对象对于那些希望通过多个页面完成一个事务的应用是非常有用的,因为多个页面可以共用Session对象的信息。 一、Session对象的主要方法 (1)getAttribute(String name) 使用该方法可以获得指定名字的属性,如果该属性不存在,将会返回null。 (2)getAttributeNames() 使用该方法可以返回Session对象中存储的每一个属性对象,结果集是一个Enumeration类的实例。

  49. (3)getCreationTime() 使用该方法可以返回Session对象创建的时间。 (4)getId() 使用该方法使得每生成一个Session对象,服务器就会给他一个编号,该编号不会重复,并返回当前Session对象的编号。 (5)getLastAccessedTime() 使用该方法可以返回当前Session对象最后一次被操作的时间。 (6)getMaxInactiveInterval() 使用该方法可以获取Session对象的生存时间。 (7)removeAttribute(String name) 使用该方法可以删除指定的属性。 (8)setAttribute(String name,java.Lang.Object.Value) 使用该方法可以设定名字的属性值,并且把它存储在Session对象中。 二.Session对象的用法 用法一:利用Session对象存储信息。 用法二:为说明session对象的具体应用,接下来我们用三个页面一个页面的Web应用。第一个页面q1.html仅包含一个要求输入用户名字的html表单,代码如下:

  50. 11.4.4 Application对象的使用 Application对象主要用于保存用户信息,当创建了Application对象,则Application对象将一直保持下去。在服务器启动或者JSP创建Application对象时,服务器会自动执行该文件,并完成Application对象的初始化,在顺关闭或者 Application对象被删除时,服务器执行global.jsp来完成Application对象的注销工作。值得说明的是:Application对象和ASP里的一样,是所有连接用户所有页面共用的对象。 一.Application对象的主要方法 (1)getAttribute(String name) 使用该方法可以返回由name指定名字的Application对象属性值。 (2)getAttributeNames() 使用该方法可以返回所有Application对象属性的名字,结果集是一个Enumeration类的实例。 (3)getInitParameter(String name) 使用该方法可以返回Application对象属性的初始值,这个属性由name指定。 (4)getServerInfo() 使用该方法可以获得当前版本Servlet编译器的信息。 (5)setAttribute(String name,Object object) 使用该方法可以实现用Object来初始化某个属性,该属性由name指定。

More Related