资源描述
面对对象编程(OOP)
Java是一个支持并发、基于类和面对对象的计算机编程语言。下面列出了面对对象软件开发的优点:
1. 代码开发模块化,更易维护和修改。 2. 代码复用。
3. 增强代码的可靠性和灵活性。 4. 增加代码的可了解性。
面对对象编程有诸多重要的特性,例如:封装,继承,多态和抽象。下面的章节我们会逐一分析这些特性。 封装
封装给对象提供了隐藏内部特性和行为的能力。对象提供某些能被其他对象访问的措施来变化它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一个修饰符给其他的位于同一个包或者不一样包下面对象赋予了不一样的访问权限。 下面列出了使用封装的某些好处:
1. 通过隐藏对象的属性来保护对象内部的状态。
2. 提升了代码的可用性和可维护性,因为对象的行为能够被单独的变化或者是扩展。
3. 严禁对象之间的不良交互提升模块化。
参考这个文档获取更多有关封装的细节和示例。 多态
多态是编程语言给不一样的底层数据类型做相同的接口展示的一个能力。一个多态类型上的操作能够应用到其他类型的值上面。 继承
继承给对象提供了从基类获取字段和措施的能力。继承提供了代码的重用行,也能够在不修改类的情况下给现存的类添加新特性。 抽象
抽象是把想法从详细的实例中分离出来的步骤,因此,要依照他们的功效而不是实现细节来创建类。Java支持创建只暴漏接口而不包括措施实现的抽象的类。这种抽象技术的重要目标是把类的行为和实现细节分离开。
抽象和封装的不一样点
抽象和封装是互补的概念。首先,抽象关注对象的行为。另首先,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装能够当作是用来提供抽象的一个方略。
常见的Java问题
1.什么是Java虚拟机?为何Java被称作是“平台无关的编程语言”?
Java虚拟机是一个能够执行Java字节码的虚拟机进程。Java源文献被编译成能被Java虚拟机执行的字节码文献。
Java被设计成允许应用程序能够运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为也许,因为它懂得底层硬件平台的指令长度和其他特性。
2.JDK和JRE的区分是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包括了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包括了JRE,编译器和其他的工具(例如:JavaDoc,Java调试器),能够让开发者开发、编译、执行Java应用程序。
3.”static”核心字是什么意思?Java中是否能够覆盖(override)一个private或者是static的措施?
“static”核心字表白一个组员变量或者是组员措施能够在没有所属的类的实例变量的情况下被访问。
Java中static措施不能被覆盖,因为措施覆盖是基于运行时动态绑定的,而static措施是编译时静态绑定的。static措施跟类的任何实例都不有关,因此概念上不合用。
4.是否能够在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是同样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。假如你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的8中基本数据类型是:
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。例如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
6.Java中的措施覆盖(Overriding)和措施重载(Overloading)是什么意思?
Java中的措施重载发生在同一个类里面两个或者是多个措施的措施名相同不过参数不一样的情况。与此相对,措施覆盖是说子类重新定义了父类的措施。措施覆盖必须有相同的措施名,参数列表和返回类型。覆盖者也许不会限制它所覆盖的措施的访问。
7.Java中,什么是结构函数?什么是结构函数重载?什么是复制结构函数?
当新对象被创建的时候,结构函数会被调用。每一个类都有结构函数。在程序员没有给类提供结构函数的情况下,Java编译器会为这个类创建一个默认的结构函数。
Java中结构函数重载和措施重载很相同。能够为一个类创建多个结构函数。每一个结构函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制结构函数,这个不一样点是因为假如你不自己写结构函数的情况下,Java不会创建默认的复制结构函数。
8.Java支持多继承么?
不支持,Java不支持多继承。每个类都只能继承一个类,不过能够实现多个接口。
9.接口和抽象类的区分是什么?
Java提供和支持创建抽象类和接口。它们的实既有共同点,不一样点在于:
1. 接口中所有的措施隐含的都是抽象的。而抽象类则能够同时包括抽象和非抽象的方
法。
2. 类能够实现诸多个接口,不过只能继承一个抽象类
3. 类假如要实现一个接口,它必须要实现接口申明的所有措施。不过,类能够不实现
抽象类申明的所有措施,当然,在这种情况下,类也必须得申明成是抽象的。
4. 抽象类能够在不提供接口措施实现的情况下实现接口。
5. Java接口中申明的变量默认都是final的。抽象类能够包括非final的变量。 6. Java接口中的组员函数默认是public的。抽象类的组员函数能够是private,
protected或者是public。
7. 接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,不过,假如它包
含main措施的话是能够被调用的。
也能够参考JDK8中抽象类和接口的区分
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是变化了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的变化会反应到所有的对象上。
4. 抽象类能够在不提供接口措施实现的情况下实现接口。
5. Java接口中申明的变量默认都是final的。抽象类能够包括非final的变量。 6. Java接口中的组员函数默认是public的。抽象类的组员函数能够是private,
protected或者是public。
7. 接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,不过,假如它包
含main措施的话是能够被调用的。
也能够参考JDK8中抽象类和接口的区分
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是变化了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的变化会反应到所有的对象上。
Java线程
11.进程和线程的区分是什么?
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程能够有多个线程。线程又叫做轻量级进程。
12.创建线程有几个不一样的方式?你喜欢哪一个?为何?
有三种方式能够用来创建线程:
1. 继承Thread类 2. 实现Runnable接口
3. 应用程序能够使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很轻易实现和使用。
13.概括的解释下线程的几个可用状态。
线程在执行过程中,能够处在下面几个状态:
1. 就绪(Runnable):线程准备运行,不一定立马就能开始执行。 2. 运行中(Running):进程正在执行线程的代码。
3. 等候中(Waiting):线程处在阻塞的状态,等候外部的处理结束。 4. 睡眠中(Sleeping):线程被强制睡眠。
5. I/O阻塞(Blocked on I/O):等候I/O操作完成。 6. 同时阻塞(Blocked on Synchronization):等候获取锁。 7. 死亡(Dead):线程完成了执行。
14.同时措施和同时代码块的区分是什么?
在Java语言中,每一个对象有一把锁。线程能够使用synchronized核心字来获取对象上的锁。synchronized核心字可应用在措施级别(粗粒度锁)或者是代码块级别(细粒度锁)。
15.在监视器(Monitor)内部,是怎样做线程同时的?程序应当做哪种级别的同时?
监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同时代码块,确保一次只有一个线程执行同时代码块。每一个监视器都和一个对象引用有关联。线程在获取锁之前不允许执行同时代码。
16.什么是死锁(deadlock)?
两个进程都在等候对方执行完成才能继续往下执行的时候就发生了死锁。成果就是两个进程都陷入了无限的等候中。
17.怎样确保N个线程能够访问N个资源同时又不导致死锁?
使用多线程的时候,一个非常简单的防止死锁的方式就是:指定获取锁的次序,并强制线程按照指定的次序获取锁。因此,假如所有的线程都是以同样的次序加锁和释放锁,就不会出现死锁了。
Java集合类
18.Java集合类框架的基本接口有哪些?
Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:
1. Collection:代表一组对象,每一个对象都是它的子元素。 2. Set:不包括重复元素的Collection。
3. List:有次序的collection,并且能够包括重复元素。 4. Map:能够把键(key)映射到值(value)的对象,键不能重复。
5. 编程的时候接口优于实现。
6. 底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。
33.Enumeration接口和Iterator接口的区分有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。不过,Iterator远远比Enumeration安全,因为其他线程不能够修更正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不也许的。
34.HashSet和TreeSet有什么区分?
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()措施的时间复杂度是O(1)。
另首先,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()措施的时间复杂度是O(logn)。
垃圾搜集器(Garbage Collectors)
35.Java中垃圾回收有什么目标?什么时候进行垃圾回收?
垃圾回收的目标是识别并且丢弃应用不再使用的对象来释放和重用资源。
36.System.gc()和Runtime.gc()会做什么事情?
这两个措施用来提示JVM要进行垃圾回收。不过,立即开始还是延迟进行垃圾回收是取决于JVM的。
37.finalize()措施什么时候被调用?析构函数(finalization)的目标是什么?
在释放对象占用的内存之前,垃圾搜集器会调用对象的finalize()措施。一般提议在该措施中释放对象持有的资源。
38.假如对象的引用被置为null,垃圾搜集器是否会立即释放对象占用的内存?
不会,在下一个垃圾回收周期中,这个对象将是可被回收的。
39.Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分派内存。它在JVM开启的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾搜集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用能够访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾搜集器回收掉的对象。一直到垃圾搜集器把这些对象回收掉之前,他们会一直占据堆内存空间。
40.串行(serial)搜集器和吞吐量(throughput)搜集器的区分是什么?
吞吐量搜集器使用并行版本的新生代垃圾搜集器,它用于中等规模和大规模数据的应用程序。而串行搜集器对大多数的小应用(在当代处理器上需要大约100M左右的内存)就足够了。
41.在Java中,对象什么时候能够被垃圾回收?
当对象对目前使用这个对象的应用程序变得不可触及的时候,这个对象就能够被回收了。
42.JVM的永久代中会发生垃圾回收么?
垃圾回收不会发生在永久代,假如永久代满了或者是超出了临界值,会触发完全垃圾回收(Full GC)。假如你仔细查看垃圾搜集器的输出信息,就会发觉永久代也是被回收的。这就是为何正确的永久代大小对防止Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区
(译者注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)
异常处理
43.Java中的两种异常类型是什么?他们有什么区分?
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在措施或者是结构函数上申明,就算措施或者是结构函数的执行也许会抛出这么的异常,并且不受检查的异常能够传输到措施或者是结构函数的外面。相反,受检查的异常必须要用throws语句在措施或者是结构函数上申明。这里有Java异常处理的某些小提议。
44.Java中Exception和Error有什么区分?
Exception和Error都是Throwable的子类。Exception用于用户程序能够捕捉的异常情况。Error定义了不期望被用户程序捕捉的异常。 45.throw和throws有什么区分?
throw核心字用来在程序中明确的抛出异常,相反,throws语句用来表白措施不能处理的异常。每一个措施都必须要指定哪些异常不能处理,因此措施的调用者才能够确保处理也许发生的异常,多个异常是用逗号分隔的
applet安全管理器是给applet施加限制条件的一个机制。浏览器能够只有一个安全管理器。安全管理器在开启的时候被创建,之后不能被替代覆盖或者是扩展。
Swing
57.弹出式选择菜单(Choice)和列表(List)有什么区分
Choice是以一个紧凑的形式展示的,需要下拉才能看到所有的选项。Choice中一次只能选中一个选项。List同时能够有多个元素可见,支持选中一个或者多个元素。
58.什么是布局管理器?
布局管理器用来在容器中组织组件。
59.滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区分?
Scrollbar是一个组件,不是容器。而ScrollPane是容器。ScrollPane自己处理滚动事件。
60.哪些Swing的措施是线程安全的?
只有3个线程安全的措施: repaint(), revalidate(), and invalidate()。
61.说出三种支持重绘(painting)的组件。
Canvas, Frame, Panel,和Applet支持重绘。
62.什么是裁剪(clipping)?
限制在一个给定的区域或者形状的绘图操作就做裁剪。
63.MenuItem和CheckboxMenuItem的区分是什么?
CheckboxMenuItem类继承自MenuItem类,支持菜单项选择项能够选中或者不选中。
64.边缘布局(BorderLayout)里面的元素是怎样布局的?
BorderLayout里面的元素是按照容器的东西南北中进行布局的。
65.网格包布局(GridBagLayout)里面的元素是怎样布局的?
GridBagLayout里面的元素是按照网格进行布局的。不一样大小的元素也许会占据网格的多于1行或一列。因此,行数和列数能够有不一样的大小。
66.Window和Frame有什么区分?
Frame类继承了Window类,它定义了一个能够有菜单栏的主应用窗口。
67.裁剪(clipping)和重绘(repainting)有什么联系?
当窗口被AWT重绘线程进行重绘的时候,它会把裁剪区域设置成需要重绘的窗口的区域。
68.事件监听器接口(event-listener interface)和事件适配器(event-adapter)有什么关系?
事件监听器接口定义了对特定的事件,事件处理器必须要实现的措施。事件适配器给事件监听器接口提供了默认的实现。
69.GUI组件怎样来处理它自己的事件?
GUI组件能够处理它自己的事件,只要它实现相对应的事件监听器接口,并且把自己作为事件监听器。
70.Java的布局管理器比老式的窗口系统有哪些优势?
图样图
Java使用布局管理器以一个一致的方式在所有的窗口平台上摆放组件。因为布局管理器不会和组件的绝对大小和位置相绑定,因此他们能够适应跨窗口系统的特定平台的不一样。
71.Java的Swing组件使用了哪种设计模式?
Java中的Swing组件使用了MVC(视图-模型-控制器)设计模式。
74.Class.forName()措施有什么作用?
这个措施用来载入跟数据库建立连接的驱动。
75.PreparedStatement比Statement有什么优势?
PreparedStatements是预编译的,因此,性能会愈加好。同时,不一样的查询参数值,PreparedStatement能够重用。
76.什么时候使用CallableStatement?用来准备CallableStatement的措施是什么?
CallableStatement用来执行存储过程。存储过程是由数据库存储和提供的。存储过程能够接收输入参数,也能够有返回成果。非常激励使用存储过程,因为它提供了安全性和模块化。准备一个CallableStatement的措施是:
77.数据库连接池是什么意思?
像打开关闭数据库连接这种和数据库的交互也许是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。能够在应用服务器开启的时候建立诸多个数据库连接并维护在一个池中。连接祈求由池中的连接提供。在连接使用完成以后,把连接偿还到池中,以用于满足将来更多的祈求。
远程措施调用(RMI)
78.什么是RMI?
Java远程措施调用(Java RMI)是Java API对远程过程调用(RPC)提供的面对对象的等价形式,支持直接传输序列化的Java对象和分布式垃圾回收。远程措施调用能够看做是激活远程正在运行的对象上的措施的步骤。RMI对调用者是位置透明的,因为调用者感觉措施是执行在本地运行的对象上的。看下RMI的某些注意事项。
79.RMI体系结构的基本标准是什么?
RMI体系结构是基于一个非常重要的行为定义和行为实现相分离的标准。RMI允许定义行为的代码和实现行为的代码相分离,并且运行在不一样的JVM上。
80.RMI体系结构分哪几层?
RMI体系结构分如下几层:
存根和骨架层(Stub and Skeleton layer):这一层对程序员是透明的,它重要负责拦截客户端发出的措施调用祈求,然后把祈求重定向给远程的RMI服务。
远程引用层(Remote Reference Layer):RMI体系结构的第二层用来解析客户端对服务端远程对象的引用。这一层解析并管理客户端对服务端远程对象的引用。连接是点到点的。 传输层(Transport layer):这一层负责连接参加服务的两个JVM。这一层是建立在网络上机器间的TCP/IP连接之上的。它提供了基本的连接服务,尚有某些防火墙穿透方略。
81.RMI中的远程接口(Remote Interface)扮演了什么样的角色?
远程接口用来标识哪些措施是能够被非本地虚拟机调用的接口。远程对象必须要直接或者是间接实现远程接口。实现了远程接口的类应当申明被实现的远程接口,给每一个远程对象定义结构函数,给所有远程接口的措施提供实现。
82.java.rmi.Naming类扮演了什么样的角色?
java.rmi.Naming类用来存储和获取在远程对象注册表里面的远程对象的引用。Naming类的每一个措施接收一个URL格式的String对象作为它的参数。
83.RMI的绑定(Binding)是什么意思?
绑定是为了查询找远程对象而给远程对象关联或者是注册以后会用到的名称的过程。远程对象能够使用Naming类的bind()或者rebind()措施跟名称有关联。
84.Naming类的bind()和rebind()措施有什么区分?
bind()措施负责把指定名称绑定给远程对象,rebind()措施负责把指定名称重新绑定到一个新的远程对象。假如那个名称已经绑定过了,先前的绑定会被替代掉。
85.让RMI程序能正确运行有哪些步骤?
为了让RMI程序能正确运行必须要包括如下几个步骤:
1. 编译所有的源文献。 2. 使用rmic生成stub。 3. 开启rmiregistry。 4. 开启RMI服务器。 5. 运行客户端程序。
86.RMI的stub扮演了什么样的角色?
远程对象的stub扮演了远程对象的代表或者代理的角色。调用者在本地stub上调用措施,它负责在远程对象上执行措施。当stub的措施被调用的时候,会经历如下几个步骤:
1. 初始化到包括了远程对象的JVM的连接。 2. 序列化参数到远程的JVM。 3. 等候措施调用和执行的成果。
4. 反序列化返回的值或者是措施没有执行成功情况下的异常。 5. 把值返回给调用者。
91.什么是Servlet?
Servlet是用来处理客户端祈求并产生动态网页内容的Java类。Servlet重要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。
92.说一下Servlet的体系结构。
所有的Servlet都必须要实现的核心的接口是javax.servlet.Servlet。每一个Servlet都必须要直接或者是间接实现这个接口,或者是继承javax.servlet.GenericServlet或者
javax.servlet.http.HTTPServlet。最后,Servlet使用多线程能够并行的为多个祈求服务。
93.Applet和Servlet有什么区分?
Applet是运行在客户端主机的浏览器上的客户端Java程序。而Servlet是运行在web服务器上的服务端的组件。applet能够使用用户界面类,而Servlet没有用户界面,相反,Servlet是等候客户端的HTTP祈求,然后为祈求产生响应。
94.GenericServlet和HttpServlet有什么区分?
GenericServlet是一个通用的协议无关的Servlet,它实现了Servlet和ServletConfig接口。继承自GenericServlet的Servlet应当要覆盖service()措施。最后,为了开发一个能用在网页上服务于使用HTTP协议祈求的Servlet,你的Servlet必须要继承自HttpServlet。这里有Servlet的例子。
95.解释下Servlet的生命周期。
对每一个客户端的祈求,Servlet引擎载入Servlet,调用它的init()措施,完成Servlet的初始化。然后,Servlet对象通过为每一个祈求单独调用service()措施来处理所有随日后自客户端的祈求,最后,调用Servlet(译者注:这里应当是Servlet而不是server)的destroy()措施把Servlet删除掉。
96.doGet()措施和doPost()措施有什么区分?
doGet:GET措施会把名值对追加在祈求的URL背面。因为URL对字符数目有限制,进而限制了用在客户端祈求的参数值的数目。并且祈求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPOST:POST措施通过把祈求参数值放在祈求体中来克服GET措施的限制,因此,能够发送的参数的数目是没有限制的。最后,通过POST祈求传递的敏感信息对外部客户端是不可见的。
97.什么是Web应用程序?
Web应用程序是对Web或者是应用服务器的动态扩展。有两种类型的Web应用:面对体现的和面对服务的。面对体现的Web应用程序会产生包括了诸多个标识语言和动态内容的交互的web页面作为对祈求的响应。而面对服务的Web应用实现了Web服务的端点(endpoint)。一般来说,一个Web应用能够当作是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。
98.什么是服务端包括(Server Side Include)?
服务端包括(SSI)是一个简单的解释型服务端脚本语言,大多数时候仅用在Web上,用servlet标签嵌入进来。SSI最常用的场景把一个或多个文献包括到Web服务器的一个Web页面中。当浏览器访问Web页面的时候,Web服务器会用对应的servlet产生的文本来替代Web页面中的servlet标签。
99.什么是Servlet链(Servlet Chaining)?
Servlet链是把一个Servlet的输出发送给另一个Servlet的措施。第二个Servlet的输出能够发送给第三个Servlet,依次类推。链条上最后一个Servlet负责把响应发送给客户端。
100.怎样懂得是哪一个客户端的机器正在祈求你的Servlet?
ServletRequest类能够找出客户端机器的IP地址或者是主机名。getRemoteAddr()措施获取客户端主机的IP地址,getRemoteHost()能够获取主机名。看下这里的例子。
101.HTTP响应的结构是怎么样的?
HTTP响应由三个部分组成:
状态码(Status Code):描述了响应的状态。能够用来检查是否成功的完成了祈求。祈求失败的情况下,状态码可用来找出失败的原因。假如Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。
HTTP头部(HTTP Header):它们包括了更多有关响应的信息。例如:头部能够指定以为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。怎样在Serlet中检索HTTP的头部看这里。
主体(Body):它包括了响应的内容。它能够包括HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部背面的数据字节组成的。
102.什么是cookie?session和cookie有什么区分?
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文献中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发祈求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区分:
1. 无论客户端浏览器做怎么样的设置,session都应当能正常工作。客户端能够选择
禁用cookie,不过,session仍然是能够工作的,因为客户端无法禁用服务端的session。
2. 在存储的数据量方面session和cookies也是不一样样的。session能够存储任意的
Java对象,cookie只能存储String类型的对象。
103.浏览器和Servlet通信使用的是什么协议?
浏览器和Servlet通信使用的是HTTP协议。
104.什么是HTTP隧道?
HTTP隧道是一个利用HTTP或者是HTTPS把多个网络协议封装起来进行通信的技术。因此,HTTP协议扮演了一个打通用于通信的网络协议的管道的包装器的角色。把其他协议的祈求掩盖成HTTP的祈求就是HTTP隧道。
105.sendRedirect()和forward()措施有什么区分?
sendRedirect()措施会创建一个新的祈求,而forward()措施只是把祈求转发到一个新的目标上。重定向(redirect)以后,之前祈求作用域范围以内的对象就失效了,因为会产生一个新的祈求,而转发(forwarding)以后,之前祈求作用域范围以内的对象还是能访问的。一般以为sendRedirect()比forward()要慢。
106.什么是URL编码和URL解码?
URL编码是负责把URL里面的空格和其他的特殊字符替代成对应的十六进制表示,反之就是解码。
JSP
107.什么是JSP页面?
JSP页面是一个包括了静态数据和JSP元素两种类型的文本的文本文档。静态数据能够用任何基于文本的格式来表示,例如:HTML或者XML。JSP是一个混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。
108.JSP祈求是怎样被处理的?
浏览器首先要祈求一个以.jsp扩展名结尾的页面,发起JSP祈求,然后,Web服务器读取这个祈求,使用JSP编译器把JSP页面转化成一个Servlet类。需要注意的是,只有当第一次祈求页面或者是JSP文献发生变化的时候JSP文献才会被编译,然后服务器调用servlet类,处理浏览器的祈求。一旦祈求执行结束,servlet会把响应发送给客户端。这里看下怎样在JSP中获取祈求参数。
109.JSP有什么优点?
面列出了使用JSP的优点:
1. JSP页面是被动态编译成Servlet的,因此,开发者能够很轻易的更新展当代码。 2. JSP页面能够被预编译。
3. JSP页面能够很轻易的和静态模板结合,包括:HTML或者XML,也能够很轻易的
和产生动态内容的代码结合起来。
4. 开发者能够提供让页面设计者以类XML格式来访问的自定义的JSP标签库。 5. 开发者能够在组件层做逻辑上的变化,而不需要编辑单独使用了应用层逻辑的页面。
110.什么是JSP指令(Directive)?JSP中有哪些不一样类型的指令?
Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。Directive用来设置页面级别的指令,从外部文献插入数据,指定自定义的标签库。Directive是定义在<%@ 和 %>之间的。下面列出了不一样类型的Directive:
1. 包括指令(Include directive):用来包括文献和合并文献内容到目前的页面。 2. 页面指令(Page directive):用来定义JSP页面中特定的属性,例如错误页面和缓冲
区。
3. Taglib指令: 用来申明页面中使用的自定义的标签库。
111.什么是JSP动作(JSP action)?
JSP动作以XML语法的结构来控制Servlet引擎的行为。当JSP页面被祈求的时候,JSP动作会被执行。它们能够被动态的插入到文献中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:
1. jsp:include-当JSP页面被祈求的时候包括一个文献。 2. jsp:useBean-找出或者是初始化Javabean。 3. jsp:setProperty-设置JavaBean的属性。 4. jsp:getProperty-获取JavaBean的属性。 5. jsp:forward-把祈求转发到新的页面。 6. jsp:plugin-产生特定浏览器的代码。
112.什么是Scriptlets?
JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户能够添加任意有效的scriplet。
113.申明(Decalaration)在哪里?
申明跟Java中的变量申明很相同,它用来申明随即要被体现式或者scriptlet使用的变量。添加的申明必须要用开始和结束标签包起来。
面列出了使用JSP的优点:
1. JSP页面是被动态编译成Servlet的,因此,开发者能够很轻易的更新展当代码。 2. JSP页面能够被预编译。
3. JSP页面能够很轻易的和静态模板结合,包括:HTML或者XML,也能够很轻易的
和产生动态内容的代码结合起来。
4. 开发者能够提供让页面设计者以类XML格式来访问的自定义的JSP标签库。 5. 开发者能够在组件层做逻辑上的变化,而不需要编辑单独使用了应用层逻辑的页面。
110.什么是JSP指令(Directive)?JSP中有哪些不一样类型的指令?
Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。Directive用来设置页面级别的指令,从外部文献插入数据,指定自定义的标签库。Directive是定义在<%@ 和 %>之间的。下面列出了不一样类型的Directive:
1. 包括指令(Include directive):用来包括文献和合并文献内容到目前的页面。 2. 页面指令(Page directive):用来定义JSP页面中特定的属性,例如错误页面和缓冲
区。
3. Taglib指令: 用来申明页面中使用的自定义的标签库。
111.什么是JSP动作(JSP action)?
JSP动作以XML语法的结构来控制Servlet引擎的行为。当JSP页面被祈求的时候,JSP动作会被执行。它们能够被动态的插入到文献中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:
1. jsp:include-当JSP页面被祈求的时候包括一个文献。 2. jsp:useBean-找出或者是初始化Javabean。 3. jsp:setProperty-设置JavaBean的属性。 4. jsp:getProperty-获取JavaBean的属性。 5. jsp:forward-把祈求转发到新的页面。 6. jsp:plugin-产生特定浏览器的代码。
112.什么是Scriptlets?
JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户能够添加任意有效的scriplet。
113.申明(Decalaration)在哪里?
申明跟Java中的变量申明很相同,它用来申明随即要被体现式或者scriptlet使用的变量。添加的申明必须要用开始和结束标签包起来。
展开阅读全文