




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
J2EE 最新面试常见问题题库 1 目录目录 数据结构:数据结构:.3 用JAVA代码实现链表?(代码)3 用JAVA代码实现基本的二叉树?(代码)4 用JAVA代码实现栈结构?(代码)5 算法:算法:.7 各种排序的算法?(代码)7 各种排序的优点和使用场合?.8 递归算法的使用和使用场合.9 模式:模式:.9 设计模式的分类?每种类型的作用?.9 什么是工厂模式?在程序中如何使用?.11 什么是单例,多例模式?在程序中如何使用?.11 什么是适配器模式?在程序中如何使用?.13 JAVA 基础:基础:.15 描述面向对象特征?用一个例子说明,比方说车?.15 对象实例化方式?有什么区别?.16 基本数据类型有那些?它和包装类的区别?.16 LINKEDLIST、ARRAYLIST和 VECTOR集合类型的区别和联系?17 HASHMAP,HASHTABLE,TREEMAP, WEAKHASHMAP的区别和联系?18 类反射的作用和使用场合?.19 什么是线程同步?.19 序列化的作用?.19 WEB:21 GBK,GB2312,GB18030, UTF-8 字符集类型的区别?.21 过滤器如何配置(JAVAX.SERVLET.FILTER)?22 如何使用REQUEST,FORWORD,INCLUDE,ERROR过滤器23 网页:网页:.26 不同浏览器的 JS 如何兼容?.26 STRUTS: .27 MVC 设计模式与STRUTS的联系?.27 STRUTS控制器有那些关键类?28 STRUTS标签库的分类?在程序中常用的是那些,如何使用?29 STRUTS生命周期?30 HIBERNATE:.31 什么是 ORM?.31 HIBERNATE的优点和缺点?32 J2EE 最新面试常见问题题库 2 HIBERNATE与 JDBC 的区别?32 HIBERNATE中 DIALECT,LAZY,INVERSE,CASCADE属性的用途?.33 HIBERNATE中延迟加载的用途和使用场合?34 HIBERNATE中如何配置ORACLE序列.38 HIBERNATE中缓存是什么?38 HIBERNATE的生命周期?41 OPENSESSIONINVIEWFILTER在程序中使用?41 HIBERNATE中有几种检索方式?每种方式的区别?44 SPRING:45 SSH 整合过程? 45 SPRING的优点和缺点?.46 SPRING中的过滤器如何配置?.46 IOC的解释?注入方式?在程序中的使用? 46 AOP 的解释?注入方式?在程序中的使用?50 SPRING中的事务处理?.50 数据库:数据库:.51 视图的用法?.51 数据库的优化(程序优化,SQL语句优化,数据库实例优化)?.52 ORACLE中过程和函数的区别?.54 内链接查询如何使用?.55 名词解释:名词解释:.55 J2EE 最新面试常见问题题库 3 正文正文 数据结构:数据结构: 用用 java 代码实现链表?代码实现链表?(代码代码) public class SortableLinkedList extends LinkedList public void addinOrder(E target) Predecessor prev=this; ListNode node =getNext(); while(node!=null) /*链表排序*/ public void insertSort() SortableLinkedList newList =new SortableLinkedList(); for(E e:this) newList.addinOrder(e); setNext(newList.getNext(); public static void main(String args) SortableLinkedList slist =new SortableLinkedList(); slist.add(“3“); slist.add(“5“); slist.add(“2“); slist.insertSort(); System.out.println(slist); J2EE 最新面试常见问题题库 4 用用 java 代码实现基本的二叉树?代码实现基本的二叉树?(代码代码) public class Tree public Node root=new Node(); /树的节点类 private class Node private Node left; private Node right; private Integer object; public void add(Integer o) if(root.object=null) root.object=o; return; Node node=root; while(node.object!=null) /小的在左边,大的在右边 if(pareTo(node.object) dataj + 1) / 将两个数字的位置进行对调 int temp = dataj; dataj = dataj + 1; dataj + 1 = temp; for (int k = 0; k 0 -in; datain = temp; 选择排序: int data = new int 12, 8, 3, 59, 132, 1236, 3400, 8, 352, 37 ; int minValue; int indexMin; int temp; J2EE 最新面试常见问题题库 8 for (int i = 0; i i; j-) if (dataj integer 是后者(也就是一个类) J2EE 最新面试常见问题题库 17 2.初始化时 int i =1; Integer i= new Integer(1);(要把 integer 当做一个类看) int 是基本数据类型(面向过程留下的痕迹,不过是对 java 的有益补充) Integer 是一个类,是 int 的扩展,定义了很多的转换方法 类似的还有:float Float;double Double;string String 等 举个例子:当需要往 ArrayList,HashMap 中放东西时,像 int,double 这种内建类型是放不进 去的,因为容器都是装 object 的,这是就需要这些内建类型的外覆类了。 Java 中每种内建类型都有相应的外覆类。 java 提供两种不同的类型:引用类型(或者封装类型,Warpper)和原始类型(或内置类型, Primitive) 。Int 是 java 的原始数据类型,Integer 是 java 为 int 提供的封装类。Java 为每个原 始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不 同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的 数据结构存储,当引用类型 和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始 类型实例变量的缺省值与它们的类型有关。 int 是基本类型,(int)(Math.Random()*100)就是一个数,可以进行加见乘除。 Integer 是 class ,那么 new Integer(temp)就是一个对象了,可以用到 Integer 这个 class 的方法,例如用 intvalue()可以返回这个 int 的值。 LinkedList、ArrayList 和和 Vector 集合类型的区别和联系?集合类型的区别和联系? LinkedList 类:LinkedList 实现了 List 接口,允许 null 元素。此外 LinkedList 提供额外的 get,remove,insert 方法在 LinkedList 的首部或尾部. ArrayList 类: ArrayList 实现了可变大小的数组。它允许所有元素,包括 null。ArrayList 没有同 步. Vector 类: Vector 非常类似 ArrayList,但是 Vector 是同步的。由 Vector 创建的 Iterator,虽然 和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建而且正 在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素) ,这时调用 Iterator 的 方法时将抛出. Vector 和 ArrayList 区别: 1, vector 是线程同步的,所以它也是线程安全的,而 arraylist 是线程异步的,是不安全的。如 J2EE 最新面试常见问题题库 18 果不考虑到线程的安全因素,一般用 arraylist 效率比较高。 2, 如果集合中的元素的数目大于目前集合数组的长度时,vector 增长率为目前数组长度的 100%, 而 arraylist 增长率为目前数组长度 的 50%.如过在集合中使用数据量比较大的数据,用 vector 有一定的优势。 3, 如果查找一个指定位置的数据,vector 和 arraylist 使用的时间是相同的,都是 0(1),这个时候 使用 vector 和 arraylist 都可以。而 如果移动一个指定位置的数据花费的时间为 0(n-i)n 为总长度,这个时候就应该考虑到使用 linklist,因为它移动一个指定位置的数据 所花费的时间为 0(1),而查询一个指定位置的数据时花费的时间为 0(i)。 ArrayList 和 Vector 是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加 和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作, 所以索引数据快插入数据慢,Vector 由于使用了 synchronized 方法(线程安全)所以性能上 比 ArrayList 要差,LinkedList 使用双向链表实现存储,按序号索引数据需要进行向前或向 后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快! arraylist 和 linkedlist 1, ArrayList 是实现了基于动态数组的数据结构,LinkedList 基于链表的数据结构。 2, 对于随机访问 get 和 set,ArrayList 觉得优于 LinkedList,因为 LinkedList 要移动指针。 3, 对于新增和删除操作 add 和 remove,LinedList 比较占优势,因为 ArrayList 要移动数据。 4, 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList 的速度反而优于 LinkedList。 但若是批量随机的插入删除数据,LinkedList 的速度大大优于 ArrayList. 因为 ArrayList 每插入 一条数据,要移动插入点及之后的所有数据。 hashmap,hashtable,TreeMap, WeakHashMap 的区别和联的区别和联 系?系? 在 Map 对象中,每一个关键字最多有一个关联的值。 Map:不能包括两个相同的键,一个键最多能绑定一个值。null 可以作为键,这样的键只有一个; 可以有一个或多个键所对应的 值为 null。当 get()方法返回 null 值时,即可以表示 Map 中没有该键, 也可以表示该键所对应的值为 null。因此,在 Map 中不能由 get()方法来判断 Map 中是否存在某个键, 而应该用 containsKey()方法来判断。 继承 Map 的类有:HashMap,HashTable HashMap:Map 的实现类,缺省情况下是非同步的,可以通过 Map Collections.synchronizedMap(Map m)来达到线程同步 HashTable:Dictionary 的子类,确省是线程同步的。不允许关键字或值为 null 当元素的顺序很重要时选用 TreeMap,当元素不必以特定的顺序进行存储时,使用 HashMap。Hashtable 的使用不被推荐,因为 HashMap 提供了所有类似的功能,并且速度更快。当你 需要在多线程环境下使用时,HashMap 也可以转换为同步的。 映射: HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现 hashcode()方法和 equal()方法。这个类是前面 java 实现的一个继承,并且通常能在实现映象的其他类 J2EE 最新面试常见问题题库 19 中更好的使用。 HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只 能有一个) 。 WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对 将被舍弃。这与 HashMap 形成对照,映象中的键维持键/对象对的生命周期,尽管使用映象的程序不 再有对键的引用,并且因此不能检索对象。 TreeMap: 实现这样一个映象,对象是按键升序排列的。 类反射的作用和使用场合?类反射的作用和使用场合? Reflection 是 Java 被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行 时透过 Reflection APIs 取得任何一个已知名称的 class 的内部信息,包括其 modifiers(诸如 public, static 等等) 、superclass(例如 Object) 、实现之 interfaces(例如 Cloneable) ,也包 括 fields 和 methods 的所有信息,并可于运行时改变 fields 内容或唤起 methods。 Java 有着一个非常突出的动态相关机制:ReflectionReflection。这个字的意思是“反射、映象、倒影” , 用在 Java 身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的 classes。换句话说, Java 程序可以加载一个运行时才得知名称的 class,获悉其完整构造(但不包括 methods 定义) ,并 生成其对象实体、或对其 fields 设值、或唤起其 methods1。这种“看透 class”的能力(the ability of the program to examine itself)被称为 introspection(内省、内观、反省) 。 ReflectionReflection 和 introspectionintrospection 是常被并提的两个术语。 涉及到的类和方法主要有:java.lang.Class,以及 java.lang.reflect 中的 Method、Field、Constructor 等等 classes。 什么是线程同步?什么是线程同步? 1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。 2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线 程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。 3、对于静态同步方法,锁是针对这个类的,锁对象是该类的 Class 对象。静态和非静态方法的锁互 不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象 锁。 4、对于同步,要时刻清醒在哪个对象上同步,这是关键。 5、编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对 “原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。 6、当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。 7、死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一 定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。 J2EE 最新面试常见问题题库 20 序列化的作用?序列化的作用? 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节 流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要 将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例 序列化的什么特点: 如果某个类能够被序列化,其子类也可以被序列化。声明为 static 和 transient 类型的成员数据不 能被序列化。因为 static 代表类的状态, transient 代表对象的临时数据。 什么时候使用序列化: 1.对象序列化可以实现分布式对象。主要应用例如:RMI 要利用对象序列化运行远程主机上 的服务,就像在本地机上运行对象时一样。 2.java 对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可 以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列 化可以进行对象的“深复制“,即复制对象本身及引用的对象本身。序列化一个对象可能得 到整个对象序列。 = 可以看看接口 java.io.serializable 的中文解释: Serializable public interface Serializable 类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状 态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段, 仅用于标识可序列化的语义。 要允许不可序列化类的子类型序列化,可以假定该子类型负责保存和还原超类型的公用 (public)、 受保护的 (protected) 和(如果可访问)包 (package) 字段的状态。仅在子类型扩展的类有一个可访 问的无参数构造方法来初始化该类的状态时,才可以假定子类型有此责任。如果不是这种情况,则 声明一个类为可序列化类是错误的。该错误将在运行时检测到。 在反序列化过程中,将使用该类的公用或受保护的无参数构造方法初始化不可序列化类的字段。 可序列化的子类必须能够访问无参数的构造方法。可序列化子类的字段将从该流中还原。 当遍历一个图形时,可能会遇到不支持可序列化接口的对象。在此情况下,将抛出 NotSerializableException,并将标识不可序列化对象的类。 在序列化和反序列化过程中需要特殊处理的类必须使用下列准确签名来实现特殊方法: private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以还原它。通过 调用 out.defaultWriteObject 可以调用保存 Object 的字段的默认机制。该方法本身不需要涉及属于 其超类或子类的状态。状态是通过使用 writeObject 方法或使用 DataOutput 支持的用于基本数据类 型的方法将各个字段写入 ObjectOutputStream 来保存的。 readObject 方法负责从流中读取并还原类字段。它可以调用 in.defaultReadObject 来调用默认机 J2EE 最新面试常见问题题库 21 制,以还原对象的非静态和非瞬态字段。defaultReadObject 方法使用流中的信息来分配流中通过当 前对象中相应命名字段保存的对象的字段。这用于处理类发展后需要添加新字段的情形。该方法本 身不需要涉及属于其超类或子类的状态。状态是通过使用 writeObject 方法或使用 DataOutput 支持 的用于基本数据类型的方法将各个字段写入 ObjectOutputStream 来保存的。 将对象写入流时需要指定要使用的替代对象的可序列化类,应使用准确的签名来实现此特殊方 法: ANY-ACCESS-MODIFIER Object writeReplace() throws ObjectStreamException; 此 writeReplace 方法将由序列化调用,前提是如果此方法存在,而且它可以通过被序列化对象 的类中定义的一个方法访问。因此,该方法可以拥有私有 (private)、受保护的 (protected) 和包私有 (package-private) 访问。子类对此方法的访问遵循 java 访问规则。 在从流中读取类的一个实例时需要指定替代的类应使用的准确签名来实现此特殊方法。 ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException; 此 readResolve 方法遵循与 writeReplace 相同的调用规则和访问规则。 序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序 列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接 收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导 致 InvalidClassException。可序列化类可以通过声明名为 “serialVersionUID“ 的字段(该字段必须是 静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID: ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; 如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类 的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议 所有可序列 化类都显式声明 serialVersionUID 值,原因计算默认的 serialVersionUID 对类的详细信息具有较高 的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列 化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修改器显示声明 serialVersionUID(如果可能) ,原因是这种声明仅应用于立即声明类 - serialVersionUID 字段作为继 承成员没有用处。 web: gbk,gb2312,gb18030, utf-8 字符集类型的区别?字符集类型的区别? GB2312 GB2312 是基于区位码设计的,区位码把编码表分为 94 个区,每个区对应 94 个位,每个字符的 区号和位号组合起来就是该汉字的区位码。区位码一般 用 10 进制数来表示,如 1601 就表示 16 区 1 位,对应的字符是“啊” 。在区位码的区号和位号上分别加上 0xA0 就得到了 GB2312 编码。 区位码中 01-09 区是符号、数字区,16-87 区是汉字区,10-15 和 88-94 是未定义的空白区。它 将收录的汉字分成两级:第一级是常用汉字计 3755 个,置于 16-55 区,按汉语拼音字母/笔形顺序 排列;第二级汉字是次常用汉字计 3008 个,置于 56-87 区,按部首/笔画顺序排列。一级汉字是按 照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的 程序就是根据这个原理编写的。 J2EE 最新面试常见问题题库 22 GB2312 字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里 尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持 GB2312 编码。 GB2312 的编码范围是 0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是 0xA1A1-0xF7FE。 EUC-CN 可以理解为 GB2312 的别名,和 GB2312 完全相同。 区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而 GB2312 及 EUC-CN 是 实际计算机环境中支持这种字符集的编码。HZ 和 ISO-2022-CN 是对应区位码字符集的另外两种编码, 都是用 7 位编码空间来支持汉字。区位码和 GB2312 编码的关系有点像 Unicode 和 UTF-8。 GBK GBK 编码是 GB2312 编码的超集,向下完全兼容 GB2312,同时 GBK 收录了 Unicode 基本多文种平 面中的所有 CJK 汉字。同 GB2312 一样,GBK 也支持希腊字母、日文假名字母、俄语字母等字符,但 不支持韩语中的表音字符(非汉字字符) 。GBK 还收录了 GB2312 不包含的汉字部首符号、竖排标点 符号等字符。 GBK 的整体编码范围是为 0x8140-0xFEFE,不包括低字节是 07F 的组合。高字节范围是 081-0xFE,低字节范围是 0x40-7E 和 0x80-0xFE。 低字节是 0x40-0x7E 的 GBK 字符有一定特殊性,因为这些字符占用了 ASCII 码的位置,这样会给一 些系统带来麻烦。 有些系统中用 0x40-0x7E 中的字符(如“|” )做特殊符号,在定位这些符号时又没有判断这些 符号是不是属于某个 GBK 字符的低字节,这样就会造成错误判断。在支持 GB2312 的环境下就不存 在这个问题。需要注意的是支持 GBK 的环境中小于 0x80 的某个字节未必就是 ASCII 符号;另外就是 最好选用小于 040 的 ASCII 符号做一些特殊符号,这样就可以快速定位,且不用担心是某个汉字 的另一半。Big5 编码中也存在相应问题。 CP936 和 GBK 的有些许差别,绝大多数情况下可以把 CP936 当作 GBK 的别名。 GB18030 GB18030 编码向下兼容 GBK 和 GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相 同。GB18030 收录了所有 Unicode3.1 中的字符,包括中国少数民族字符,GBK 不支持的韩文字符等 等,也可以说是世界大多民族的文字符号都被收录在内。 GBK 和 GB2312 都是双字节等宽编码,如果算上和 ASCII 兼容所支持的单字节,也可以理解为是 单字节和双字节混合的变长编码。GB18030 编码是变长编码,有单字节、双字节和四字节三种方式。 GB18030 的单字节编码范围是 0x00-0x7F,完全等同与 ASCII;双字节编码的范围和 GBK 相同,高字 节是 0x81-0xFE,低字节的编码范围是 0x40-0x7E 和 0x80-FE;四字节编码中第一、三字节的编码范 围是 0x81-0xFE,二、四字节是 0x30-0x39。 Windows 中 CP936 代码页使用 0x80 来表示欧元符号,而在 GB18030 编码中没有使用 0x80 编码 位,用其他位置来表示欧元符号。这可以理解为是 GB18030 向下兼容性上的一点小问题;也可以理 解为 0x80 是 CP936 对 GBK 的扩展,而 GB18030 只是和 GBK 兼容良好。 UTF-8 Unicode Transformation Format-8bit,允许含 BOM,但通常不含 BOM。是用以解决国际上字符 的一种多字节编码,它对英文使用 8 位(即一个字节) ,中文使用 24 为(三个字节)来编码。UTF-8 包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8 编码的文字可以在各国支持 J2EE 最新面试常见问题题库 23 UTF8 字符集的浏览器上显示。如,如果是 UTF8 编码,则在外国人的英文 IE 上也能显示中文,他们 无需下载 IE 的中文语言支持包。 过滤器如何配置过滤器如何配置(javax.servlet.Filter)? Filter 过滤器配置: 在 web 配置文件中添加如下配置: 自定义一个名称 自定义过滤器类的路径 encoding gbk 自定义的名称注:要与 filter-name 节点名称一致 /* 如果是 url 的 get 提交参数带中文的 ,可以改下面这个文件,加入一个 URIEncoding=“GBK“ 文件目录在:X:Tomcat 5.5confServer.xml 如何使用如何使用 request,forword,include,error 过滤器过滤器 Request 过滤器: 这种过滤器的工作方式比较简单,大家也经常遇到,如下图所示: 以下是 web.xml 文件配置方式: J2EE 最新面试常见问题题库 24 myFilter xx.MyFilter myFilter 目标资源一 下面我们更改一下 web.xml 文件的配置,如下方式: myFilter xx.MyFilter myFilter 目标资源一 myFilter 目标资源二 也就是说此过滤器对目标资源一和目标资源二都进行过滤,然后当目标资源一被访问的时候我 们将请求转发给目标资源二,那么这个时候过滤器是怎么工作的呢?如下图所示: 我们可以看到,当我们访问目标资源一时过滤器截取了请求,然后再转发给目标资源一,然后 再转发给目标资源二,从图中我们可以看到过滤器没有截取转发到目标资源二的请求,但是我 们已经在 web.xml 文件中配置了该过滤器对目标资源二的过滤,为什么又没有起到过滤作用呢 ? J2EE 最新面试常见问题题库 25 答案就在于,目标资源一是客户端直接访问,而目标资源二是被转发过来的,这时过滤器 就不能过滤目标资源二。如果你直接访问目标资源二,你会发现该过滤器起到了作用? 我们上面的 web.xml 文件配置与以下方式等价: myFilter myFilter xx.MyFilter myFilter 目标资源一 REQUEST myFilter 目标资源二 REQUEST 这种方式的配置,说明只有直接访问该目标资源时该过滤器才会起作用,对转发到该目标资源 的请求将忽略不处理。 那如果我想对转发到目标资源二的请求进行过滤,那怎么办呢?答案见,下一种过滤器,for ward 过滤器。 Forward 过滤器: 我们将 web.xml 文件的配置修改如下: myFilter myFilter xx.MyFilter myFilter 目标资源一 REQUEST myFilter 目标资源二 FORWARD J2EE 最新面试常见问题题库 26 工作方式如下图所示: 我们看对目标资源二过滤的配置方式,这时过滤方式为 forward,也就是说对转发到目标 资源二的请求过滤,如果直接访问目标资源二,过滤器将不起作用。 include 过滤器: 理解了 forward 过滤器之后,include 过滤器就不难理解了。以下方式: myFilter 目标资源二 INCLUDE 此表示对包含了目标资源二的请求过滤,如果直接访问目标资源二,则此过滤器将不起 作用。 include 包含以下语句: 在 JSP 页面中的动作:指令包含,这时此过滤器 不工作 Error 过滤器: web.xml 文件的配置: myFilter /error.jsp ERROR 404 /error.jsp 当我们访问一个不存在的文件时,就会访问 error.jsp,但是配置了过滤器对错误页面进 行过滤,所以过滤器先接受到请求,然后再转发给 error.jsp。 J2EE 最新面试常见问题题库 27 网页:网页: 不同浏览器的不同浏览器的 JS 如何兼容?如何兼容? ie 和 firefox 不兼容 js 的解决方法集合 2009-04-26 23:081、firefox 和 ie 事件 event 处理。 在 ie 中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发的, 还是其他事件, 都会更新 window.event 对象。 所以在代码中,只要轻松调用 window.event 就可 以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理在 ff 中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff 把事件对象自动传递给对应 的事件处理函数。 在代码中,函数的第一个参数就是 ff 下的事件对象了。 按钮 4 function foo4() var evt=getEvent(); var element=evt.srcElement | evt.target ; alert(element.id) function getEvent() /同时兼容 ie 和 ff 的写法 if(document.all) return window.event; func=getEvent.caller; while(func!=null) var arg0=func.arguments0; if(arg0) if(arg0.constructor=Event | arg0.constructor =MouseEvent) | (typeof(arg0)=“object“ func=func.caller; return null; firefoxfirefox 和和 ieie 对手型指针对手型指针 cursorcursor 不兼容不兼容 手型指针有 cursor:hand 和 cursor:pointer 两种写法,其中 cursor:hand 在 ff 中不支持,返回 错误!只要使用 cursor:pointer 即可,ff 和 ie 都支持! J2EE 最新面试常见问题题库 28 struts: MVC 设计模式与设计模式与 struts 的联系?的联系? s struts 是帮助 V 和 C 更好地分开,它处理的是 v 和 c 之间的东西。 它是一个框架,支持 MVC,不能说它属于哪一部分。 就像脖子那部分,不属于头也不属于身体,不知道这个比喻准不准确。 servlet 模式中,请求提交到 servlet,是通过指定文件名; 而 struts 中,请求统一提交给 struts 的一个类,由 struts 根据.do 这个调用不同的 servlet 清楚处理完毕,servlet 是必须自己刷新页面; 而 struts 中,你是指定 forward,struts 根据这个 forward 决定显示哪个页面。 struts 控制器有那些关键类?控制器有那些关键类? 1.ActionServlet 类:是一个前端控制器,将 request 转发给 RequestProcessor 来处理。提供了 一组能够被 Action 对象使用的方法: (1) 动态的添加和删除,只影响应用程序当前的实例 public void addFormBean(ActionFormBean formBean) public void removeFormBean(ActionFormBean formBean) public void addForward(ActionForward actionForward) public void removeForward(ActionForward actionForward) public void addMapping(ActionMaping actionMapping) public void removeMapping(ActionMaping actionMapping) (2) 根据名称查找对象 public ActionFormBean findFormBean(String name) public ActionForward findForward(String name) public ActionMapping findMapping(String name) (3) 用来处理数据源 public void addDataSource(String key, DataSource ds) public DataSource findDataSource(String key) (4) 使用 destroy()方法结束 ActionServlet (5) 使用 reload()方法从 struts 配置文件将信息重新加载。 2.ActionMapping 类:是 ActionConfig 的子类,实质上是对 struts-config.xml 的一个映射类, 从中可以取得所有的配置信息。将特定请求映射到特定 Action 的相关信息存储在 ActionMapping 中,ActionServlet 将 ActionMapping 传送到 Action 类的 perform()方法,Action 将使用 ActionMapping 的 findForward()方法,此方法返回一个指定名称的 ActionForward,这样 Action 就完成了本地转发。若没有找到具体的 ActionForward,就返回一个 null。ActionMapping 类的 方法: (1) 可以在映射中动态添加 ActionForward J2EE 最新面试常见问题题库 29 public ActionForward findForward(String name) (2) 可以返回与映射关联的表单 bean public void addForward(ActionForward forward) (3) 可以返回映射的属性域(回话或请求) public String getName() (4) 可以返回映射的作用域 public String getScope() 3.RequestProcessor 类 :根据提交过来的 url,如*.do 从 ActionMapping 中得到相应的 ActionForm 和 Action,然后将 request 参数对应到 ActionForm 中,进行验证。如果验证通过则 调用 Action 的 execute()方法来执行 Action,最终返回 ActionForward。 4.ActionForward 类:是对 mapping 中一个 forward 的包装,对应于一个 url。 5.Action 类:是框架包的核心,链接客户请求和业务操作,真正实现应用程序的事务逻辑,负责 处理请求。其方法有: (1) 所有 Action 类都扩展 org.apache.struts.action.Action 类,且覆盖类中定义的一个 execute()方法。 处理非 HTTP 请求: public ActionForward execute(ActionMapping action, ActionForm form, ServletRequest request, ServletResponse response) thorws IOException, ServletException 处理 HTTP 请求: public ActionForward execute(ActionMapping action, ActionForm form, HttpServletRequest request, HttpServletResponse response) thorws IOException, ServletException (2) 可以获得或设置与请求相关联的区域: public Local getLocal(HttpServletRequest request) public void setLocal(HttpServletRequest request, Local local) (3) 为应用程序获得消息资源: public MessageResources getResources() (4) 检查用户是否点击表单上的“取消”键,如果是,返回 true: public Boolean isCancelled(HttpServletRequest request) (5) 当应用程序发生错误时,Action 类存储错误信息: public void saveErrors(HttpServletRequest request, ActionErrors errors) 6.DispatchAction 类: Struts 提供了多种 Action 供选择使用。普通的 Action 只能通过调用 execute 执行一 项任务,而 DispatchAction 可以根据配置参数执行,而不是仅进入 execute()函数,这样可以执 行多种任务。如 insert,update 等。LookupDispatchAction 可以根据提交表单按钮的名称来执行 函数。 J2EE 最新面试常见问题题库 30 struts 标签库的分类?在程序中常用的是那些,如何使用?标签库的分类?在程序中常用的是那些,如何使用? 有五个分类:html 标签 logic 标签 bean 标签 Template 标签 Nested 标签 在程序中经常使用的是 logic,bean 标签 Html 标签: 描述: Struts html 标签库 = html 元素 分类: 用于生成基本和 HTML 的标签 用于生成 HTML 表单的标签 显示消息(正确/错误)的标签 Bean 标签: 描述: 可以访问已经存在的 JavaBean 以及它们的属性,可以把它们放到(Page,request, session)范围中保存,也有一些 Bean 可以方便访问 HTTP 请求的 Header 信息,或请 求参数,或 Cookie。 分类: 用于访问 HTTP 请求信息或 JSP 隐式对象的 Bean 标签 用于访问 WEB 资源(作用域中值)的 Bean 标签 用于定义或输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商洛职业技术学院《航线设计》2023-2024学年第二学期期末试卷
- 南溪县2024-2025学年四年级数学第二学期期末监测试题含解析
- 清远职业技术学院《图文信息处理与再现》2023-2024学年第二学期期末试卷
- 浙江交通职业技术学院《药剂学实验仿真》2023-2024学年第二学期期末试卷
- 山东农业工程学院《生物技术制药双语》2023-2024学年第二学期期末试卷
- 山东省潍坊市临朐县2024-2025学年高考全真模拟考卷物理试题含解析
- 四川省巴中学市恩阳区实验中学2025届初三第二次校模拟考试英语试题含答案
- 吉林省吉林市吉化九中学2025届初三下学期暑假联考化学试题含解析
- 江苏省徐州市邳州市运河中学2025届初三下学期期末教学质量检测试题(一模)数学试题含解析
- 长春工业大学《放射生物学》2023-2024学年第二学期期末试卷
- 2025年山东省东营市广饶县一中中考一模英语试题(原卷版+解析版)
- 工贸行业隐患排查指导手册
- 形势与政策(贵州财经大学)知到智慧树章节答案
- GB/T 36187-2024冷冻鱼糜
- 2023年江苏省五年制专转本英语统考真题(试卷+答案)
- 20S805-1 雨水调蓄设施-钢筋混凝土雨水调蓄池
- GB3469-83《文献类型与文献载体代码》
- 互联网大学生创新创业大赛培训
- 3号钢筋加工场桁吊安装方案
- 部编版(统编)六年级语文下册文学常识及文化常识(共4页)
- 世界500强企业企业文化(企业使命、愿景、核心价值观)集锦
评论
0/150
提交评论