java笔试题及答案(公司)_第1页
java笔试题及答案(公司)_第2页
java笔试题及答案(公司)_第3页
java笔试题及答案(公司)_第4页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、精品文档1.web 中的 forward和 redirect 的区别?(前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward() 方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。2. xml 在解释的时候 DOM 和 SAX 协议的区别和含义?DOM: 处理大型文件时其性能下降的非常厉害。这个问题是由DOM

2、 的树结构所造成的, 这种结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档装入内存,适合对 XML的随机访问SAX: 不现于 DOM,SAX是事件驱动型的 XML解析方式。它顺序读取 XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML 文件,适合对 XML 的顺序访问3 说明 JNDI 、 JMS 、 JTA 、 RMI 的意思?JNDI(Java Naming and Directory Interface)是一个应用程序设计的API ,为开发人员提供了查找和访问各种命名

3、和目录服务的通用、统一的接口,类似JDBC 都是构建在抽象层上。JMS ( Java Messaging Service )是 Java 平台上有关面向消息中间件的技术规范,翻译为Java 消息服务。 JMS 支持点对点和发布/订阅两种消息模型。JTA(Java Transaction API)为 J2EE平台提供了分布式事务服务。要用 JTA 进行事务界定,应用程序要调用javax.transaction.UserTransaction 接口中的方法 .RMI 是 Java 的一组拥护开发分布式应用程序的API 。RMI 使用 Java 语言接口定义了远程对象,它集合了Java序列化和 Ja

4、va 远程方法协议 (JavaRemote Method Protocol) 。它大大增强了Java开发分布式应用的能力4.单子模式Public class SignlePrivate Signle()Pirvate static Signle signle = new Signle();Public static Signle gets()Retrun signle;*2public class MyBean private static MyBean instance = null;private MyBean()/do somethingpublic static synchronize

5、d MyBean getInstance()if(instance = null)instance = new MyBean();.精品文档return instance;你是说单例模式是吧,这个单例模式是延迟加载的模式.还有一种就是即时加载,不需要判断是否有实例存在,先自己 new 出一个实例 .5 数据库中 left join的意思,和在什么场合中应用?LEFT JOIN操作用于在任何的FROM 子句中,组合来源表的记录。使用LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。6 ejb

6、中的 sessionbean 和 entitybean的区别和含义?SessionBean 在 J2EE 应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他 EJB 组件。 EntityBean 被用来代表应用系统中用到的数据。对于客户机, SessionBean 是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。对于客户机, EntityBean 是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。7 抽象类和接口的区别1:一个类可以实现任意多的接口,但是最多只能对一个抽象类进行子类化。2:一个抽象类可以包括非抽象方

7、法,而一个接口的所有方法在效果上都是抽象的。3:一个抽象类可以申明并使用变量,而一个接口不行。4:一个抽象类中的方法的访问修饰符可以使public,internal,protected,protected internal,private ,而接口成员的访问修饰符在默认情况下都是public ,而且,在申明接口成员时,不允许使用访问修饰符(甚至不能使用 public )。5:一个抽象类可以定义构造函数,而一个接口不行。8 对象序列化的含义Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该 Byte 流里的数据读出来。重新构造一个相同的对象。这种机制允许你

8、将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。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 上

9、的 S 锁以前 ,其他事务可以再对A 加 S 锁,但不能加 X 锁 ,从而可以读取A, 但不能更新A.10 jsp 和 serverlet 的区别(1).简单的来说Jsp 就是含有Java 代码的 html ,而 servlet 是含有 html 的 Java 代码;(2).Jsp 最终也是被解释为servlet 并编译再执行,Jsp 不过是 servlet 的另一种编写方式;(3).Jsp 擅长表示, servlet 擅长数据处理,在 MVC 三层结构中, Jsp 负责 V (视图), servlet 负责 C(控制),各有优势,各司其职;11. oracle 中数据表的交集怎么表示第一种方

10、法:利用操作符intersectintersect操作符用来合并两个查询,返回两个查询中都存在的记录,即返回两个查询结果的交集,前.精品文档提是两个查询的列的数量和数据类型必须完全相同。举例说明:表 A 的数据结构:中文名称字段名类型长度学号codeC4姓名nameC8表 B 的数据结构:中文名称字段名类型长度学号Student_codeC4姓名Student_nameC8分数scoreN3表 A 的数据为:( '1101 ' , '韩甲 '),( '1102 ' ,'丁乙 ')表 B 的数据为:( '1101 '

11、 , '韩甲 ',99 ),('1102 ' , '丁乙 ',89 ),('1103 ' , '徐静 ' ,94 )在 oracle 中运行以下查询,图1 显示了这个查询的结果:SQL>select code, name from Aintersectselect student_code,student_name from B;图 1 使用 intersect 操作符查询的结果第二种方法: in 子句in 子句可以在子查询中为where 子句计算所得的值创建一个列表。这种方法与前一种方法有所不同的是,前一种

12、方法比较多列但只使用一个intersect就行了,而一个in 子句用来比较两个子查询的一列,比较几列就要使用几个 in 子句。下面举例说明如何取得两个查询的交集。.精品文档仍以和两张数据表为例,在oracle 中运行以下查询,图2 显示了这个查询的结果:SQL>select code,name from Awhere A.code in(select student_code from B)and A.name in(select student_name from B)order by A.code;查询结果如图2 所示。图 2 使用 in 子句查询的结果以上为笔者使用oracle7.

13、3的体会,如有不当之处,请不吝赐教。12 jsp 页面中如何传递参数( 1)直接在 URL请求后添加( 2) jsp:param3)设置 session和 request13 jsp 中的 doget ()和 dopost ()方法的作用?这个两个方法都是 http 协议的方法, doget 用于传输数据量较小 (密码会泄露) ,dopost 数据量较大,14 什么是用例?如何确定用例?在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。一个用例可以看作是系统的一个功能,例如增加用户 , 增加角色 ,查询一个具体的一个事物, 在 Ejb的设计中 ,.精品文

