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

下载本文档

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

文档简介

1.web中的forward和redirect的区别?(前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。2. xml在解释的时候DOM和SAX协议的区别和含义?DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问3说明JNDI、JMS、JTA、RMI的意思?JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,翻译为Java消息服务。JMS支持点对点和发布/订阅两种消息模型。JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法.RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote 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 something public static synchronized MyBean getInstance() if(instance = null) instance = new MyBean(); return instance; 你是说单例模式是吧,这个单例模式是延迟加载的模式.还有一种就是即时加载,不需要判断是否有实例存在,先自己new出一个实例. 5数据库中left join的意思,和在什么场合中应用?LEFTJOIN操作用于在任何的FROM子句中,组合来源表的记录。使用LEFTJOIN运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。6 ejb中的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.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中数据表的交集怎么表示第一种方法:利用操作符intersectintersect操作符用来合并两个查询,返回两个查询中都存在的记录,即返回两个查询结果的交集,前提是两个查询的列的数量和数据类型必须完全相同。举例说明:表A的数据结构:中文名称字段名类型长度学号 codeC 4姓名 nameC 8表B的数据结构:中文名称 字段名 类型 长度学号 Student_code C 4姓名 Student_nameC 8分数 scoreN 3表A的数据为:(1101 ,韩甲),(1102 ,丁乙)表B的数据为:(1101 ,韩甲,99),(1102 ,丁乙,89),(1103 ,徐静,94)在oracle中运行以下查询,图1显示了这个查询的结果:SQLselect code, name from Aintersectselect student_code,student_name from B;图1使用intersect操作符查询的结果 第二种方法: in子句in子句可以在子查询中为where子句计算所得的值创建一个列表。这种方法与前一种方法有所不同的是,前一种方法比较多列但只使用一个intersect就行了,而一个in子句用来比较两个子查询的一列,比较几列就要使用几个in子句。下面举例说明如何取得两个查询的交集。 仍以和两张数据表为例,在oracle中运行以下查询,图2显示了这个查询的结果:SQLselect 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.3的体会,如有不当之处,请不吝赐教。 12 jsp页面中如何传递参数(1)直接在URL请求后添加(2)jsp:param3)设置session和request13 jsp中的doget()和dopost()方法的作用?这个两个方法都是http协议的方法,doget用于传输数据量较小(密码会泄露),dopost数据量较大,14什么是用例?如何确定用例?在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。一个用例可以看作是系统的一个功能,例如增加用户,增加角色,查询一个具体的一个事物,在Ejb的设计中,一个use case跟Session bean的一个方法是对应的(使用的session fasade模式),你说的基础数据管理,我会把它处理成为一个抽象用例,因为我认为基础数据这个概念非常的抽象,什么是真正的基础数据?例如说一个系统中邮政编码算是这个系统的基础数据,那么邮政编码修改这个就应该算是用例了.15活动图和时序图的区别?时序图主要强调时间的顺序 活动图主要强调空间上类的交互16什么是策略模式?什么情况下使用? 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换Context(应用场景): 1、需要使用ConcreteStrategy提供的算法。2、 内部维护一个Strategy的实例。3、 负责动态设置运行时Strategy具体的实现算法。4、负责跟Strategy之间的交互和数据传递。17面向接口编程的好处使用接口编程,易于程序扩展,降低程序耦合性。包括结构清晰,类之间通信简单易懂,扩展性好,提高复用性等等。18事物事务就是一系列的操作,这些操作完成一项任务.只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件.即撤消前面的操作,这样可以保证数据的一致性.而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作.1简答题3)说明jndi、jms、jta、rmi的意思?web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。4)数据库中leftjoin的意思,和在什么场合中应用?简单说 左表 全都显示 右表可能为空 应用场合 就是当 左表的数据全要 右表有就显示 没有就不显这个比较细微,我尽量回答。总的来说,2种写法,在oracle 里,效率和性能区别不大。如果非要比较的话,大概有以下区别:(+) 和 left join ,在检索显示的字段很少的时候,或者干脆就是检索count(*)的时候,在效率和性能上,是一样,甚至cpucost都完全一样;但是在检索显示的字段比较多得时候,第一次执行,left join 比(+)的效率高;当然,执行第二次之后,由于数据已经到了缓存,区别也不明显了,基本是一致的。6)ejb中的sessionbean和entitybean的区别和含义?EntityBean: 主要是指可存储的物件, 比如: 学生,学校, 公司, 职员 等等。 必须是 Serializable SessionBean: 主要是指商业逻辑物件, 比如: 购物, 执行某功能 etc.表示的是一种过程SessionBean 又分为: Stateless 和 Stateful 区别就是,Stateful 有状态记忆,Stateless 无状态记忆Message-Driven Bean: 主要是用于做一些JMS message的处理。这一点可以从Message-Driven Bean 的构架里看到: 当客户 发送一个 message 到 JMS,Container 就会从 Beans Pool 中把注册了的Message-Driven Bean 调出来并且后台运行 . 我这里是概述,建议你最好找一本EJB的书来读 .最新的EJB的版本是3.07)抽象类和接口的区别(java经典笔试题中也有)?8)对象序列化的含义?1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;3、当对一个对象实现序列化时,究竟发生了什么?在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:Foo myFoo = new Foo(); myFoo .setWidth(37); myFoo.setHeight(70); 当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。FileOutputStream fs = new FileOutputStream(foo.ser); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(myFoo); 4、实现序列化(保存到一个文件)的步骤a)Make a FileOutputStream java 代码FileOutputStream fs = new FileOutputStream(foo.ser); b)Make a ObjectOutputStream java 代码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 代码import java.io.*; public class Box implements Serializable private int width; 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); try FileOutputStream fs = new FileOutputStream(foo.ser); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(myBox); os.close(); catch(Exception ex) 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块中的println(“”)不管如何总是要输出出来的。4)jsp中的doget()和dopost()方法的作用?第一:doGet方法是servlet提交报头数据之类的用的,doGet方法提交表单的时候会在url后边显示提交的内容,正是因为这样所以我们一般对于需要保密的的信息(比如密码等)不用这样的提交方式;而且doGet方法只能提交256个字符,这就指出了它的使用环境,对于我们传递短的文字信息的时候可以用它,但是当我们传递的是比较大的媒体文件的时候就不能够使用它了。doPost则没有这个限制。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行了,例如在 doGet方法中这样写 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response); 再把业务逻辑直接写在doPost方法中。servlet碰到doGet方法调用直接就会去调用doPost因为他们的参数都一样。而且doGet方法处理中文问题很困难,要写过滤器之类的。第二:不管是post还是get方法提交过来的连接,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了。不管是post还是get方法提交过来的连接,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了。5)数据库中的锁包括什么?数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构,应用于SGA;在我们实际应用开发中涉及较多的是DML锁,其他两种的话DBA会更加关心点;DML锁的目的在于保证并发情况下的数据完整性,主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用06来表示。不同的SQL操作产生不同类型的TM锁。如下图所示:值 锁模式 锁描述 SQL0 NONE 1 NULL 空 SELECT2 SS(ROW-S) 行级共享锁其他对象只能查询这些数据行 SELECT FOR UPDATE、LOCK FOR UPDATE、LOCK ROW SHARE3 SX(ROW-X) 行级排它锁在提交前不允许做DML操作 INSERT、UPDATE、DELETE、LOCK ROW SHARE4 S(SHARE) 共享锁 CREATE INDEX、LOCK SHARE5 SSX(S/ROW-X) 共享行级排它锁 LOCK SHARE ROW EXCLUSIVE6 X(eXclusive) 排它锁 ALTER TABLE、DROP TABLE、DROP INDEX、TRUNCATE TABLE、LOCK EXCLUSIVE在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。在大概了解oracle的锁机制之后,我们来解决几个基本的问题: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. FOR UPDATE OF cols NOWAIT/WAIT SKIP LOCKEDOF 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;以上几个选项可以联合使用的,比较推荐的有:SELECT. FOR UPDATE NOWAIT:对同一RS执行该SQL时,直接返回错误;SELECT. FOR UPDATE NOWAIT SKIP LOCKED:对同一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编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。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是一种脚本语言,包装了Java Servlet系统的界面,简化了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,SQL Server,Informix,DB2,Sybase,Access,MySQL等。 操作系统:常见的有Windows,Linux,以及各种Unix系统。 Web服务器:常见的有IIS,Apache,Netscape Enterprise Server等。 JSP引擎:一般JSP引擎都以Servlet引擎为基础,并以Servlet的形式出现。同时,在各种免费和商业引擎的实现中,Servlet引擎和Jsp引擎通常也是一起出现,我们成为Servlet/

温馨提示

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

评论

0/150

提交评论