2023年java笔试题及答案_第1页
2023年java笔试题及答案_第2页
2023年java笔试题及答案_第3页
2023年java笔试题及答案_第4页
2023年java笔试题及答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

l.web中的forward和redirect的区别?(

前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,

浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地

址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward。方法,并且,这样也有助于隐藏实

际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用scndRedirect。方法。

2.xml在解释的时候DOM和SAX协议的区别和含义?

DOM:解决大型文献时其性能下降的非常厉害。这个问题是由DOM的树结构所导致的,这种结构占用的内

存较多,并且DOM必须在解析文献之前把整个文档装入内存,适合对XML的随机访问

SAX:不现于DOM.SAX是事件驱动型的XML解析方式。它顺序读取XML文献,不需要一次所有装载整

个文献。当碰到像文献开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其

回调事件中写入解决代码来解决XML文献,适合对XML的顺序访问

3说明JNDI、JMS、JTA、RMI的意思?

JNDI(JavaNamingandDirectoryInterface)是一个应用程序设计的API,为开发人员

提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在

抽象层上。

JMS(JavaMessagingService)是Java平台上有关面向消息中间件的技术规范,翻译为

Java消息服务。JMS支持点对点和发布/订阅两种消息模型。

JTA(JavaTransactionAPI)为J2EE平台提供了分布式事务服务。要用JTA进行事务界

定,应用程序要调用javax.transaction.UserTransaction接口中的方法.

RMI是Java的一组拥护开发分布式应用程序的APLRMI使用Java语言接口定义了

远程对象,它集合了Java序列化和Java远程方法协议(JavaRemoteMethodProt

ocol)o它大大增强了Java开发分布式应用的能力

4.单子模式

PublicclassSignle{

PrivateSignle(){

PirvatestaticSignlesignle=newSignle();

PublicstaticSignlegets(){

Retrunsignle;

publicclassMyBean{

privatestaticMyBeaninstance=null;

privateMyBean(){

//dosomething

)

publicstaticsynchronizedMyBeangetlnstance(){

if(instance==null){

instance=newMyBean();

)

returninstance;

)

你是说单例模式是吧,这个单例模式是延迟加载的模式.尚有一种就是即时加载,不需要判断是否有实例存在,

先自己new出一个实例.

)

5数据库中leftjoin的意思,和在什么场合中应用?

LEFTJOIN操作用于在任何的FROM子句中,组合来源表的记录。使用LEFTJOIN运算来创建一个左边

外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的所有记录,即使在第二个(右边)

表中并没有相符值的记录。

6ejb中的sessionbean和entitybean的区别和含义?

SessionBean在J2EE应用程序中被用来完毕一些服务器端的业务操作,例如访问数据库、调

用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。

对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运营的业务逻辑。

对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对

象视图,或是一个由现有公司应用程序实现的实体。

7抽象类和接口的区别

1:一个类可以实现任意多的接口,但是最多只能对一个抽象类进行子类化。

2:一个抽象类可以涉及非抽象方法,而一个接口的所有方法在效果上都是抽象的。

3:一个抽象类可以申明并使用变量,而一个接口不行。

4:一个抽象类中的方法的访问修饰符可以使public,internal,protected,protectedinternal.private,而接口成员

的访问修饰符在默认情况下都是public,并且,在申明接口成员时,不允许使用访问修饰符(甚至不能使

用public)»

5:一个抽象类可以定义构造函数,而一个接口不行。

8对象序列化的含义

Java序列化技术可以使你将一个对象的状态写入一个Byte流里,并且可以从其它地方

把该Byte流里的数据读出来。重新构造一个相同的对象。这种机制允许你将对象通过网络

进行传播,并可以随时把对象持久化到数据库、文献等系统里。Java的序列化机制是RMI、

EJB、JNNI等技术的技术基础。

9数据库中的锁涉及什么?

基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).

所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...

所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,

直到T释放A上的S锁若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能

进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不

能加X锁,从而可以读取A,但不能更新A.

lOjsp和serverlet的区别

(1).简朴的来说应1就是具有Javn代码的html,而servlet是具有html的Java代码;

(2)』里最终也是被解释为servlet并编译再执行,Jsp但是是servlet的另一种编写方式;

(3).Jsp擅长表达,servlet擅长数据解决,在MVC三层结构中,应£_负责V(视图),servlet

负责C(控制),各有优势,各司其职;

11.oracle中数据表的交集怎么表达

第一种方法:运用操作符intersect

intersect操作符用来合并两个查询,返回两个查询中都存在的记录,即返回两个查询结果的交集,前

提是两个查询的列的数量和数据类型必须完全相同。

举例说明:

表A的数据结构:

中文名称字段名类型长度

学号codeC4

姓名nameC8

表B的数据结构:

中文名称字段名类型长度

学号Student_codeC4

姓名Student_nameC8

分数scoreN3

表A的数据为:

('1101'韩甲'),C1102','丁乙')

表B的数据为:

('1101'韩甲99),('1102','丁乙89),('1103',‘徐静',94)

在oracle中运营以下查询,图1显示了这个查询的结果:

SQL>selectcode,namefromA

intersect

selectstudent_code,student_namefromB;

图1使用intersect操作符查询的结果

第二种方法:in子句

in子句可以在子查询中为where子句计算所得的值创建一个列表。这种方法与前一种方法有所不同的是,前一

种方法比较多列但只使用一个intersect就行了,而一个in子句用来比较两个子查询的一列,比较几列就要使用几

个in子句。下面举例说明如何取得两个查询的交集。

仍以A和B两张数据表为例,在oracle中运营以下杳询,图2显示了这个查询的结果:

SQL>selectcode,namefromA

whereA.codein

(selectstudent_codefromB)

andA.namein

(selectstudent_namefromB)

orderbyA.code;

查询结果如图2所示。

图2使用in子句查询的结果

以上为笔者使用。racle7.3的体会,如有不妥之处,请不吝赐教。

12jsp页面中如何传递参数

(1)直接在URL请求后添加

(2)jsp:param

3)设立session和request

13jsp中的doget()和dopost()方法的作用?

这个两个方法都是http协议的方法,doget用于传输数据量较小(密码会泄露),dopost数据

量较大,

14什么是用例?如何拟定用例?

在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单

元的定义和描述。

一个用例可以看作是系统的一个功能,例如增长用户,增长角色,查询一个具体的一个事物,在Ejb的设计中,

一个usecase跟Sessionbean的•个方法是相应的(使用的sessionfasade模式),你说的基础数据管

理,我会把它解决成为一个抽象用例,由于我认为基础数据这个概念非常的抽象,什么是真正的基础数据?例

如说一个系统中邮政编码算是这个系统的基础数据,那么"邮政编码修改”这个就应当算是用例了.

15活动图和时序图的区别?

时序图重要强调时间的顺序

活动图重要强调空间上类的交互

16什么是策略模式?什么情况下使用?

策略模式定义了一系列的算法,并将每一个算法封装起来,并且使它们还可以互相替

Context(应用场景):

1、需要使用ConcreteStrategy提供的算法。

2、内部维护一个Strategy的实例。

3、负责动态设立运营时Strategy具体的实现算法。

4、负责跟Strategy之间的交互和数据传递。

17面向接口编程的好处

使用接口编程,易于程序扩展,减少程序耦合性。

涉及结构清楚,类之间通信简朴易懂,扩展性好,提高复用性等等。

18事物

事务就是一系列的操作,这些操作完毕一项任务.只要这些操作里有一个操作没有成功,事务

就操作失败,发生回滚事件.即撤消前面的操作,这样可以保证数据的一致性.并且可以把操作

暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作.

1简答题

3)说明jndi、jms、jta>rmi的意思?

web容器:给处在其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSRSERVLET直接更容器中

的环境变量接口交互,不必关注其它系统问题。重要有WEB服务器来实现。例如:

TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEBAPPLICATION

标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

EJB容器:Enterprisejavabean容器。更具有行业领域特色。他提供应运营在其中的组件EJB各种管理功

能。只要满足J2EE规范的EJB放入该容器,立即就会被容器进行高效率的管理。并且可以通过现成的接

口来获得系统级别的服务。例如邮件服务、事务管理。

JNDI:(JavaNaming&DirectoryInterface)JAVA命名目录服务。重要提供的功能是:提供一个目录系统,

让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:(JavaMessageService)JAVA消息服务。重要实现各个应用程序之间的通讯。涉及点对点和广播。

JTA:(JavaTransactionAPDJAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口

即可。

JAF:(JavaActionFrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部

署和自定义实现自己的个性安全控制策略。

RM1/II0P:(RemoteMethodInvocation/internet对象请求中介协议)他们重要用于通过远程调用服务。例如,

远程有一台计算机上运营一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。

当然这是要通过一定的规范才干在异构的系统之间进行通信。RM1是JAVA特有的。

4)数据库中leftjoin的意思,和在什么场合中应用?

简朴说左表全都显示右表也许为空

应用场合就是当左表的数据全要右表有就显示没有就不显

这个比较细微,我尽量回答。

总的来说,2种写法,在oracle里,效率和性能区别不大。

假如非要比较的话,大约有以下区别:

(+)和leftjoin,在检索显示的字段很少的时候,或者干脆就是检索count(*)的时候,在效率和性能上,是

同样,甚至cpucost都完全同样;

但是在检索显示的字段比较多得时候,第一次执行,leftjoin比(+)的效率高;当然,执行第二次之后,

由于数据已经到了缓存,区别也不明显了,基本是一致的。

6)ejb中的sessionbean和entitybean的区别和含义?

EntityBean:重要是指可存储的物件,比如:学生,学校,公司,职工等等。。。必须是Serializable

SessionBean:重要是指商业逻辑物件,比如:购物,执行某功能etc.表达的是一种过程

SessionBcan又分为:Stateless和Stateful区别就是,Stateful有状态记忆,Stateless无状态记忆

Message-DrivenBean:重要是用于做一些JMSmessage的解决。这•点可以从Message-DrivenBean的构架

里看到:当客户发送一个message到JMS,Container就会从BeansPool中把注册了的Message-Driven

Bean调出来并且后台运营...

我这里是概述,建议你最佳找一本EJB的书来读…最新的EJB的版本是3.0

7)抽象类和接口的区别(java经典笔试题中也有)?