14、档一个 use case跟 Session bean的一个方法是对应的( 使用的 session fasade模式 ), 你说的基础数据管理, 我会把它处理成为一个抽象用例, 因为我认为基础数据这个概念非常的抽象, 什么是真正的基础数据?例如说一个系统中邮政编码算是这个系统的基础数据,那么 " 邮政编码修改 " 这个就应该算是用例了.15 活动图和时序图的区别?时序图主要强调时间的顺序活动图主要强调空间上类的交互16 什么是策略模式?什么情况下使用?策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换Context(应用场景):1 、需要使用Conc

15、reteStrategy提供的算法。2、 内部维护一个Strategy 的实例。3、 负责动态设置运行时Strategy 具体的实现算法。4、负责跟 Strategy之间的交互和数据传递。17 面向接口编程的好处使用接口编程,易于程序扩展,降低程序耦合性。包括结构清晰,类之间通信简单易懂,扩展性好,提高复用性等等。18 事物事务就是一系列的操作,这些操作完成一项任务.只要这些操作里有一个操作没有成功,事务就操作失败 ,发生回滚事件 .即撤消前面的操作 ,这样可以保证数据的一致性 .而且可以把操作暂时放在缓存里 ,等所有操作都成功有提交数据库 ,这样保证费时的操作都是有效操作 .1 简答题3)说

16、明 jndi 、jms 、 jta 、 rmi 的意思?web 容器:给处于其中的应用程序组件(JSP,SERVLET )提供一个环境,使JSP,SERVLET 直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。该容器提供的接口严格遵守 J2EE 规范中的 WEB APPLICATION 标准。我们把遵守以上标准的 WEB 服务器就叫做 J2EE 中的 WEB 容器。EJB 容器: Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB 各种管理功能。只要满足

17、J2EE 规范的 EJB 放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。JNDI :( Java Naming & Directory Interface ) JAVA 命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。JMS:( Java Message Service)JAVA 消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。JTA:( Java Transaction API)JAVA 事务服务。提供各种分布式事务服

