资源描述
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 Signle{
Private Signle(){
}
Pirvate static Signle signle = new Signle();
Public static Signle gets(){
Retrun signle;
}
}
************************2
public 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的意思,和在什么场所中应用?
LEFT JOIN操作用于在任何的 FROM 子句中,组合起源表的统计。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包括了从第一个(左边)开始的两个表中的所有统计,虽然在第二个(右边)表中并没有相符值的统计。
6 ejb中的sessionbean和entitybean的区分和含义?
SessionBean在J2EE应用程序中被用来完成某些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一个非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一个持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由既有企业应用程序实现的实体。
7抽象类和接口的区分
1:一个类能够实现任意多的接口,不过最多只能对一个抽象类进行子类化。
2:一个抽象类能够包括非抽象措施,而一个接口的所有措施在效果上都是抽象的。
3:一个抽象类能够申明并使用变量,而一个接口不行。
4:一个抽象类中的措施的访问修饰符能够使public,internal,protected,protected internal,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中数据表的交集怎么表示
第一个措施:利用操作符intersect
intersect操作符用来合并两个查询,返回两个查询中都存在的统计,即返回两个查询成果的交集,前提是两个查询的列的数量和数据类型必须完全相同。
举例阐明:
表A的数据结构:
中文名称
字段名
类型
长度
学号
code
C
4
姓名
name
C
8
表B的数据结构:
中文名称
字段名
类型
长度
学号
Student_code
C
4
姓名
Student_name
C
8
分数
score
N
3
表A的数据为:
('1101 ','韩甲'),('1102 ','丁乙')
表B的数据为:
('1101 ','韩甲',99),('1102 ','丁乙',89),('1103 ','徐静',94)
在oracle中运行如下查询,图1显示了这个查询的成果:
SQL>select code, name from A
intersect
select student_code,student_name from B;
图1使用intersect操作符查询的成果
第二种措施: in子句
in子句能够在子查询中为where子句计算所得的值创建一个列表。这种措施与前一个措施有所不一样的是,前一个措施比较多列但只使用一个intersect就行了,而一个in子句用来比较两个子查询的一列,比较几列就要使用几个in子句。下面举例阐明怎样取得两个查询的交集。
仍以A和B两张数据表为例,在oracle中运行如下查询,图2显示了这个查询的成果:
SQL>select code,name from A
where 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:param
3)设置session和request
13 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)数据库中left join的意思,和在什么场所中应用?
简单说 左表 全都显示 右表也许为空
应用场所 就是当 左表的数据全要 右表有就显示 没有就不显
这个比较细微,我尽也许回答。
总的来说,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.0
7)抽象类和接口的区分(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 object
java 代码
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代码
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等多个模式,在数据库中用0-6来表示。不一样的SQL操作产生不一样类型的TM锁。如下图所示:
值 锁模式 锁描述 SQL
0 NONE
1 NULL 空 SELECT
2 SS(ROW-S) 行级共享锁
其他对象只能查询这些数据行 SELECT FOR UPDATE、LOCK FOR UPDATE、
LOCK ROW SHARE
3 SX(ROW-X) 行级排它锁
在提交前不允许做DML操作 INSERT、UPDATE、DELETE、
LOCK ROW SHARE
4 S(SHARE) 共享锁 CREATE INDEX、LOCK SHARE
5 SSX(S/ROW-X) 共享行级排它锁 LOCK SHARE ROW EXCLUSIVE
6 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 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;
以上几个选项能够联合使用的,比较推荐的有:
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/JSP引擎,或从某种成为JSP引擎。
JSP引擎是能够提供JSP和Servlet运行支持并对其生存周期进行管理的系统级实体。
在JSP页面第一次被祈求时,JSP引擎会将JSP原始文献转换成Servlet源代码,然后调用Java编译器,编译成Servlet,并在Servlet引擎中执行。当再次有祈求的时候,JSP引擎会见差异编译好的JSP是否比本来的JSP原始文献要新,假如是,运行Servlet;假如不是,表示文献已经更新的了,就会从新执行转换和编译的过程。
说到这里,也基本把JSP和Servlet的关系说清楚了,从我的感觉上看用JSP就能够了,简单又以便,又能够和Bean 很好的兼容使用,功效又很强大,为何又出现了Servlet,它又有什么用?何况它的编写又相对复杂。为了把问题说得更清楚一点,我想在这里说一下历史,顺便再讲一下为何还要用Servlet,Servlet的好处是什么。
7)oracle中数据表的交集怎么表示?
8)jsp页面中怎样传递参数或是有哪些措施?
sp中的参数传递
1:利用表单来传递值:
<form action="target.jsp"> <input type=text name="usename" value="tom"></form>
2:l利用隐藏字段来传递值
<form action="target.jsp"> <input type=hidden name="test" value="test"></form>
3:利用cookie对象来传递
Cookie cookie=new Cookie("my","liuliu")
cookie.s
展开阅读全文