1.什么是事务控制?答:事务控制就是将一系列操作当成一个不可拆分的逻辑单元,保证这些操作要么都成功,要么都失败。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。事务是恢复和并发控制的基本单位。事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。事务有两种操作:提交,回滚2.过滤器的作用?过滤器是一个对象,可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来。你可以一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤一个或多个servlet。一个过滤器实现java.servlet.Filter接口并定义它的三个方法:1.voidinit(FilterConfigconfig)throwsServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。2.voiddestroy();在过滤器执行service后被调用。3.VoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException;3.为什么要引入连接池?首先在Web开发中,如果使用JDBC连接数据库,那么每次访问请求都必须建立连接——打开数据库——存取数据库——关闭连接等一系列步骤。但是我们知道数据库的连接打开不仅费时,而且消耗比较多的系统资源。如果进行数据库操作的次数比较少,那么还不至于有多大的影响,但是假如频繁的进行数据库操作,那么系统的性能将会受到很大影响。其次,是造成数据库连接泄漏。数据库连接泄漏这个词是第一次听说,指的是如果在某次使用或者某段程序中没有正确地关闭Connection、Statement和ResultSet资源,那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接的泄漏。数据库连接的资源是宝贵而且是有限的,如果在某段使用频率很高的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。为了解决上述问题,因此就引入了数据库连接池技术。用一句话概括数据库连接池技术那就是负责分配、管理和释放数据库连接。4.JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面%@includefile=”%编译期导入合并成1个Servlet效率较高(用include伪码实现,适用于包含静态页面)jsp:includefile=”动态连接效率低于%@includefile=”%(但它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数)主要就是1个编译期就合成1个Servlet了一个是2个Servlet动态连接(JSP最终就是被容器编译成个Servlet)5.jsp中,session对象存在哪个地方,如何进行存取,存在服务器哪个地方,如何存的?1、session在何时被创建一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用%@pagesession=”false”%关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSessionsession=HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。2、session何时被删除综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的sessionid时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)3、如何做到在浏览器关闭时删除session严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。4、有个HttpSessionListener是怎么回事你可以创建这样的listener去监控session的创建和销毁事件,使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener,而不是相反。类似的与HttpSession有关的listener还有HttpSessionBindingListener,HttpSessionActivationListener和HttpSessionAttributeListener。5、存放在session中的对象必须是可序列化的吗不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在WeblogicServer的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果session中有不可序列化的对象,在session销毁时会有一个Exception,很奇怪。6、如何才能正确的应付客户端禁止cookie的可能性对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL,具体做法参见7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session参见第三小节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。8、如何防止用户打开两个浏览器窗口操作导致的session混乱这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在session里的值是否一致,如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascriptwindow.open打开的窗口,一般不设置这个id,或者使用单独的id,以防主窗口无法操作,建议不要再window.open打开的窗口里做修改操作,这样就可以不用设置。9、为什么在WeblogicServer中改变session的值后要重新调用一次session.setValue做这个动作主要是为了在集群环境中提示WeblogicServersession中的值发生了改变,需要向其他服务器进程复制新的session值。10、为什么session不见了排除session正常失效的因素之外,服务器本身的可能性应该是微乎其微的,虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇到过;浏览器插件的可能性次之,笔者也遇到过3721插件造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。出现这一问题的大部分原因都是程序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。6.%…%和%!…%的区别?%…%用于在JSP页面中嵌入Java脚本%!…%用于在JSP页面中申明变量或方法,可以在该页面中的%…%脚本中调用,声明的变量相当于Servlet中的定义的成员变量7.什么是WEBSERVICE?及它的常用开发框架?WebService就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。WebService所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以WebService可以在任何支持这些标准的环境(Windows,Linux)中使用。优势:(1).跨平台。(2).SOAP协议是基于XML和HTTP这些业界的标准的,得到了所有的重要公司的支持。(3).由于使用了SOAP,数据是以ASCII文本的方式而非二进制传输,调试很方便;并且由于这样,它的数据容易通过防火墙,不需要防火墙为了程序而单独开一个“漏洞”。(4).此外,WebService实现的技术难度要比CORBA和DCOM小得多。(5).要实现B2B集成,EDI比较完善与比较复杂;而用WebService则可以低成本的实现,小公司也可以用上(6).在C/S的程序中,WebService可以实现网页无整体刷新的与服务器打交道并取数。缺点:(1).WebService使用了XML对数据封装,会造成大量的数据要在网络中传输。(2).WebService规范没有规定任何与实现相关的细节,包括对象模型、编程语言,这一点,它不如CORBAwebservice的几种常用框架及开发过程:Net环境IDE为MicrosoftVisualStudio2005Java环境CXFCXF的前身是Xfire,具体内容可参照。IDE为Eclipse3.2(JDK1.5以上)NetBeans由于Sun已经在J2EE5.0中提供了对Jax-ws规范的实现,并且提供了NetBeansIDE对J2EE5.0的支持,使得开发webservice非常简单。前提条件是我们需要到下载NetBeans6.0。官方的下载文件中已经集成了Tomcat6.0和J2EE5.0。Axis比较?开发过程比较1、NetBeansIDE基本可以与.Net的开发工具VS2005相媲美,后者有内嵌的测试服务器,前者也可以使用内嵌的glassfish。2、CXF相对而言也比较简单(依赖于与Spring的集成),Axis要更复杂些,且难以掌握?性能比较1、CXF对于大数据量的处理,性能要优于NetBeansIDE开发的webservice;小数据量的处理两者差不2、对于.Net开发的webservice的性能很难与Java环境下开发的webservice进行性能比较,由于应用服务器不相同(前者依赖于IIS的支持)。?结论考虑到服务的性能和现有应用的整合,使用CXF进行webservice开发是比较适中的选择。从简单易用方面考虑,可以使用NetBeans进行上手入门。从与之前作的webservice的兼容方面考虑,可以采用Axis,只有它还支持RPC的调用方式。8.请具体说J2EE是怎样分层的?1.客户端层(ClientTier)客户端层用来实现企业级应用系统