18、务。应用程序只需调用其提供的接口即可。JAF:(Java Action FrameWork )JAVA 安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。.精品文档RMI/IIOP: ( Remote Method Invocation /internet 对象请求中介协议) 他们主要用于通过远程调用服务。 例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI 是 JAVA 特有的。4)数据库中left join的意思,和在什么场合中应用?简

19、单说左表全都显示右表可能为空应用场合就是当左表的数据全要右表有就显示没有就不显这个比较细微,我尽量回答。总的来说, 2 种写法,在oracle 里,效率和性能区别不大。如果非要比较的话,大概有以下区别:(+) 和 left join,在检索显示的字段很少的时候,或者干脆就是检索count(*) 的时候,在效率和性能上,是一样,甚至cpucost 都完全一样;但是在检索显示的字段比较多得时候,第一次执行,left join比( + )的效率高;当然,执行第二次之后,由于数据已经到了缓存,区别也不明显了,基本是一致的。6) ejb 中的 sessionbean 和 entitybean 的区别和含

20、义?EntityBean: 主要是指可存储的物件,比如:学生,学校,公司,职员等等。 必须是SerializableSessionBean: 主要是指商业逻辑物件,比如:购物,执行某功能etc.表示的是一种过程SessionBean 又分为:Stateless 和 Stateful 区别就是, Stateful 有状态记忆, Stateless 无状态记忆Message-Driven Bean: 主要是用于做一些JMS message的处理。这一点可以从Message-Driven Bean 的构架里看到:当客户发送一个message 到 JMS,Container 就会从Beans Pool

21、 中把注册了的Message-DrivenBean 调出来并且后台运行.我这里是概述,建议你最好找一本EJB 的书来读.最新的 EJB 的版本是3.07)抽象类和接口的区别(java 经典笔试题中也有)?8)对象序列化的含义?1、序列化是干什么的?简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存 Object States,但是 Java 给你提供一种应该比你自己好的保存对象状态的机制 ,那就是序列化。2、什么情况下需要序列化a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候

22、;c)当你想通过RMI 传输对象的时候;3、当对一个对象实现序列化时,究竟发生了什么?.精品文档在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:Foo myFoo = new Foo();myFoo .setWidth(37);myFoo.setHeight(70);当通过下面的代码序列化之后, MyFoo 对象中的 width 和 Height 实例变量的值(37,70)都被保存到 foo.ser 文件中, 这样以后又可以把它 从文件中读出来, 重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的

23、值,JVM 还要保存一些小量信息,比如类的类型等以便恢复原来的对象。FileOutputStream fs = new FileOutputStream("foo.ser");ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myFoo);4、实现序列化(保存到一个文件)的步骤a) Make a FileOutputStreamjava 代码FileOutputStream fs = new FileOutputStream("foo.ser");b) Make a Obj

24、ectOutputStreamjava 代码ObjectOutputStream os = new ObjectOutputStream(fs);c) write the objectjava 代码os.writeObject(myObject1);os.writeObject(myObject2);os.writeObject(myObject3);d) close the ObjectOutputStreamjava 代码os.close();5、举例说明java 代码public class Box implements Serializable.精品文档private int widt

25、h;private int height;public void setWidth(int width)this.width = width;public void setHeight(int height)this.height = height;public static void main(String args)Box myBox = new Box();myBox.setWidth(50);myBox.setHeight(30);tryFileOutputStream fs = new FileOutputStream("foo.ser");ObjectOutpu

26、tStream os = new ObjectOutputStream(fs);os.writeObject(myBox);os.close();catch(Exception ex)ex.printStackTrace();6、相关注意事项a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable 接口;b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:1.安全方面的原因,比如一个对象拥有private, public 等 field,对于一个要传输的对象,比如写到文件

27、,或者进行 rmi 传输等等,在序列化进行传输的过程中,这个对象的private 等域是不受保护的。2. 资源分配方面的原因,比如 socket, thread 类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。2 选择题说明:不是太难所以,我只说下大概考试的内容。1)抽象类可以是final 、private 嘛?java 类一旦被声明为abstract(抽象类),必须要继承或者匿名(其实匿名也是种继承)才能使用。.精品文档而 final 则是让该类无法被继承,所以final 是必然不能和abstract 同时声明的但是 private 呢?一

