JSP技术文档.docx
《JSP技术文档.docx》由会员分享,可在线阅读,更多相关《JSP技术文档.docx(57页珍藏版)》请在冰豆网上搜索。
JSP技术文档
JSP技术文档
一、基础知识
1.1、JSP技术简介
JSP(IAVASERVERPAGES)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,其在动态网页的建设中有其强大而特别的功能,他主要用于创建可支持跨平台及跨Web服务器的动态网页。
JSP可与微软的ActiveServerPages(ASP)相媲美,但JSP使用的是类似于HTML的标记和Java代码片段而不是用VBScript。
当你使用不提供ASP本地支持的Web服务器(例如Apache或Netscape服务器)时,你就可以考虑使用JSP了。
JavaServerPages技术可以让web开发人员和设计人员非常容易的创建和维护动态网页,特别是目前的商业系统。
作为JavaTM技术的一部分,JSP能够快速开发出基于web、独立于平台的应用程序。
JSP把用户界面从系统内容中分离开来,使得设计人员能够在不改变底层动态内容的前提下改变整个网页布局。
那么什么是JavaServerPage呢?
简单的说,一个JSP网页就是在HTML网页中包含了能够生成动态内容的可执行应用程序代码。
此应用程序可能包含JavaBeanTM,JDBCTM对象,EnterpriseJavaBeanTM(EJB)和RemoteMethodInvocation(RMI)对象,所有的部分都可以非常容易的从JSP网页上访问到。
例如,一个JSP网页可以包含HTML代码所显示的静态文本和图像,也可以调用一个JDBC对象来访问数据库;当网页显示到用户界面上以后,它将包含静态HTML内容和从数据库中找到相应的动态信息。
在JSP网页中,要把用户界面和应用程序分开可以考虑在网页设计人员和开发人员之间执行一个非常方便的授权任务。
它也允许开发人员去建立灵活的代码,从而非常容易的进行更新和重复利用。
由于JSP网页能够根据需要自动进行编译,web设计人员无须重新编译应用程序逻辑就可以改变表述代码。
这也使得JSP与Javaservlet(它是JavaSeverPages功能的扩展)相比成为一种可以更灵活生成动态web内容的方法。
在Sun正式发布JSP(JavaServerPages)之后,这种新的Web应用开发技术很快引起了人们的关注。
JSP为创建高度动态的Web应用提供了一个独特的开发环境。
按照Sun的说法,JSP能够适应市场上包括ApacheWebServer、IIS4.0在内的85%的服务器产品。
即使您对ASP或PHP、CGI“一往情深”,我们认为,关注JSP的发展仍旧很有必要,这是基于以下的比较分析。
JSP与Microsoft的ASP、PHP技术非常相似。
ASP的编程语言是VBScript之类的脚本语言,JSP使用的是Java,这是他们最明显的区别。
此外,ASP、PHP与JSP还有一个更为本质的区别:
两种语言引擎用完全不同的方式处理页面中嵌入的程序代码。
在ASP下,VBScript代码被ASP引擎解释执行;在JSP下,代码被编译成Servlet并由Java虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生。
事实证明,JavaServlet是一种开发Web应用的理想构架。
JSP以Servlet技术为基础,又在许多方面作了改进。
利用跨平台运行的JavaBean组件,JSP为分离处理逻辑与显示样式提供了卓越的解决方案。
JSP必将成为其它动态网页技术的有力竞争者。
1.2、JSP技术特点
1.2.1将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。
使用JSP标识或者小脚本来生成页面上的动态内容。
生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。
如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。
这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。
1.2.2强调可重用的组件
绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者EnterpriseJavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。
开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。
基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。
1.2.3采用标识简化页面开发
Web页面开发人员不会都是熟悉脚本语言的编程人员。
JavaServerPage技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。
标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。
通过开发定制化标识库,JSP技术是可以扩展的。
今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。
这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。
JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。
作为采用Java技术家族的一部分,以及Java2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为JavaServlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。
作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。
随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。
1.2.4与其它动态网页技术的比较:
与传统的CGI方式相比
a.后台实现逻辑是基于JavaComponent的,具有跨平台的特点
b.将应用逻辑与页面表现分离,使得应用逻辑能够最大程度得到复用,从而提高开发效率
c.运行比CGI方式高,尤其对于数据库访问时,提供了连接池缓冲机制,使运行所需资源最小
d.安全,由于后台是完全基于Java技术的,安全性由Java的安全机制予以保障
e.由于与ASP很近似,不需要太多的编程知识就可以动手编写JSP
f.内置支持XML,使用XML从而使页面具有更强的表现力和减少编程工作量
与Asp和php的比较:
目前,最常用的三种动态网页语言有ASP(ActiveServerPages),JSP(JavaServerPges),PHP(HypertextPreprocessor)。
ASP全名ActiveServerPages,是一个WEB服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的WEB服务应用程序。
ASP采用脚本语言VBScript(Javascript)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝多数数据库。
还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。
而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--脚本级执行(据说PHP4也已经在Zend的支持下,实现编译运行).Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和JavaApplet之外,又有新的硕果,就是Jsp--JavaServerPage。
Jsp可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。
但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。
在ASP、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。
普通的HTML页面只依赖于Web服务器,而ASP、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。
程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。
ASP、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
JSPvsASP
JSP跨平台,而且支持Apache,Netscape,IIS,IBMHttpServer在内的所有主流WebServer(市场份额在85%以上),而ASP目前只支持NT+IIS(市场份额在20%左右);提供了更好的安全机制,这对于e-business这样的应用来说是至关重要的;JSP可以跨操作系统、WebServer和应用服务器,而ASP只限于NT+IIS;
JSP是一个开放的标准,得到了Oracle,Netscape,IBM&WebLogic,Inprise等的支持;JSP的组件编写更为容易,而且JSP的性能由于ASP;
JSPvsPHP
JSP是一个业界标准,得到Sun,IBM,Oracle,BEA,Apache等的支持,PHP只是一个开发组织并不强的freeware;PHP的性能不好,是解释型的,JSP采用JIT编译后,和c不相上下,而且支持多线程;JSP支持的平台众多,从Win98,NT,Unix,Linux,FreeBSD到AS/400,OS/390,而PHP支持的平台有限;JSP可以利用JDBC和众多主流关系数据库连接,而PHP目前只支持MySql和Oracle等有限的几种;JSP中的组件,JavaBean和EJB开发非常容易,而且还可以在JSP中使用Java所有的类和功能。
而PHP只能用C写一些功能有限的组件,而且编写较为复杂;利用JSP可以支持EJB,以支持Transaction和CORBA标准,而且还可以支持LDAP,Message等服务,使得访问ERP,CICS,MQ等企业应用非常容易。
而PHP在这方面先天不足,所以对于电子商务这样的Mission-critical的应用来说,PHP并不适合。
性能比较
有人做过试验,对这三种语言分别做循环性能测试及存取Oracle数据库测试。
在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的循环。
而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。
数据库测试中,三者分别对Oracle8进行1000次Insert,Update,Select,和Delete:
Jsp需要13秒,Php需要69秒,ASP则需要73秒。
1.3建立JSP运行环境
Sun公司的JSP主页在JSP规范,这些规范定义了供应商在创建JSP引擎时所必须遵从的一些规则。
执行JSP代码需要在服务器上安装JSP引擎。
此处我们使用的是Sun的JavaServerWebDevelopmentKit(JSWDK)。
为便于学习,这个软件包提供了大量可供修改的示例。
安装JSWDK之后,只需执行startserver命令即可启动服务器。
在默认配置下服务器在端口8080监听,使用http:
//localhost:
8080即可打开缺省页面。
在运行JSP示例页面之前,请注意一下安装JSWDK的目录,特别是“work”子目录下的内容。
执行示例页面时,可以在这里看到JSP页面如何被转换成Java源文件,然后又被编译成class文件(即Servlet)。
JSWDK软件包中的示例页面分为两类,它们或者是JSP文件,或者是包含一个表单的HTML文件,这些表单均由JSP代码处理。
与ASP一样,JSP中的Java代码均在服务器端执行。
因此,在浏览器中使用“查看源文件”菜单是无法看到JSP源代码的,只能看到结果HTML代码。
所有示例的源代码均通过一个单独的“examples”页面提供。
JSP页面示例:
下面我们分析一个简单的JSP页面。
您可以在JSWDK的examples目录下创建另外一个目录存放此文件,文件名字可以任意,但扩展名必须为.jsp。
从下面的代码清单中可以看到,JSP页面除了比普通HTML页面多一些Java代码外,两者具有基本相同的结构。
Java代码是通过<%和%>符号加入到HTML代码中间的,它的主要功能是生成并显示一个从0到9的字符串。
在这个字符串的前面和后面都是一些通过HTML代码输出的文本。
JSP页面
<%@pagelanguage="java"%>
<%!
Stringstr="0";%>
<%for(inti=1;i<10;i++){
str=str+i;
}%>
JSP输出之前。
<%=str%>
JSP输出之后。
这个JSP页面可以分成几个部分来分析。
首先是JSP指令。
它描述的是页面的基本信息,如所使用的语言、是否维持会话状态、是否使用缓冲等。
JSP指令由<%@开始,%>结束。
在本例中,指令“<%@pagelanguage="java"%>”只简单地定义了本例使用的是Java语言(当前,在JSP规范中Java是唯一被支持的语言)。
接下来的是JSP声明。
JSP声明可以看成是定义类这一层次的变量和方法的地方。
JSP声明由<%!
开始,%>结束。
如本例中的“<%!
Stringstr="0";%>”定义了一个字符串变量。
在每一项声明的后面都必须有一个分号,就象在普通Java类中声明成员变量一样。
位于<%和%>之间的代码块是描述JSP页面处理逻辑的Java代码,如本例中的for循环所示。
最后,位于<%=和%>之间的代码称为JSP表达式,如本例中的“<%=str%>”所示。
JSP表达式提供了一种将JSP生成的数值嵌入HTML页面的简单方法。
二、JSP的基本语法
2.1、Java简介
Java语言的基本结构像C/C++,任何用面向过程语言编写过程序的人都可以了解Java语言的大部分结构。
2.1.1程序结构
Java语言的源程序代码由一个或多个编译单元(compilationunit)组成,每个编译单元只能包含下列内容(空格和注释除外):
•程序包语句(packagestatement)。
•入口语句(importstatements)。
•类的声明(classdeclarations)。
•界面声明(interfacedeclarations)。
每个Java的编译单元可包含多个类或界面,但是每个编译单元最多只能有一个类或者界面是公共的。
Java的源程序代码被编译后,便产生了Java字节代码。
Java的字节代码由一系列不依赖于机器的指令组成,这些指令能被Java的运行系统(runtimesystem)有效地解释。
Java的运行系统工作起来如同一台虚拟机。
在当前的Java实现中,每个编译单元就是一个以.java为后缀的文件。
每个编译单元有若干个类,编译后,每个类生成一个.class文件。
.class文件是Java虚拟机能够识别的代码。
在引入了JAR这个概念以后,现在可以把许多Java的class文件压缩进入一个JAR文件中。
新版本的Java已经可以直接读取JAR文件加以执行。
2.1.2.注释
注释有三种类型:
//注释一行
/*一行或多行注释 */
/**文档注释 **/
文档注释一般放在一个变量或函数定义之前,表示在任何自动生成文档系统中调入,提取注释生成文档的工具叫做javadoc,其中还包括一些以@开头的变量,如:
@see、@version、@param等等,具体用法参见JDK自带的工具文档。
2.1.3.标识符
变量、函数、类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标识符。
在Java语言里,标识符以字符_或$开头,后面可以包含数字,标识符是大小写有区别的,没有长度限制。
有效的标识符如:
gogogobrood_warHello_and_you$bill。
声明如:
inta_number;
char_onechar;
float$bill。
以下为Java的关键字:
Abstractcontinuefornewswitch
Booleandefaultgotonullsynchronized
Breakdoifpackagethis
bytedoubleimplementsprivatethreadsafe
byvalueelseimportprotectedthrow
caseextendsinstanceofpublictransient
catchfalseintreturntrue
charfinalinterfaceshorttry
classfinallylongstaticvoid
constfloatnativesuperwhile
以下单词被保留使用:
cast、future、generic、inner、operator、outer、rest、var。
2.1.4.数据类型
Java使用五种基本类型:
integer(整数),floating(浮点数),point(指针),Boolean(布尔变量),CharacterorString(字符或字符串)。
此外,还有一些复合的数据类型,如数组等。
Integer包含下面几种类型:
整数长度(Bits)数据类型表示
8byte
16short
32int
64long
floating下边给出的数据表示都是浮点数的例子:
3.14159,3.123E15,4e5
浮点数长度(Bits)数据类型表示
32float
64double
Boolean下边是布尔变量的两种可能取值:
truefalse
Character下边给出的都是字符的例子:
asdf
String下边给出的都是字符串的例子:
"gogogo,rockandroll""JSP高级编程"
数组可以定义任意类型的数组,如chars[],这是字符型数组;intarray[],这是整型数组;
还可以定义数组的数组.intblock[][]=newint[2][3];数组边界在运行时被检测,以避免堆栈溢出。
在Java里,数组实际上是一个对象,数组有一个成员变量:
length。
可以用这个成员函数来查看任意数组的长度。
在Java里创建数组,可使用两种基本方法:
1)创建一个空数组。
intlist[]=newint[50];
2)用初始数值填充数组.
Stringnames[]={"Chenji","Yuan","Chun","Yang"};
它相当于下面功能:
Stringnames[];
names=newString[4];
names[0]=newString("Chenji");
names[1]=newString("Yuan");
names[2]=newString("Chun");
names[3]=newString("Yang");
在编译时不能这样创建静态数组:
intname[50];//将产生一个编译错误
也不能用new操作去填充一个没定义大小的数组。
如:
intname[];
for(inti=0;i<9;i++){
name[i]=i;
}
2.1.5.表达式
Java语言的发展中有许多是从C语言借鉴而来的,所以Java的表达式和C语言非常类似。
运算符运算符(operator)优先级从高到低排列如下:
[]()++--!
~instanceof*/%+-<<>>>>><><=>\==!
=&^&&||?
:
=op=,
整数运算符
在整数运算时,如果操作数是long类型,则运算结果是long类型,否则为int类型,绝不会是byte,short或char型。
这样,如果变量i被声明为short或byte,i+1的结果会是int。
如果结果超过该类型的取值范围,则按该类型的最大值取模。
单目整数运算符是:
运算符操作
-非
~位补码
++加1
--减1
++运算符用于表示直接加1操作。
增量操作也可以用加运算符和赋值操作间接完成。
++lvalue(左值表示lvalue+=1,++lvalue也表示lvalue=lvalue+1(只要lvalue没有副作用)。
--运算符用于表示减1操作。
++和--运算符既可以作为前缀运算符,也可以作为后缀运算符。
双目整数运算符是:
运算符操作
+加
-减
*乘
/除
%取模
&位与
|位或
^位异或
<<左移
>>右移(带符号)
>>>添零右移
整数除法按零舍入。
除法和取模遵守以下等式:
(a/b)*b+(a%b)==a。
整数算术运算的
异常是由于除零或按零取模造成的。
它将引发一个算术异常,下溢产生零,上