8)对象序列化的含义?

1、序列化是干什么的?

简朴说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用

你自己的各种各样的方法来保存ObjectStates,但是Java给你提供•种应当比你自己好的保存对象状态的

机制,那就是序列化。

2、什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文献中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instanceariable)

比如:

FoomyFoo=newFoo();

myFoo.setWidth(37);

myFoo.setHeight(70);

当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,7(0都被保存到foo.ser

文献中,这样以后又可以把它从文献中读出来,重新在堆中创建本来的对象。当然保存时候不仅仅是保存

对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复本来的对象。

FileOutputStreamfs=newFileOutputStream("fbo.serH);

ObjectOutputStreamos=newObjectOutputStream(fs);

os.writeObject(myFoo);

4、实现序列化(保存到一个文献)的环节

a)MakeaFileOutputStream

java代码

FileOutputStreamfs=newFileOutputStream("foo.serH);

b)MakeaObjectOutputStream

java代码

ObjectOutputStreamos=newObjectOutputStream(fs);

c)writetheobject

java代码

os.writeObject(myObjectl);

os.writeObject(myObject2);

os.writeObject(myObject3);

d)closetheObjectOutpulStreain

java代码

os.close();

5、举例说明

java代码

importjava.io.*;

publicclassBoximplementsSerializable