28、个类被声明为private 的时候, 它当然是内部类,内部类是可以被它的外部类访问到的,所以,可以继承,private 和 abstract 不冲突。2)异常能出来的情况有什么?3) finally 块的运用,就是出一道程序,然后让你写出输出的结果来,在finally 块中的 println ( “”)不管如何总是要输出出来的。4) jsp 中的 doget ()和 dopost ()方法的作用?第一: doGet 方法是 servlet 提交报头数据之类的用的,doGet 方法提交表单的时候会在url 后边显示提交的内容,正是因为这样所以我们一般对于需要保密的的信息(比如密码等) 不用这样的

29、提交方式;而且 doGet方法只能提交 256 个字符,这就指出了它的使用环境,对于我们传递短的文字信息的时候可以用它,但是当我们传递的是比较大的媒体文件的时候就不能够使用它了。doPost 则没有这个限制。通常我们使用的都是 doPost 方法,你只要在 servlet 中让这两个方法互相调用就行了,例如在 doGet 方法中这样写public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request,respo

30、nse);再把业务逻辑直接写在 doPost 方法中。 servlet 碰到 doGet 方法调用直接就会去调用 doPost 因为他们的参数都一样。而且 doGet 方法处理中文问题很困难,要写过滤器之类的。第二:不管是post 还是 get 方法提交过来的连接,都会在service 中处理,然后,由service 来交由相应的doPost 或 doGet 方法处理, 如果你重写了service 方法,就不会再处理doPost 或 doGet 了。不管是 post 还是get 方法提交过来的连接, 都会在 service 中处理,然后,由 service 来交由相应的 doPost 或 do

