java+Jsp自学笔记.docx
- 文档编号:8828307
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:32.16KB
java+Jsp自学笔记.docx
《java+Jsp自学笔记.docx》由会员分享,可在线阅读,更多相关《java+Jsp自学笔记.docx(13页珍藏版)》请在冰豆网上搜索。
java+Jsp自学笔记
1、java中的抽象类:
在java中有抽象方法的类一定是个抽象类,但是抽象类不一定要包含抽象方法;所谓的抽象方法其实就是只有方法的申明,而没有方法体。
如果一个非抽象的类要继承一个抽象的父类,那么这个非抽象的子类必须实现抽象父类的抽象方法,除非这个子类也是个抽象类。
eg:
publicabstractclassAbstractClass//里面至少有一个抽象方法
{
publicintt;//普通数据成员
publicabstractvoidmethod1();//抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法
publicabstractvoidmethod2();
publicvoidmethod3();//非抽象方法
publicintmethod4();
publiintmethod4(){
……//抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
publicvoidmethod3(){
……//抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
}
2、接口
在java中,接口中只有方法的定义(申明),而没有方法的实现(即没有方法体),接口中不能有普通数据成员,只能够有静态的不能被修改的数据成员,static表示全局,final表示不可修改,可以不用staticfinal修饰,会隐式的声明为static和final。
Eg:
publicinterfaceInterface
{
staticfinalinti;//接口中不能有普通数据成员,只能够有静态的不能被修改的数据成员,static表示全局,final表示不可修改,可以不用staticfinal修饰,会隐式的声明为static和final
publicvoidmethod1();//接口中的方法一定是抽象方法,所以不用abstract修饰
publicvoidmethod2();//接口中不能赋予方法的默认行为,即不能有方法的具体实现
}
3、接口与抽象类的区别与联系:
简言之抽象类是一种功能不全的类(即类的半成品),接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。
从某种意义上说,接口是一种特殊形式的抽象类,在java语言中抽象类表示的是一种继承关系,一个类只能继继承一个抽象类,而一个类却可以实现多个接口。
在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。
4、java中的多态性
接口的出现是为了更好的实现多态,而多态的实现不一定需要依赖于接口
举个例子,多态肯定知道,一般有三种,接口的多态,类的多态,方法的多态
@方法的多态就类似于我们方法的重载——overloading(在同一个类中,方法名相同,方法的返回类型也可不同,方法的参数名,参数类型,参数个数不同),
@类的多态无非就是子类继承父类,并重写父类的方法,从而获得不同的实现——overrideing(发生在父类与子类的关系中,子类重写父类的方法,要求方法名相同并且方法的返回类型、方法的参数相同(参数名,参数个数,参数类型));
@那么再来看接口,接口跟类基本是一样,实现接口并实现接口的方法。
不同的类实现接口可以有不同的方式从而表现不同的行为,就是接口的多态性啊。
4.1多态:
就是重载和重写.重载发生在一个类中;重写发生在子类,意思就是子类重写父类相同名称的方法。
重载的特性:
方法名相同、返回类型、传入方法的参数不同(包括个数和类型);
重写的特性:
方法名相同、返回类型、参数均相同、必须发生在子类;
1.Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。
Animalanimal=newDog();//引用变量animal引用一个Animal子类Dog的实例
Dogdog=(Dog)animal;//向下转型,把Animal类型转换为Dog类型
Creaturecreature=animal;//向上转型,把Animal类型转换为Creature类型
animal=newCat();//引用变量animal引用另一个Animal子类Cat的实例
注:
Creature这里指的是生物。
2.如果把引用变量转换为子类类型,称为向下转型,如果把引用变量转换为父类类型,称为向上转型。
3.在进行引用变量的类型转换时,会受到各种限制。
而且在通过引用变量访问它所引用的实例的静态属性、静态方法、实例属性、实例方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制。
4.成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定。
例如,对于以下这段代码:
Fathersf=newSons();
System.out.println(“f.var=”+f.var);
System.out.println(“f.staticVar=”+f.staticVar);
f.method();
f.staticMethod();
运行时将会输出如下结果:
f.var=FatherVar
f.staticVar=StaticFaterVar
Sonmethod
StaticFathermethod
classFathers{
Stringvar="FatherVar";
staticStringstaticVar="StaticFatherVar";
voidmethod(){System.out.println("Fathermethod");}
staticvoidstaticMethod(){System.out.println("StaticFathermethod");}
}
classSonsextendsFathers{
Stringvar="SonVar";
staticStringstaticVar="StaticSonVar";
voidmethod(){System.out.println("Sonmethod");}
staticvoidstaticMethod(){System.out.println("StaticSonmethod");}
StringsonVar=null;
voidsonMethod(){}
}
JSP页面元素(一个JSP页面可能包括以下元素):
●模板元素——指jsp的静态HTML或者XML内容。
对jsp的显示非常重要。
1、
●注释
TML/XML注释:
jsp语法:
--comment[<%=expression%>]-->在客户端源代码中会产生这个注释
2、隐藏注释:
jsp语法:
<%--comment--%>jsp编译器不对其中的内容编译,所以不会显示在客户端包括客户端源代码中。
●脚本元素
1、声明:
就是在jsp程序中声明合法的变量和方法语法:
<%!
%>
2、表达式语法:
<%=expression%>
3、Scriptlets位于<%%>中的合法的java代码。
1、页面(page)指令:
语法:
<%@pageattribute=”value”%>
●指令元素2、include指令:
语法:
<%@includefile=”filename”%>
3、taglib指令(自定义标签库):
<%@tagliburi=””prefix=”标签前
缀“%>
●动作元素只在请求处理阶段起作用。
Eg:
useBean> setProperty> 、 JSP技术整个编译过程和jsp与servlet的区别与联系: 每一个JSP页面都会被Web容器编译成一个Java类,供web容器调用,并且生成HTML叶面回馈给用户。 而了解其中的变异方法和规则,对我们学习JSP是非常有好处的,可以说学习好了这个编译原理,就已经学习好了大部分的JSP知识,剩下的工作就只剩下熟记一些tablib和反复应用以使自己更加熟练而已了 JSP会被编译成.java放Tomcat/work/Catalina/localhost/***/org/apache/jsp/page 然后编译成.class jsp=java+html servlet=java+out.print(html) 1.客户端发送请求给web容器 2.web容器将jsp首先转译成servlet源代码 3.web容器将servlet源代码编译成.class文件 4.web容器执行.class文件 5.web容器将结果响应给客户端 JSP与Servlet 这篇文章的主要目的不是单纯的介绍JSP,也不是详细的介绍Servlet。 这是一篇讲述JSP和Servlet之间关系的基础性文章。 这篇文章主要是针对那些学习JSP的人而写的。 至于Servlet和JavaBean以及Servlet和XML我的两个同学在他们的文档中将会给出明确的解释。 本文的主要结构: 1.Servlet是什么? 2.JSP与Servlet. 3.Servlet概述 4.附录一 5.附录二 在讲述的过程中,主要是针对JSP和Servlet关系区别来写。 而本文的内容顺序之所以按这种方式来写是为了体现技术的发展顺序。 附录一提供了有关怎样来运行一个Servlet的内容,完全是按本人的经验来写,其内容已经经过本人的证实。 附录二中收集了一些纯粹的实践笔记。 (转载) 一.Servlet是什么? 客户机/服务器计算的发展。 Java提供了一整套客户机/服务器解决方案,在这个方案中,程序可以自动地下载到客户端并执行,这就是applet。 但是它仅仅是问题的一半。 问题的另一半就是Servlet。 servlet可以被认为是服务器端的applet。 servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。 servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。 使用servlet的基本流程如下: ·客户端通过HTTP提出请求. ·Web服务器接收该请求并将其发给servlet。 如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。 ·servlet将接收该HTTP请求并执行某种处理。 ·servlet将向Web服务器返回应答。 ·Web服务器将从servlet收到的应答发送给客户端。 由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。 要注意的是Web浏览器并不直接和servlet通信,servlet是由Web服务器加载和执行的。 而servlet是用Java编写的,所以它们一开始就是平台无关的。 这样,Java编写一次就可以在任何平台运行(writeonce,runanywhere)的承诺就同样可以在服务器上实现了。 servlet还有一些CGI脚本所不具备的独特优点: (本人对CGI并不是十分了解,所以这些特点不能完全的体会到,这也是摘自论坛的贴子,请见谅) servlet是持久的。 servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。 与之相反,CGI脚本是短暂的、瞬态的。 每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。 一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。 CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。 servlet是与平台无关的。 如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。 servlet是可扩展的。 由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。 Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。 servlet自然也具备了这些特征。 servlet是安全的。 从外界调用一个servlet的惟一方法就是通过Web服务器。 这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。 setvlet可以在多种多样的客户机上使用。 由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们,就像你使用applet一样。 那么,Servlet是怎样执行的? 怎样来写一个Servlet,它的基本架构是怎么样的? 这些问题,将在后面部分给予介绍。 二.JSP与Servlet 现在已经对Servlet有了大概的了解,现在我们就来说说JSP和Servlet的关系。 JSP是一种脚本语言,包装了JavaServlet系统的界面,简化了Java和Servlet的使用难度,同时通过扩展JSP标签(TAG)提供了网页动态执行的能力。 尽管如此,JSP仍没有超出Java和Servlet的范围,不仅JSP页面上可以直接写Java代码,而且JSP是先被译成Servlet之后才实际运行的。 JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关。 它是与JavaScript不同的,JavaScript是在客户端的脚本语言,在客户端执行,与服务器无关。 那么JSP是什么? 就是Servlet. JSP与Servlet之间的主要差异在于,JSP提供了一套简单的标签,和HTML融合的比较好,可以使不了解Servlet的人可以做出动态网页来。 对于Java语言不熟悉的人(比如像我),会觉得JSP开发比较方便。 JSP修改后可以立即看到结果,不需要手工编译,JSP引擎会来做这些工作;而Servelt缺需要编译,重新启动Servlet引擎等一系列动作。 但是在JSP中,HTML与程序代码混杂在一起,而Servlet却不是这样。 也许大家比较混乱了,那么Servlet又是什么? 下面我们对JSP的运行来做一个简单的介绍,告诉大家怎样来执行一个JSP文件: 当Web服务器(或Servlet引擎,应用服务器)支持JSP引擎时,JSP引擎会照着JSP的语法,将JSP文件转换成Servlet代码源文件,接着Servlet会被编译成Java可执行字节码(bytecode),并以一般的Servlet方式载入执行 JSP语法简单,可以方便的嵌入HTML之中,很容易加入动态的部分,方便的输出HTML。 在Servlet中输出HTML缺需要调用特定的方法,对于引号之类的字符也要做特殊的处理,加在复杂的HTML页面中作为动态部分,比起JSP来说是比较困难的。 除去了转换和编译阶段,JSP和Servlet之间的区别实在是不大。 JSP引擎通常架构在Servlet引擎之上,本身就是一个Servlet,把JSP文件转译成Servlet源代码,再调用Java编译器,编译成Servlet。 这也是JSP在第一次调用时速度比较慢的原因,在第一次编译之后,JSP与Servlet速度相同.下面我们来看看为什么他们在第一次编译后再编译的速度相同: 在整个运行过程中,JSP引擎会检查编译好的JSP(以Servlet形式存在)是否比原始的JSP文件还新,如果是,JSP引擎不会编译;如果不是,表示JSP文件比较新,就会重新执行转译与编译的过程。 为了有个深刻的了解,我们看一下JSP的运行和开发环境: 浏览器: 常见的浏览器有IE和Netscape两种。 数据库: 常用的数据库有Oracle,SQLServer,Informix,DB2,Sybase,Access,MySQL等。 操作系统: 常见的有Windows,Linux,以及各种Unix系统。 Web服务器: 常见的有IIS,Apache,NetscapeEnterpriseServer等。 JSP引擎: 一般JSP引擎都以Servlet引擎为基础,并以Servlet的形式出现。 同时,在各种免费和商业引擎的实现中,Servlet引擎和Jsp引擎通常也是一起出现,我们成为Servlet/JSP引擎,或从某种成为JSP引擎。 JSP引擎是可以提供JSP和Servlet运行支持并对其生存周期进行管理的系统级实体。 在JSP页面第一次被请求时,JSP引擎会将JSP原始文件转换成Servlet源代码,然后调用Java编译器,编译成Servlet,并在Servlet引擎中执行。 当再次有请求的时候,JSP引擎会检查编译好的JSP是否比原来的JSP原始文件要新,如果是,运行Servlet;如果不是,表示文件已经更新的了,就会从新执行转换和编译的过程。 说到这里,也基本把JSP和Servlet的关系说清楚了,从我的感觉上看用JSP就可以了,简单又方便,又可以和Bean很好的兼容使用,功能又很强大,为什么又出现了Servlet,它又有什么用? 何况它的编写又相对复杂。 为了把问题说得更清楚一点,我想在这里说一下历史,顺便再讲一下为什么还要用Servlet,Servlet的好处是什么。 历史简述: (摘自某论坛有删节,改写) 简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的JSP(是Servlet发展的产物),把JSPTAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。 新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。 从网络三层结构的角度看,一个网络项目最少分三层: datalayer,businesslayer,presentationlayer。 当然也可以更复杂。 SERVLET用来写businesslayer是很强大的,但是对于写presentationlayer就很不方便。 JSP则主要是为了方便写presentationlayer而设计的。 当然也可以写businesslayer。 写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentationlayer和businesslayer混在一起。 把数据库处理信息放到JSP中,其实,它应该放在businesslayer中。 根据SUN自己的推荐,JSP中应该仅仅存放与presentationlayer有关的内容,也就是说,只放输出HTML网页的部份。 而所有的数据计算,数据分析,数据库联结处理,统统是属于businesslayer,应该放在JAVABEANS中。 通过JSP调用JAVABEANS,实现两层的整合。 实际上,微软推出的DNA技术,简单说,就是ASP+COM/DCOM技术。 与JSP+BEANS完全类似,所有的presentationlayer由ASP完成,所有的businesslayer由COM/DCOM完成。 通过调用,实现整合。 现在微软推出的.NET也是通过这个理念,所有的presentationlayer由ASP.NET完成,businesslayer由C#或VB.NET或VC.NET来完成。 为什么要采用这些组件技术呢? 因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。 另外一方面,纯SCRIPT语言将presentationlayer和businesslayer混在一起,造成修改不方便,并且代码不能重复利用。 如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。 综上所述,SERVLET是一个早期的不完善的产品,写businesslayer很好,写presentationlayer就很不好,并且两层混杂,显得十分混乱。 所以,推出JSP+BAEN,用JSP写presentationlayer,用BAEN写businesslayer。 SUN自己的意思也是将来用JSP替代SERVLET。 看了上面的叙述,大家可能对JSP与Servlet共存有了比较好的认识。 可以看到JSP和Bean结合后的的实用性,强大的表现功能,易用性都是Servlet所不能及的。 那么是不是Servlet就被取代了? 不是! 在以后的发展中,它还是有着巨大的作用的。 上面只不过是将了问题的一方面,下面我们来看看Servlet本身的特点。 由于它是由java来写的,所以相关的特点我们就不说了,上文已经有了详细的介绍,我们来看看其他的: Servlet是用于开发服务器端应用程序的一种编程模型,如果只是一个普通的java应用,可以不使用servlet来编写,但是如果想要提供基于web的服务能力,那么就必须按照这种模型来编写,而且servlet也必须允许在符合servlet规范的javawebserverorappserver之上,否则无法运行。 除非你自己实现一个webserver,但是其复杂度是比较高的,特别是在企业级应用中,对系统的稳定性和健壮性都要求比较高,所以servlet的模型实际上是简化了编写稳健的服务器端的应用开发过程。 Servlet可以作为提供web服务能力的一个接入方式 现在也许可以理解了什么是Servlet什么是JSP,它们之间的关系是怎样的。 下面我就对Servlet这个技术做一个简要的介绍。 Servlet概述 一.Servlet的结构 在ServletAPI中最重要的是Servletinterface.所有的servletsimplement(实现)这个interface,方式多种: 或者是直接的,或者通过extending这个class执行它,如HttpServlet.这个Servletinterface提供安排servlet与客户端联系的方法.Servlet编写者可以在他们开发servlet程序时提供更多一些或所有的这样方法. 当一个servlet接收来自客户端的调用请求,它接收两个对象: 一个是ServletRequest,另外一个是ServletResponse.这个ServletRequestclass概括从客户端到服务器之间的联系,而ServletResponseclass概括从servlet返回客户端的联系. ServletRequestinterface可以获取到这样一些信息如由客户端传送的阐述名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名.它也提供获取数据流的servlet,ServletInputStream,这些数据是客户端引用中使用HTTPPOST和PUT方法递交的.一个ServletRequest的子类可以让servlet获取更多的协议特性数据.例如: HttpServletRequest包含获取HTTP-specific头部信息的方法. ServletResponseinterface给出响应客户端的servlet方法.它允许servlet设置内容长度和回应的mime类型,并且提供输出流,ServletOutputStream,通过编写者可以发回相应数据.ServletResponse子类可以给出更多protocol-specific容量的信息。 例如: HttpServletResponse包含允许servlet操作HTTP-specific头部信息的方法.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java Jsp 自学 笔记