(

privateintwidth;

privateintheight;

publicvoidset\Vidth(intwidth){

this.width=width;

)

publicvoidsetHcight(intheight))

this.height=height;

)

publicstaticvoidmain(String[]args){

BoxmyBox=newBox();

myBox.setWidth(50);

myBox.setHeight(30);

try(

FileOulpulStreamfs=newFileOutputStreamC^o.ser");

ObjectOutputStreamos=newObjectOutputStream(fs);

os.writeObject(myBox);

os.close();

}catch(Exceptioncx)(

ex.printStackTrace();

)

)

)

6、相关注意事项

a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

c)并非所有的对象都可以序列化,,至于为什么不可以,有很多因素了,比如:

1.安全面的因素,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文献,或

者进行rmi传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

2.资源分派方面的因素,比如socket,thread类,假如可以序列化,进行传输或者保存,也无法对他们

进行重新的资源分配,并且,也是没有必要这样实现。

2选择题

说明:不是太难所以,我只说下大约考试的内容。

1)抽象类可以是final、private嘛?

java类一旦被声明为abstract(抽象类),必须要继承或者匿名(其实匿名也是种继承)才干使用。

而final则是让该类无法被继承,所以final是必然不能和abstract同时声明的

但是private呢?

一个类被声明为private的时候,它当然是内部类,内部类是可以被它的外部类访问到的,所以,可以继承,

private和abstract不冲突。

2)异常能出来的情况有什么?

3)finally块的运用,就是出一道程序,然后让你写出输出的结果来,在finally块中的printin("")不管

如何总是要输出出来的。

4)jsp中的doget。和dopost()方法的作用?

第一:doGct方法是servlet提交报头数据之类的用的,doGet方法提交表单的时候会在url后边显示提交的

内容,正是由于这样所以我们一般对于需要保密的的信息(比如密码等)不用这样的提交方式;并且doGct

方法只能提交256个字符,这就指出了它的使用环境,对于我们传递短的文字信息的时候可以用它,但是

当我们传递的是比较大的媒体文献的时候就不可以使用它了。

doPost则没有这个限制。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行

了,例如在doGet方法中这样写

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsScrvletException,lOExccption{

doPost(request,response);

)

再把业务逻辑直接写在doPost方法中。servlet碰至UdoGct方法调用直接就会去调用doPost由于他们的参数

都同样。并且doGet方法解决中文问题很困难,要写过滤器之类的。

第二:不管是post还是get方法提交过来的连接,都会在service中解决,然后,由service来交由相应的

doPost或doGct方法解决,假如你重写了service方法,就不会再解决doPost或doGet了。不管是post还是