31、Get 方法处理,如果你重写了 service 方法,就不会再处理 doPost 或 doGet 了。5)数据库中的锁包括什么?数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。在数据库中有两种基本的锁类型:排它锁( Exclusive Locks ,即 X

32、 锁)和共享锁( Share Locks,即 S 锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。根据保护的对象不同,Oracle 数据库锁可以分为以下几大类:DML 锁( data locks,数据锁),用于保护数据的完整性;.精品文档DDL 锁( dictionary locks ,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩( internal locks and latches),保护数据库的内部结构,应用于SGA ;在我们实际应用开发中

33、涉及较多的是DML 锁,其他两种的话DBA 会更加关心点;DML 锁的目的在于保证并发情况下的数据完整性,主要包括 TM 锁和 TX 锁,其中 TM 锁称为表级锁, TX锁称为事务锁或行级锁。当 Oracle 执行 DML 语句时,系统自动在所要操作的表上申请TM 类型的锁。当 TM 锁获得后,系统再自动申请 TX 类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX 锁相容性时就不用再逐行检查锁标志,而只需检查TM 锁模式的相容性即可,大大提高了系统的效率。TM 锁包括了 SS、SX、 S、 X 等多种模式,在数据库中用0 6 来表示。不同的 SQL 操作产生不同类型的

34、 TM 锁。如下图所示:值锁模式锁描述 SQL0NONE1NULL空 SELECT2SS(ROW-S)行级共享锁其他对象只能查询这些数据行SELECT FOR UPDA TE、 LOCK FOR UPDA TE 、LOCK ROW SHARE3SX(ROW-X)行级排它锁在提交前不允许做DML 操作INSERT 、 UPDA TE、 DELETE 、LOCK ROW SHARE4S(SHARE) 共享锁CREA TE INDEX 、LOCK SHARE5SSX(S/ROW-X)共享行级排它锁LOCK SHARE ROW EXCLUSIVE6X(eXclusive)排它锁ALTER TABLE

35、、DROP TABLE 、 DROP INDEX 、TRUNCATE TABLE 、 LOCK EXCLUSIVE在数据行上只有X 锁(排他锁) 。在Oracle 数据库中,当一个事务首次发起一个DML 语句时就获得一个TX 锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML 语句时, 第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX 锁被释放,其他会话才可以加锁。在大概了解oracle 的锁机制之后,我们来解决几个基本的问题:1.UPDA TE/DELETE 操作会将RS 锁定,直至操作被COMMIT或者 ROLLBACK ;若操作未 C

36、OMMIT之前其他 session 对同样的 RS 做变更操作,则操作会被hold,直至前session的UPDA TE/DELETE 操作被 COMMIT ;2.session内外 SELECT 的 RS 范围前提: INSERT 、 UPDATE 操作未 COMMIT之前进行 SELECT ;若在同一 session 内, SELECT 出来的 RS 会包括之前 INSERT 、 UPDATE 影响的记录;若不在同一 session 内, SELECT 出来的 RS 不会包括未被 COMMIT 的记录;3.SELECT. FOR UPDA TE OF cols NOWAIT/WAIT SK

37、IP LOCKED.精品文档OF cols:只锁定指定字段所在表的RS,而没有指定的表则不会锁定,只会在多表联合查询时出现;NOWAIT :语句不会 hold ,而是直接返回错误ORA-00054: resource busy and acquire with NOWAIT specified ;WAIT N :语句被 hold N 秒,之后返回错误ORA-30006: resource busy; acquire with WAIT timeout expired;SKIP LOCKED :不提示错误,而是直接返回no rows selected;以上几个选项可以联合使用的,比较推荐的有:S

38、ELECT. FOR UPDA TE NOWAIT :对同一 RS 执行该 SQL 时,直接返回错误;SELECT. FOR UPDA TE NOWAIT SKIP LOCKED:对同一 RS 执行该 SQL 时,直接返回空行;PS:当 RS 被 LOCK 住之后,只对同样请求 LOCK 的语句有效,对无需 LOCK 的 SELECT 语句并没有任何影响;6) jsp 和 serverlet 的区别或者是他们的关系?一. Servlet 是什么 ?客户机 / 服务器计算的发展。Java 提供了一整套客户机/服务器解决方案,在这个方案中, 程序可以自动地下载到客户端并执行,这就是applet。但

39、是它仅仅是问题的一半。问题的另一半就是Servlet。servlet 可以被认为是服务器端的applet。 servlet 被 Web 服务器加载和执行,就如同applet 被浏览器加载和执行一样。 servlet 从客户端 (通过 Web 服务器 )接收请求,执行某种作业,然后返回结果。使用servlet 的基本流程如下:·客户端通过HTTP 提出请求 .·Web 服务器接收该请求并将其发给 servlet。如果这个 servlet 尚未被加载, Web 服务器将把它加载到 Java 虚拟机并且执行它。·servlet 将接收该HTTP 请求并执行某种处理。&#

40、183;servlet 将向 Web 服务器返回应答。·Web 服务器将从servlet 收到的应答发送给客户端。由于 servlet 是在服务器上执行, 通常与 applet 相关的安全性的问题并不需实现。要注意的是 Web 浏览器并不直接和 servlet 通信, servlet 是由 Web 服务器加载和执行的。而 servlet 是用 Java 编写的,所以它们一开始就是平台无关的。这样,Java 编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。servlet 还有一些 CGI 脚本所不具备的独特优点: (本人对

41、 CGI 并不是十分了解,所以这些特点不能完全的体会到,这也是摘自论坛的贴子,请见谅)servlet 是持久的。 servlet 只需 Web 服务器加载一次, 而且可以在不同请求之间保持服务( 例如一次数据库连接) 。与之相反, CGI 脚本是短暂的、瞬态的。每一次对CGI 脚本的请求,都会使 Web 服务器加载并执行该脚本。一旦这个 CGI 脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI 脚本的每一次使用,都会造成程序初始化过程(例如连接数据库 )的重复执行。servlet 是与平台无关的。如前所述,servlet 是用 Java 编写的,它自然也继承了Java 的平台

42、无关性。servlet 是可扩展的。由于 servlet 是用 Java 编写的,它就具备了Java 所能带来的所有优点。Java 是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet 自然也具备了这些特征。servlet 是安全的。从外界调用一个servlet 的惟一方法就是通过Web 服务器。这提供了高水平的安全性保障,尤其是在你的 Web 服务器有防火墙保护的时候。setvlet 可以在多种多样的客户机上使用。由于 servlet 是用 Java 编写的,所以你可以很方便地在HTML中使用它们,就像你使用 applet 一样。那么, Servlet 是怎样执行的?怎样

43、来写一个Servlet,它的基本架构是怎么样的?这些问题,将在后面部分给予介绍。二.JSP 与 Servlet现在已经对Servlet 有了大概的了解,现在我们就来说说JSP 和 Servlet 的关系。JSP 是一种脚本语言,包装了Java Servlet 系统的界面,简化了Java 和 Servlet 的使用难度,同时通过扩展JSP 标签 (TAG) 提供了网页动态执行的能力。尽管如此,JSP 仍没有超出Java 和 Servlet 的范围,不仅JSP.精品文档页面上可以直接写Java 代码,而且JSP 是先被译成Servlet 之后才实际运行的。JSP 在服务器上执行,并将执行结果输出到

44、客户端浏览器,我们可以说基本上与浏览器无关。它是与JavaScript 不同的, JavaScript 是在客户端的脚本语言,在客户端执行,与服务器无关。那么 JSP是什么?就是Servlet.JSP与 Servlet 之间的主要差异在于,JSP 提供了一套简单的标签,和HTML 融合的比较好,可以使不了解Servlet 的人可以做出动态网页来。对于Java 语言不熟悉的人( 比如像我 ),会觉得 JSP 开发比较方便。JSP 修改后可以立即看到结果, 不需要手工编译, JSP引擎会来做这些工作; 而 Servelt 缺需要编译,重新启动 Servlet引擎等一系列动作。但是在JSP 中, H

45、TML 与程序代码混杂在一起,而Servlet 却不是这样。也许大家比较混乱了,那么 Servlet 又是什么?下面我们对JSP的运行来做一个简单的介绍,告诉大家怎样来执行一个JSP文件:当 Web 服务器 (或 Servlet 引擎 ,应用服务器 )支持 JSP引擎时, JSP 引擎会照着 JSP的语法,将 JSP 文件转换成 Servlet 代码源文件, 接着 Servlet 会被编译成 Java 可执行字节码 (bytecode),并以一般的 Servlet 方式载入执行JSP语法简单,可以方便的嵌入HTML 之中,很容易加入动态的部分,方便的输出HTML 。在 Servlet 中输出

46、HTML缺需要调用特定的方法,对于引号之类的字符也要做特殊的处理,加在复杂的HTML页面中作为动态部分,比起JSP 来说是比较困难的。除去了转换和编译阶段,JSP 和 Servlet 之间的区别实在是不大。JSP引擎通常架构在Servlet 引擎之上,本身就是一个Servlet,把 JSP 文件转译成Servlet 源代码,再调用 Java编译器,编译成 Servlet。这也是 JSP 在第一次调用时速度比较慢的原因,在第一次编译之后,JSP 与 Servlet速度相同 .下面我们来看看为什么他们在第一次编译后再编译的速度相同:在整个运行过程中, JSP引擎会检查编译好的JSP(以 Servl

47、et 形式存在 )是否比原始的JSP 文件还新,如果是,JSP引擎不会编译 ;如果不是,表示JSP 文件比较新,就会重新执行转译与编译的过程。为了有个深刻的了解,我们看一下JSP 的运行和开发环境:浏览器:常见的浏览器有IE 和 Netscape 两种。数据库:常用的数据库有Oracle,SQL Server,Informix,DB2,Sybase,Access,MySQL等。操作系统:常见的有Windows,Linux, 以及各种 Unix 系统。Web 服务器:常见的有IIS,Apache,Netscape Enterprise Server 等。JSP引擎:一般 JSP 引擎都以 Ser

48、vlet 引擎为基础,并以 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,它又有什么用?何况它的编写又相对复杂。为了把问题说得更清楚一点,我想在这里说一下历

温馨提示

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

评论

0/150

提交评论