EJB
1:EJB:
答: Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问 (跨进程、跨计算机) 。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
答:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
RMI:(Remote Method Invocation)远程方法调用
答:RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
2:EJB种类、作用
答: Entity Bean——用于描述一个永久的对象。
Session Bean——描述任务或者工作流的模型,并且协调Bean之间的交互。
Message-Driver Bean——用在基于J2EE应用程序中处理异步JMS消息。
3:实体bean,CMP,BMP写法区别?
CMP entity bean不需要在 bean中编写数据库操作的代码;可以让容器做这件事。
BMP entity bean在bean类中直接编写数据库调用,以及对固定存储的任意类型的访问,来管理bean的持久性。
4:Find与Select方法的区别?
Finder Select
返回值 单对象或者集合,是该bean类型的EJBObject(s),EJBLocalObject(s). 单个或者多个(集合或集)对象.是该bean类型或CMR相关类型EJBObject(s)或EJBLocalObject(s)也可能是CMP(域),CMP的集合或一个CMR域.
声明位置 在远程和/或本地home接口中 Bean类中的抽象方法
方法名 FindXxx() EjbSelectXxx—bean类
可见度 公开给客户端 面向entity bean类内部,供其他bean方法使用
实例 Bean池任意随机bean实例 当前实例,但若调用来自home方法,则为任意随机实例.
5:主接口方法的定义与写法?
答: 生命周期方法 建方法-该方法的返回值是bean的组件接口,写法为creatXxx
无状态session bean必须个且仅有一个无参的创建方法.
有状态session bean必须含有至少一个创建方法.Entity bean可以有0至多个创建方法.
Finder方法-Finder方法对于entity bean有效,通过它可以在数据库中查找到entity bean对应的持久性数据.每一个entity bean的home接口必须有一个findByPrimaryKey方法,并以实体的主键为参数.可以定制Finder方法.Home方法-Home方法也仅对entity bean有效.Home方法能够返回任意类型的序列化对象,但并不实际生成bean的实例.
6:主接口与组件接口的区别?
答: 主接口提供EJB客户端对bean的访问.定义了bean的生命周期方法,并提供了bean的基本生命周期管理功能,如创建,删除,查找.message drivern bean不含有home接口.组件接口是由enterprise bean的客户端用来取得bean的访问能力.它定义了对于客户端可见的业务方法.组件接口中的业务方法必须符合bean类中的实现.
7、JMS消息传递的方式?
答: 点到点(point-to-point)消息通过队列进行发送.发布与订阅(publish-and-subscribe,pub/sub)消息通过标题传递.
8、EJB客户端访问后台EJB的代码?
答: p192,p193
9、有状态session bean与无状态session bean的区别?
答:stateful session bean维护客户端会话状态.它们必须属于一个且只属于一个客户端.激活/钝化,开销大.stateless session不维护一个客户端的会话状态它们被放入实例池中,因此可被多个用户共用,开销小,效率高。
10、本地视图与远程视图的区别?
答: 远程视图-它的想法就是远程调用将在两台不同JVM之间执行.远程调用这些操作使得相关网络开销会更高与对象的位置无关.也不会在乎是否在一个JVM.
本地视图-它的想法就是本地调用将在相同的JVM中执行.没有网络开销.操作效率更高,因为客户端使用本地对象调用bean上的服务,限制在本地实现中,而且不需要做到与位置无关.
11:CMT事物属性
Mandatory-当使用这个值时,bean方法被调用时必须有一个事务已经处在运行中.
Never-如果在现有事务中调用此bean,容器将抛出java.rmi.RemotException.
Required-bean方法必须总是在事务上下文中执行.
RequiresNew-当方法被调用的时候,bean总会需要启动一个新的事务
Supports可以参与到正在运行的事务中,但这个事务并不是必须的.
Not Supported-该值意味着在事务中bean或者方法根本不能被调用.
12:事务属性ACID
答:原子性—— 一个事务要么完全执行,要么根本不执行。
一致性—— 一个事务在它完成后不能留下系统的不一致性。
隔离性—— 所有的事务不许允许在执行的时候不受其他进程或者事务的干涉。
持久性—— 在事务期间,所有提交的变更数据必须写入持久的数据存储器,并且应该能在硬件和软件失效中保存下来。
13:实体Bean的三个状态:
答: no-state——Bean实例还没有创建。
pooled ——Bean实例被创建,但还没有和一个EJB Object关联。
ready ——与EJB Object相关联。若断开关联则回到pooled。
14:JMS、JMS消息模型
答:Java Message Service(JMS)是一个JAVA API,用来访问面向消息中间件(MOM)服务。JMS为Java程序生成、发送、接收和读取异步消息提供通用的方法。
JMS模型:点到点和发布与订阅
point-to-point——消息通过队列进行发送。消息由消息生产者(客户端)放入队列中。消息消费者有责任从队列中取出消息。当给定的消息只能被给定的消费者接收时,使用P2P。这种情况下,该给定信息只有一个消费者。
Publish-and-subscribe(简称pub/sub)——消息通过标题传递。由生产者将消息发布为标题。消息可以被任何订阅该标题的消费者收到。通过这种方法,一个消息可以被多个消费者接收或处理。
15:EJB客户端类型
答:①Session bean ②servlet ③java应用 ④Java Applet ⑤非Java客户端
16:ORM
答:ORM对象-关系映射(Object-Relation Mapping)模式是指在单个组件中负责所有实体域对象的持久化,封装数据访问细节
18:说出SessionBean和EntityBean的区别
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
19:StatefulBean和StatelessBean的区别。
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。
21:EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。
EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。
EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
22.EJB有哪些角色和对象
一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator)
三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类
25.EJB需直接实现它的业务接口或Home接口吗,请简述理由。
远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。
26.在J2EE内,WAR和EAR文件分别代表什么。
WAR:Web归档;包含一个web工程所有组件的压缩文件。
EAR:企业归档;包含一个企业应用所有组件的压缩文件。
Hibernate
1.Hibernate的检索方式
答:①导航对象图检索 ②OID检索 ③HQL检索 ④QBC检索 ⑤本地SQL检索
3.持久化对象的三种状态,代表含义。
临时状态——刚用new语句创建,未被持久化,不处于session的缓存中。
持久化状态——已经被持久化,处于session的缓存中。
游离态——已经被持久化,但不处于session的缓存中。
4、三种检索策略是什么,分别适用于哪种场合?
答:立即检索——优点:对应用程序完全透明,缺点:select语句数目多。适用:类级别。
延迟检索——优点: 由应用程序决定加载哪些对象,可以避免执行多余的select语句以及避免加载不需要访问的对象,节省内存空间,提高检索效率。
缺点: 应用程序如果要访问游离态的代理类实例,必须保证它在持久化时已经被初始化。
适用: 一对多或多对多关联。应用程序不需要立即访问或者根本不会访问的对象。
迫切左外连接检索:
优点:对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以方便的从一个对象导航到另一个与它相关联的对象。使用了外连接,select语句数目少。
缺点:可能会加载程序不许要访问的对象。复杂的数据库表连接形象检索性能。
适用:一对一或多对一关联。应用程序需要立即访问的对象。数据库系统具有良好的表连接性能。
4、ORM解决的不匹配问题(域模型与关系模型之间存在的不匹配)
答: 域模型是面向对象的,关系模型是面向关系的。
域模型中有继承关系,关系模型中不能直接表示继承关系。
域模型中有多对多关联关系,关系模型中通过连接表来表示多对多关联关系。
域模型中有双向关联关系,关系模型中只有单向参照关系,而且总是many参照one方。
域模型提倡精粒度模型,关系模型提倡粗粒度模型。
5、映射继承关系的三种方式?P 424
答:(1)继承关系树的每个具体类对应一张表:在具体类对应的表中,不仅包含和具体类属性对应的字段,还包括与具体类的父类属性对应的字段。
(2)继承关系树的根类对应一张表:在根类对应的表中,不仅包括根类属性对应的字段,
还包括根类的所有子类属性对应的字段。
(3)继承关系树中的每个类对应一张表,每个表中只包括和这个类本身属性对应的字段,子类的表参照父类对应的表。
6、Session的find()方法以及Query接口的区别。
答案Session类的find()方法以及Query接口都支持HQL检索方式。这两者的区别在于,前者只是执行一些简单HQL查询语句的便捷方法,它不具有动态绑定参数的功能,而且在Hibernate3.x版本中,已经淘汰了find()方法;而Query接口才是真正的HQL查询接口,它提供了以上列出的各种查询功能。
7.ibernate的配置文件(hibernate.properties)中 hibernate.show_sql=true/flase
在开发阶和测试段应设置为()在发布阶段应设置为();true\false
8.映射一对多双向关联关系中设置SET元素:
请写出级联保存和更新、级联删除应在set元素中需要设置那些子元素?(标明关系、避面重复执行多余SQL语句)
Name cascade key column one-to-many inverse
9.list要的实现类有那些? 并按照存储结构、机制简单的说一下。
LinkedList、ArryList、Vector。
LinkedList 采用链表数据结构、ArryList代表大小可变的数组。
Vector与ArryList功能比较相似,区别在于Vector采用同步、ArryList没有采用。
11.持久化类的类名是Customer.java,写出相应的映射文件名 。
答案:Customer.hbm.xml
13. Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。
14.请简述Session的特点有哪些?
(1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
(2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
(3)在Session 中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。
12、Hibernate中采用XML文件来配置对象-关系映射的优点有那些?
答案:Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。软件开发人员可以独立设计域模型,不必强迫遵守任何规范。数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。
13、在Hibernate应用中Java对象的状态有哪些?
1临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。
2持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。
3游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。
14、 叙述Session的缓存的作用
(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。
(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。
15、 比较Hibernate的三种检索策略优缺点;
1立即检索;
优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;
缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间;
2延迟检索:
优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间;
缺点:应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化;
3 迫切左外连接检索
优点:1对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。2使用了外连接,select语句数目少;
缺点:1 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;2复杂的数据库表连接也会影响检索性能;
16、 多个事务并发运行时的并发问题有哪些?
答案 第一类丢失更新;脏读;虚读;不可重复读;第二类丢失更新;
18、session的清理和清空有什么区别?
session清理缓存是指按照缓存中对象的状态的变化来同步更新数据库;清空是session关闭;
19.请简述Session的特点有哪些?
(1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
(2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
(3)在Session 中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。
Jsp&servlet
1 三个Statment区别,用法
Statment,基本的;PreparedStatement是可编译的,提高效率,callablestatment,存储过程
2 Cookie
答:临时cookie存在于内存中,(公话),长时cookic存在于硬盘上长时coolkie和临时cookie 路径问题
3 servlet调试方式几种方法
答:使用打印语句,使用TOMCAT日志,返回错误页面,使用IDE集成,重起服务器,直接查看HTML源代码,分别处理请求和响应数据。
4.Cookie 与session 的区别是:session为短对话,Cookie可以设置任意时间的有效期。
5.Get请求和Post请求区别
答:a、Post是通过Http中的Post机制将表单中的数据提交道Action所制定的程序Get方法是通过Url请求来提交表单数据的。
b.Get适用于传输数据量小于1K数据,执行效率高。Post传输数据量较大,但也有限量。
6. servlet生命周期
答: Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init, service 和 destroy 方法表达。
描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法
7、Servlet和Jsp的区别?
答:Servlet是直接执行的文件Jsp是要被通过编译形成Servlet后才执行。
8.JSP构架模型
Model1:纯jsp 维护难,代码可复用性差
Model2:jsp+javabean 在jsp中使用usebean标签,代码在jsp中本质同Model1
Mvc:jsp+servlet+javabean
10.四大共享范围
答:a、page 当前页面。
b、session 同一个网站内。
c、request 从上一页到下一个页面。
d、application 同一个网站内。
11.MVC——如何理解MVC
答: MVC是Model-View-Controller的简写。
"Model" 代表的是应用的业务逻辑 (通过JavaBean,EJB组件实现),
"View" 是应用的表示面(由JSP页面产生),
"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
11. JSP生命周期
12、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,一定不会检查所含文件的变化,适用于包含静态页面
13. Forword和SendRedirect区别
答: 前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。但在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
14. 从 BeanFactoy或 ApplicationContext是通过什么模式取得实例的?如果要取得多个实例在配制文件中要怎样做映射
答:是通过单态模式取得实例的,在配制文件中可以改,好像是isthread...设成false
18、如何设置/取得Bean 中的属性值?
答:设置属性值<jsp:setProperty name=”haha”,property=”haha的属性” value=”变量值”/>
< jsp:setProperty name=”haha”,property=”*” />获取从上一个表单中提交过来的,与Bean中变量名字相同的所有属性.
取得属性值:<jsp:getProperty name=”haha” property=”bean的属性”/>
相当于:<%=getA()%>
19、JavaBean的使用:
<jsp:useBean id=”name” class=”sist.md5” scope=”page”/>或者<jsp:useBean id=”name” class=”sist.md5” scope=”page”></jsp:useBean>
20、实现页面跳转的两种方法:
答:a、<jsp:forward page=”for2.jsp”/> b、<%response.sendRedirect(“for2.jsp”);%>
21、include指令标签:
<%@include file=”inc1.jsp”%> 简单的代码复制。
include动作标签:<jsp:include page =”inc2.jsp”>获取inc2.jsp的执行结果。
22、页面之间的值传递:
答:a、设置Session 变量:session.setAttribute(“name”,”sist”);
获取Session 变量:session.getAttribute(“name”);
b、地址方式传递:show.jsp?id=变量值
24、获取session ID: <%=session.getId()%>;判断session是否有效:session.isNew();
25、使用Cookie对象
答:Cookie ck=new Cookie(“name”,”sist”);
写入:response.addCookie(ck);
读取:Cookie[] ck=request.getCookies();
If(ck==null)
for(int a=0;a<ck.length;a++)
{
If(“name”.equals(ck[a].getName()))
Out.print(ck[a].getValue());
}
26、什么是servlet:在web容器中运行的服务器端JAVA程序,主要用于响应HTTP请求。Servlet一般用于MVC中的控制器部分。
27、什么是servlet容器:用来管理servlet生命周期的应用程序如(tomcat)。
28、什么是JSP Page:java server page 是servlet的扩展,强调web页面表达,编译后是一个类servlet。
29、JSP标签
动作标签:jsp:include jsp:forword jsp:usebean jsp:set/get Property
指令标签:<%@page……%> <%@include…..%> <%@taglib…..%>
30、servlet中如何
A、从HTML表单中获得参数
request.getParameterNames();enumer;
request.getParameter(); String
b、如何获得请求头部的信息
Enumeration enumer=request.getHeaderNames();
While(enumer. HasMoreElements())
{
String header= enumer.next();
String result=request.getHeader(header);
Out.print(result);
}
C、如何获得客户cookie的信息
request.getCookies();array[]
d、如何设置response的头部信息
response.setHeader();
e、如何设置响应的content type
response.setContentType(“text/html charset=utf-8”);
f、如何获得I/O流、text流、二进制流
g、如何从当前的servlet重定向到其他的URL
response.sendRedirect(“url”)
RequstDispatcher rd=request.get RequstDispatcher(“url”)
Rd.forword(request,response);
h如何向客户端写cookie
Cookie cookie=new Cookie(“object”,”jklj”);
Cookie.setMaxAge(时间);
Response.addCookie(cookie);
31、描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的
服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法。
32、如何创建Request Dispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描述如何利用request来存状态,以及与其它保存状态方法有什么区别
RequstDispatcher rd=request.get RequstDispatcher(“url”)
Rd.forword(request,response);
Request.setAttribute(“object”,”内容”);
一旦产生响应request的生命周期就结束了
33、如何在web.xml中配置servlet定义
<servlet>
<servlet-name>name</servlet-name>
<servlet-class>package</servlet-class>
</servlet>
映射
<servlet-mapping>
<servlet-name>name</servlet-name>
<url-patten>/patten</url-patten>
</servlet-mapping>
34、获得ServletConfig对象
ServletConfig sc=getServletConfig();
35、如何获得servletContext对象
servletContext sc=getservletContext();
36、<html><body>
<a href=”/servlet/HelloServlet”>POST</a>
</body></html>
调用servlet时采用了doPost、doGet、doForm、doHref中的哪个方法
doGet方法
37、说明如下的web的资源应该放在web容器中的什么目录下,静态页面JSP、servlet class、web.xml、Tag libraries、JAR File、java class以及需要保护的资源文件
tomcat容器 web.xml, Tag libraries: \webapps\工程名\WEB-INF
servlet,javaclass: \webapps\工程名\WEB-INF\classes \
jar: \webapps\工程名\WEB-INF\lib\
38、描述request session web application的区别,创建监听器类来监听每个scope的生命周期
生命周期不同request产生响应时生命周期结束,session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束。Webapplication容器重启、手动清除
40、JSP的常用指令
<%@page language="java" contenType="text/html;charset=gb2312" session="true" buffer="64kb" autoFlush="true" isThreadSafe="true" info="text" errorPage="error.jsp" isErrorPage="true" isELIgnored="true" pageEncoding="gb2312" import="java.sql.*"%>
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)
<%@include file="filename"%>
<%@taglib prefix="c"uri="http://......"%>
41、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
42、四种会话跟踪技术
会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
jdbc
1 JDBC连接数据库6步
1. Load the JDBC Driver
2. Establish the Database Connection
3. Create a Statement Object
4. Execute a Query
5. Process the Results
6. Close the Connection
2 事务的4大特性
答:原子性A,一致性C,隔离性I,永久性D
3.select count(*) from student 和select count(id) from student 之间的区别。
答案:
select count(*) 统计所有学生的记录个数,包括空记录。
Select count(Id) 统计所有学生的记录个数,不包括null记录。
4假设现在有表system.table1,表中有三个字段:id(数值型)、name(字符型)、age(数值型)写出SQL语句完成如下功能:在表中查出年龄大于20,且名字以“王”开头的记录,并且按照年龄的倒叙排列出来(年龄大的在前面)。
答案:Select * from system.table1 where age>20 and name like ‘王%’ order by age DESC;
5 .创建CUSTOMERS表,字段为:ID:(非空,主键)bigint,NAME:(非空)varchar,AGE:int类型;创建ORDERS表,字段为:ID:(非空,主键,)bigint,ORDER_NUMBER:(非空)varchar,PRICE:double,CUSTOMER_ID :(外键)bigint,设置级连删除;
答案:create table CUSTOMBERS(
ID bigint not null,
NAME varchar(15),
AGE int,
primary key (ID)
);
create table ORDERS(
ID bigint not null,
ORDER_NUMBER varchar(15) not nulll,
PRICE double precision,
CUSTOMER_ID bigint,
primary key(ID),
);
alter table ORDERS add constraint FK_CUSTOMER foreign key (CUSTOMER_ID) references CUSTOMERS(ID) on delete cascade;
6.使用左外连接查询,ORDERS 和 CUSTOMERS 表,
答案:select c.ID, o.CUSTOMER_ID,c.NAME, o.ID ORDER_ID,ORDER_NUMBER from CUSTOMERS c left outer join ORDERS o no c.ID=o.CUSTOMER_ID;
29 .简述数据库事务的生命周期?(可画流程图)
答案:
7.delete from tablea & truncate table tablea的区别
truncate 语句执行速度快,占资源少,并且只记录页删除的日志;
delete 对每条记录的删除均需要记录日志
Struts
1. 简述Struts框架的初始化流程。
对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet
ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。
在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。
其中,Action扮演了真正的控制逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。
2. 简述Struts框架响应客户请求的工作流程
1. 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
2. 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
3. 根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
4. 如果ActionForm的validate()方法返回null或返回一个不包含ActionMessge的ActionErrors对象,就表示表单验证成功。
5. ActionServlet根据AtionMapping实例包含的映射信息决定将请求转发给哪个Action。如果应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
6. Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
7. ActionForward对象指向的JSP组件生成动态页面,返回给客户。
对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。
3 Struts框架的数据验证可分为几种类型?
表单验证(由ActionForm Bean处理):如果用户没有在表单中输入姓名,就提交表单,将生成表单验证错误
业务逻辑验证(由Action处理):如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则,不允许向“Monster”打招呼,因此将生成业务逻辑错误。
4 简述Form Bean的表单验证流程。
1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。
2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。
3、如果validate()方法返回的ActionErrors 对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。
4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。
6. 简单叙述ActionForm Bean的作用
1、ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。
2、Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。
3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionForm Bean中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。
7 .叙述ActionForm执行步骤
(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射
(2)根据name属性,查找form bean的配置信息
(3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。
(4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
(5)否则,就重新构建一个form bean的实例
(6)form bean的reset()方法备调用
(7)调用对应的setter方法,对状态属性赋值
(8)如果validatede的属性被设置为true,那么就调用form bean的validate()方法。
(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
8.在下面的标签中哪些是struts标签
A、<html:form> B、<html:text> C、<html:errors> D、<html:message>
答案:A B C
10、Forward与Global-Forward的区别
答:Forward是根据Action return的值找到对应的JSP页。当多个Action共同return同一个值时,可将这个Forward元素写在Global-Forward中。
11.问题:在Struts应用的视图中包含哪些组件?
选项:(A) JSP(B) Servlet(C) ActionServlet (D) Action (E) 代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签
答案:A,G
12问题:在Struts应用的控制器中包含哪些组件?
选项:(A) JSP(B) Servlet(C) ActionServlet (D) Action (E)代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签
答案:B,C,D
13.在struts配置文件中action元素包含哪些属性和子元素?
path属性:指定请求访问Action的路径
type属性:指定Action的完整类名
name属性:指定需要传递给Action的ActionForm Bean
scope属性:指定ActionForm Bean的存放范围
validate属性:指定是否执行表单验证
input属性:指定当表单验证失败时的转发路径。
<action>元素还包含一个<forward>子元素,它定义了一个请求转发路径。
14. 问题:在Struts应用的模型中包含哪些组件?
选项:(A) JSP(B) Servlet(C) ActionServlet (D) Action (E) 代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签
答案:F
15. 问题: struts框架中,关于FormBean,下列说法正确的是: 答案:A
A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action
B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证
C 用户每次提交表单,都会产生一个新的FormBean实例
D 动态FormBean不能进行验证操作
16. 问题:struts框架中,在一个Action的配置信息中,name属性指的是: 答案:C
A 当前action实例的名字
B 当前action所在的类的名字
C 该Action中调用的FormBean的实例的名字
D 该Action中调用的FormBean的类的所在包名
17. 问题:关于struts项目中的类与MVC模式的对应关系,说法错误的是?答案:D
A Jsp文件实现视图View的功能
B ActionServlet这一个类是整个struts项目的控制器
C ActionForm、Action都属于Model部分
D 一个struts项目只能有一个Servlet
18、问题:以下哪些说法是正确的?答案:C
选项:(A)每个HTTP请求对应一个单独的ActionServlet实例
(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。
(C)每个子应用对应一个单独的RequestProcessor实例
(D)每个子应用对应一个单独的web.xml文件
19 ActionForm Bean对象是由谁创建的?答案:C
选项:(A) <html:form>标签处理类 (B) ActionServlet (C) RequestProcessor (D) Action
20、struts框架,错误的是? 答案:C
A Struts中无法完成上传功能
B Struts框架基于MVC模式
C Struts框架容易引起流程复杂、结构不清晰等问题
D Struts可以有效地降低项目的类文件数目
21、问题:以下代码定义了一个变量,如何输出这个变量的值?
<bean:define id="stringBean" value=“helloWorld“/>
选项:(A)<bean:write name=“stringBean"/>
(B) <bean:write name=“helloWorld"/>
(C)<%= stringBean%>
(D)<% String myBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%> <%=myBean%>
答案: A,D
22、问题:把静态文本放在Resource Bundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?
答案: 提高可维护性 提高可重用性 支持国际化
24. 问题:关于struts项目中的类与MVC模式的对应关系,说法错误的是?答案:D
A Jsp文件实现视图View的功能
B ActionServlet这一个类是整个struts项目的控制器
C ActionForm、Action都属于Model部分
D 一个struts项目只能有一个Servlet
UML 及其他
1.名词解释
JDO 是Java对象持久化的新的规范,为Java Data 0bject的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS) , JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。 JDO ( Java Data Object ) 是 SUN 为了在传统数据存储上存取 Java 对象而建立的一个标准。 使用 JDO,Java 开发人员开发程序时使用面向对象的观点来处理数据存储, 而不用花时间去学习和考虑不同数据库的细节。
JNDI: (Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
POJO: Plain Old Java Object
IOC: Inversion of Control,控制反转,依赖注入。另外,IOC又称DI(全称)Dependency Injection,中文解释:依赖注入。
ORM:ORM对象-关系映射(Object-Relation Mapping)模式是指在单个组件中负责所有实体域对象的持久化,封装数据访问细节
JDBC: (Java Database Connectivity) 是用于执行SQL 语句的Java 应用程序接口,由一组用Java 语言编写的类和接口组成。JDBC 是一种规范,他让各数据库厂商为Java 程序员提供标准的数据库访问类和接口,这样就使得独立于DBMS 的Java 应用程序的开发工具和产品成为可能
3、如果说有两个类 一个Student,一个Message如何在配置文件中写二者一对一的关系并设置及联关系(在删除学生的同时与之对应的信息也删掉)?(写出一种即可)应用UML画出Student和Message的类图和关系。
?动态代理
在JDK1.3之后加入了可协助开发动态代理功能的API,您不必为特定对象与方法编写特定的代理对象,使用动态代理,可以使得一个处理者(Handler)服务于各个对象。首先,一个处理者的类设计必须实现java.lang.reflect.InvocationHandler接口,以实例来进行说明,例如
主要的概念是使用Proxy .newProxyInstance ()静态方法建立一个代理对象,建立代理对象时必须告知所要代理的接口,之后您可以操作所建立的代理对象,在每次操作时会执行InvocationHandler的invoke()方法,invoke ()方法会传入被代理对象的方法名称与执行参数,实际上要执行的方法交由method.invoke(),您在method.invoke()前后加上记录动作,method.invoke ()传回的对象是实际方法执行过后的回传结果。要实现动态代理,同样必须定义所要代理的接口,例如:
?一个 Bean 从建立到销毁,如果是使用 BeanFactory来生成、管理 Bean 的话,会历经几个执行阶段。
.–Bean 的建立?由 BeanFactory 读取 Bean 定义文件,并生成各个 Bean 实例。
–属性注入?执行相关的 Bean 属性依赖注入。
–BeanNameAware 的setBeanName ( )
?如果 Bean 类有实现 org . springframework . beans . Factory. BeanNameAware 接口,则执行它的setBeanName ()方法。
–BeanFactoryAware 的 setBeanFactory()
?如果 Bean 类有实现 org .springframework . beans . factory . BeanFactoryAware 接口,则执行它的SetBeanFactory ( )方法。–BeanPostProcessors 的 processBeforelnitialization ( )
–initializingBean 的 afterPropertiesSet ( )
?如果 Bean 类己实现 org.springframework . beans.factory.InitializingBean 接口,则执行它的 afterPropertiesSet ( )方法。
–Bean 定义文件中定义init-method
?可以在 Bean 定义文件使用” init-method“属性设定方法名称:
–BeanPostProcessors 的 processaAfterlriitialization ( )
?如果有任何的 BeanPostProcessors实例与 Bean 实例关联,则执行 PostProcessors 实例的 processaAfterlnitialization()方法。
–DisposableBean的destroy ( )
?在容器关闭时,DisposableBean 如果 Bean 类有实现 org. springframework.beans.factory接口,则执行它的 destroy ( ) 方法。
–Bean 定义文件中定义 destroy-method
?在容器关闭时,可以在 Bean 定义文件中使用” destroy-method”属性设定方法名称.
4.什么是UML,包括哪些?
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。
5..解释下面关于J2EE的名词
(1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能.
(2)JMS:Java Message Service,JAVA消息服务.主要实现各个应用程序之间的通讯.包括点对点和广播.
(3)JTA:Java Transaction API,JAVA事务服务.提供各种分布式事务服务.应用程序只需调用其提供的接口即可.
(4)JAF: Java Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部署和自定义实现自己的个性安全控制策略.
(5)RMI:Remote Method Interface,远程方法调用
EJB:Enterprise JavaBeans 企业JavaBean组件
IDL:Interface Definition Language 接口定义语言
JTS:Java Transaction Service Java事务服务
Object Serialization:对象序列化
JavaMail:Java邮件服务
JDBC:数据库访问API
JSP:Java Server Pages
Servlet:
Session Bean(会话BEAN)
Entity Bean(实体BEAN)
Message Driver Bean(消息驱动BEAN)
Session Bean分为两种:
Stateless Session Bean(无状态会话Bean)
Statefull Session Bean(有状态会话Bean)
Entity Bean分为两种:
CMP:Container Manager Persistence(容器管理持久性)
BMP:Bean Manager Persistence(Bean管理持久性)
其他缩写名词:
DTO:Data Transport Object 数据传输对象
JDO:Java Data Object
DAO:Database Access Object 数据库访问对象
POJO:Proterozoic Java Object Java原生对象
VO:Value Object 值对象
SOAP:Simple Object Access Protocol 简单对象访问协议
6.什么是Web容器?
实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.
7.什么是Web Service?
Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
优势:
(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规范没有规定任何与实现相关的细节,包括对象模型、编程语言,这一点,它不如CORBA。
选择题,编程题集锦
一、选择题(每题2分)
1.下列哪些情况可以终止当前线程的运行?
a. 抛出一个例外时。 b. 当该线程调用sleep()方法时。 c. 当创建一个新线程时。 d. 当一个优先级高的线程进入就绪状态时。
答案:ABD
2. 下面哪些为构造函数的特性定义
a. 在类中声明构造函数时,名称应该与类名相同 b. 具有重载特性,可以建立多个相同的名称
c. 使用类建立新对象时,会自动执行构造函数,因此在构造函数内设定变量的初值或进行内存分配 d. 以上都是
答案:ABCD
3. 关于异常处理机制的叙述哪些正确
a. catch部分捕捉到异常情况时,才会执行finally部分 b. 当try区段的程序发生异常时,才会执行catch区段的程序
c. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分 d. 以上都是
答案:BC
4. 下列关于接口的叙述中哪些是错误的
a. 接口中的数据必须设定初值 b. 接口中无法声明一般方法 c. 接口可以声明引用 d. 以上都正确
答案:BC
5. Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的?
A. 重写是父类与子类之间多态性的一种表现。
B. 重写是一个类中多态性的一种表现。
C. 重载是一个类中多态性的一种表现。
D. 重载是父类与子类之间多态性的一种表现。
7. struts框架中,关于FormBean,下列哪些说法是正确的:
A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action
B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证
C 用户每次提交表单,都会产生一个新的FormBean实例
D 动态FormBean不能进行验证操作
答案:A
8.以下哪些不是Hibernate的检索方式:
A、导航对象图检索 B、OID检索 C、ORM检索
D、QBC检索 E、本地SQL检索 F、HQL检索
答案:C
9.以下代码定义了一个变量,如何输出这个变量的值?
<bean:define id="stringBean" value=“helloWorld“/>
(A)<bean:write name=“stringBean"/>
(B) <bean:write name=“helloWorld"/>
(C)<%= stringBean%>
(D)<% String myBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%><%=myBean%>
答案: A,D
10.EJB有哪些对象?
A. Remote(Local)接口
B. Home(LocalHome)接口
C. Bean类
D. Enterprise Bean Provider
答案:A B C
11方法可以进行servlet的调试?(A B C D E)
A、使用打印语句; 在桌面计算机上运行服务器
B、使用Apache Log4J
C、使用IDE集成的调试器
D、直接查看HTML源码
E、返回错误页面给客户
12、下面关于servlet的功用说法正确的有哪些?(A B C D E)
A、读取客户程序发送来的显式数据
B、读取客户程序发送来的隐式数据
C、生成相应的结果
D、发送显式的数据给客户程序
E、发送隐式的数据给客户程序
13、下面关于session的用法哪些是错误的?(A B D)
A、HttpSession session = new HttpSession();
B、String haha = session.getParameter(“haha”);
C、session.removeAttribute(“haha”);
D、session. setAttribute(“haha”);
14、关于<jsp:include page="Relative URL" />说法正确的有哪些?(A B C)
A、URL的输出在请求时被插入到JSP页面中
B、不能含有影响整个页面的JSP内容
C、被包含文件改变后不需更改使用它的页面
D、被包含文件更改后,需要手动地更新使用它的页面
15、关于bean的说法正确的有哪些?(B D)
A、具备一个零参数(空)的构造函数(不是必须的)
B、不应该有公开的实例变量(字段)
C、所有的属性都必须通过getXxx和setXxx方法来访问
D、布尔型的属性使用isXxx,而非getXxx
16、下面关于MVC说法错误的有哪些?(A C)
A、必须使用复杂的框架
B、使用内建的RequestDispatcher能够很好地实现MVC
C、MVC影响整个系统的设计
D、我们可以用MVC来处理单个请求
17、下面的标签中哪些是JSTL标签?(A B C)
A、<c:out…/>
B、<c:set…/>
C、<c:if…/>
D、<c:errors…/>
18、使用Junit测试equals()必须根据哪些属性来进行?(A B C)
A、反身性
B、对称性
C、传递性
D、一致性
19、以下哪些说法是正确的?C
(A)每个HTTP请求对应一个单独的ActionServlet实例
(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。
(C)每个子应用对应一个单独的RequestProcessor实例
(D)每个子应用对应一个单独的web.xml文件
21、struts框架,错误的是,面那些说法正确?
A Struts中无法完成上传功能
B Struts框架基于MVC模式
C Struts框架容易引起流程复杂、结构不清晰等问题
D Struts可以有效地降低项目的类文件数目
答案:C
四、编程题(1、2题各15分,3题20分)
1、利用异常处理机制的方法来制作一个代码程序段。输入“I am 007”时,打印“亲爱的007,您好”;输入其他字符串时,打印“对不起,请下次进入”,然后程序结束
import java.io.*;
public class KB
{
public static String scan()
{
String str="";
try
{
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
str=buf.readLine();
}
catch(Exception e){}
return str;
}
}
public class MyExceptionTest {
public static void exceptionThrow() throws MyException1 {
throw new MyException1();
}
public static void anotherThrow() throws MyException2 {
throw new MyException2();
}
public static void main(String args[]) {
try {
String str=KB.scan();
if(str.equals("I am 007"))
exceptionThrow();
else
anotherThrow();
} catch (MyException1 e1) {
e1.printStackTrace();
} catch (MyException2 e2) {
e2.printStackTrace();
}
}
}
class MyException1 extends Exception {
MyException1() {
super("亲爱的007,您好");
}
}
class MyException2 extends Exception {
MyException2() {
super("对不起,请下次进入");
}
}
2、使用同步函数实现卖100张票。要求写两个类(主函数类:MainTest,线程类:ThreadTest),线程类实现Runnable接口。
public class MainTest {
public static void main(String args[])
{
Thread t=new Thread(new ThreadTest());
t.start();
}
}
class ThreadTest implements Runnable{
private int tickets = 100;
public void run() {
while(true)
{
sale();
}
}
public synchronized void sale()
{
if(tickets>0)
{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
}
}
}
3、请完成一个选课系统里注册模块的程序设计:
条件:
学生的持久化类的属性有:id,username,password,sex,major,class,
课程的持久化类的属性有:id,coursename,classroom,coursetime,
JSP页面为:reg.jsp,regok.jsp,regbad.jsp;
完成学生与课程的持久化类的映射文件,设置成级连保存,延迟检索;
写出与注册页面相对应的的Action和ActionForm;要求ActionForm要对表单中的数据格式进行验证;Action要对学生的用户名进行唯一验证;如果没有重复的用户名就可以注册成功,否则失败;
写出检测用户名是否存在的方法;
根据session接口写出相应的方法;
Course.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.Course" table="COURSES">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<property name="coursename" type="string">
<column name="COURSENAME" length="45" not-null="true" />
</property>
<property name="coursetime" type="string">
<column name="COURSETIME" length="45" not-null="true" />
</property>
<property name="classroom" type="string">
<column name="CLASSROOM" length="45" not-null="true" />
</property>
<set name="stu_cou" cascade="save-update" lazy="true" inverse="true">
<key>
<column name="COU_ID" not-null="true" />
</key>
<one-to-many class="com.hibernate.StudentCourse" />
</set>
</class>
</hibernate-mapping>
Student.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.Student" table="STUDENTS">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<property name="username" type="string">
<column name="username" length="45" not-null="true" />
</property>
<property name="password" type="string">
<column name="password" length="45" not-null="true" />
</property>
<property name="sex" type="string">
<column name="SEX" length="45" not-null="true" />
</property>
<property name="stuclass" type="string">
<column name="STUCLASS" not-null="true" />
</property>
<property name="major" type="string">
<column name="major" length="45" not-null="true" />
</property>
<set name="stu_cou" cascade="save-update" lazy="true" inverse="true">
<key>
<column name="STU_ID" not-null="true" />
</key>
<one-to-many class="com.hibernate.StudentCourse" />
</set>
</class>
</hibernate-mapping>
StudentCourse.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.StudentCourse" table="student_course">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<many-to-one name="course" class="com.hibernate.Course">
<column name="COU_ID" not-null="true" />
</many-to-one>
<many-to-one name="student" class="com.hibernate.Student">
<column name="STU_ID" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
struts-config.xml
<struts-config>
<data-sources />
<form-beans>
<form-bean name="RegFormBean" type="com.formbean.RegFormBean"/>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action path="/actions/reg" type="com.action.RegAction" name="RegFormBean" input="/reg.jsp">
<forward name="bad" path="/regbad.jsp" />
<forward name="success" path="/regok.jsp" />
</action>
</action-mappings>
<message-resources parameter="MessageResource" null="false"/>
</struts-config>
4.Java编程,打印昨天的当前时刻
public class YesterdayCurrent{
public void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
}
}
5.文件读写,实现一个计数器
public int getNum(){
int i = -1;
try{
String stri="";
BufferedReader in = new BufferedReader(new FileReader(f));
while((stri=in.readLine())!=null){
i = Integer.parseInt(stri.trim());
}
in.close();
}catch(Exception e){
e.printStackTrace();
}
return i;
}
public void setNum(){
int i = getNum();
i++;
try{
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));
out.write(String.valueOf(i)); //可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String
out.close() ;
}catch(Exception e){
e.printStackTrace();
}
}
6. 指出下面程序的运行结果:
class A{
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Hello{
public static void main(String[] ars){
A ab = new B(); //执行到此处,结果: 1a2b
ab = new B(); //执行到此处,结果: 1a2bab
}
}
注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造
7.写一个Singleton模式的例子
public class Singleton{
private static Singleton single = new Singleton();
private Singleton(){}
public Singleton getInstance(){
return single;
}
}
8 删除表的重复记录
如果记录完全相同才算重复记录,那么: (sql server2000下测试通过)
select distinct * into #tmpp from tid
delete from tid
insert into tid select * from #tmpp
drop table #tmpp
如果有id主键(数字,自增1的那种),那么:(sql server2000下测试通过)
delete from tableA where id not in
(select id = min(id) from tableA group by name)
面试和笔试大全
2、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
3、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
4、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
5、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是