get方法提交过来的连接,都会在service中解决,然后,由service来交由相应的doPost或doGet方法解决,

假如你重写了service方法,就不会再解决doPost或doGct了。

5)数据库中的锁涉及什么?

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时

存取同一数据的情况。若对并发操作不加控制就也许会读取和存储不对的的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出

请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对

此数据对象进行更新操作。

在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。

当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读

取,但不能修改。数据库运用这两种基本的锁类型来对数据库的事务进行并发控制。

根据保护的对象不同,Oracle数据库锁可以分为以下几大类:

DML锁(datalocks,数据锁),用于保护数据的完整性;

DDL锁(dictionarylocks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;

内部锁和闩(internallocksandlatches),保护数据库的内部结构,应用于SGA;

在我们实际应用开发中涉及较多的是DML锁,其他两种的话DBA会更加关心点;

DML锁的目的在于保证并发情况下的数据完整性,重要涉及TM锁和TX锁,其中TM锁称为表级锁,TX

锁称为事务锁或行级锁。

当Oracle执行DML语句时、系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自

动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性

时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁涉及

了SS、SX、S、X等多种模式,在数据库中用0—6来表达。不同的SQL操作产生不同类型的TM锁。如

下图所示:

值锁模式锁描述SQL

0NONE

1NULL空SELECT

2SS(ROW-S)行级共享锁

其他对象只能查询这些数据行SELECTFORUPDATE.LOCKFORUPDATE,

LOCKROWSHARE

3SX(ROW-X)行级排它锁

在提交前不允许做DML操作INSERT、UPDATE、DELETE>

LOCKROWSHARE

4S(SHARE)共享锁CREATEINDEX>LOCKSHARE

5SSX(SZROW-X)共享行级排它锁LOCKSHAREROWEXCLUSIVE

6X(eXclusive)排它锁ALTERTABLE.DROPTABLE、DROPINDEX>

TRUNCATETABLE,LOCKEXCLUSIVE

在数据行上只有X锁(排他锁)。在Oracle数据库中,当一个事务初次发起一个DML语句时就获得一个

TX锁,该锁保持到事务被提交或【可滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个

会话在该条记录上加锁,其他的会话处在等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以

加锁。

在大约了解。racle的锁机制之后,我们来解决几个基本的问题:

1.UPDATE/DELETE操作会将RS锁定,直至操作被COMMIT或者ROLLBACK;

若操作未COMMIT之前其他session对同样的RS做变更操作,则操作会被hold,直至前session的

UPDATE/DELETE操作被COMMIT:

2.session内外SELECT的RS范围

前提:INSERT、UPDATE操作未COMMIT之前进行SELECT;

若在同一session内,SELECT出来的RS会涉及之前INSERT、UPDATE影响的记录;

若不在同一session内,SELECT出来的RS不会涉及未被COMMIT的记录;

3.SELECT....FORUPDATE|OFcols]|NOWAIT/WAIT]|SKIPLOCKED]

OFcols:只锁定指定字段所在表的RS,而没有指定的表则不会锁定,只会在多表联合查询时出现;

NOWAIT:语句不会hold,而是直接返I可错误ORA-00054:resourcebusyandacquirewithNOWAITspecified;

WAITN:语句被holdN秒,之后返回错误ORA-30006:resourcebusy;acquirewithWAITtimeoutexpired;

SKIPLOCKED:不提醒错误,而是直接返回Inorowsselected;

以上几个选项可以联合使用的,比较推荐的有:

SELECT....FORUPDATENOWAIT:对同一RS执行该SQL时,直接返回错误:

SELECT....FORUPDATENOWAITSKIPLOCKED:对同一RS执行该SQL时,直接返回空行;

PS:当RS被LOCK住之后,只对同样请求LOCK的语句有效,对无需LOCK的SELECT语句并没有任

何影响;

6)jsp和serverlet的区别或者是他们的关系?

一,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

中使用它们,就像你使用叩plet同样。

那么,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和Servlel之间的区别实在是不大。

JSP引擎通常架构在Servlet引擎之上,自身就是•个Servlet,把JSP文献转译成Servlet源代码,再调用Java

编译器,编译成Servlet。这也是JSP在第一次调用时速度比较慢的因素,在第一次编译之后,JSP与Servlel

速度相同.下面我们来看看为什么他们在第一次编译后再编译的速度相同:

在整个运营过程中,JSP引擎会检查编译好的JSP(以Servlet形式存在)是否比原始的JSP文献还新,假如是,

JSP引擎不会编译;假如不是,表达JSP文献比较新,就会重新执行转译与编译的过程。

为了有个深刻的了解,我们看一下JSP的运营和开发环境:

浏览器:常见的浏览器有正和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页面第一次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论