JavaWebJ2EE面试题及答案

1、JSP如何处理运行时异常run-timeexceptions?

可以使用页面的errorPage属性捕获没有处理的运行时异常,然后自动转向到一个错误处理页面,代码如下:

如果在页面请求时出现运行时异常是,以上代码会把页面转向到JSP页面error.jsp,在error.jsp里面,可以通过以下代码定义这个页面是错误处理页:

< %@ page isErrorPage=”true” %>

这样描述错误信息的Throwable对象就可以在error.jsp页面里面访问到。

2、JSP页面是如何被执行的?JSP执行效率比Servlet低吗?

当客户端向一个JSP页面发出请求时,Web Container将JSP转化成Servlet的源代码只在第一次请求时,然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。

JSP只在第一次执行的时候会转化为Servlet,以后每次执行Web容器都是直接执行编译后的Servlet,所以JSP和Servlet只是在第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。

3、如果jsp表单元素的值为空,如何避免null出现在页面上?

可以写一个简单的函数对空值进行处理,判断值是否为空,如果是空就返回空字符串。实例代码如下:

< %! String blanknullString s{ return s == null ? “” : s; } %>

在你的JSP里面,可以使用以上函数输出文本框或者其他页面元素的值,实例代码如下:

4、如何避免JSP页面自动生成session对象?为什么要这么做?

在默认情况下,在对一个JSP页面发出请求时,如果session还没有建立,JSP页面会自动为请求建立一个session对象,但是session是比较消耗资源的,如果没必要保持和使用session,就不应该创建session,

例如一些只是用来宣传产品的网站,往往没必要使用session来保存信息,可以使用jsp页面指令session=”false”来避免JSP页面为每个请求都自动创建session.实例代码如下:

< %@ page session=”false”>

5、在servlets和JSP之间能共享session对象吗?

当然可以,

HttpSession session = request.getSessiontrue;

session.putValue”variable”,”value”;

6、Servlet都有哪些方法?主要作用是什么?

HttpServlet 类包含 init 、 destroy 、 service 等方法。其中 init 和 destroy 方法是继承的。

1 init 方法

在 Servlet 的生命期中,仅执行一次 init 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet 。 无论有多少客户机访问 Servlet ,都不会重复执行 init 。

缺省的 init 方法通常是符合要求的,但也可以用定制 init 方法来覆盖它,典型的是管理服务器端资源。 例如,可能编写一个定制 init 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的 init 方法设置了 Servlet 的初始化参数,并用它的

ServletConfig 对象参数来启动配置, 因此所有覆盖 init 方法的Servlet 应调用 super.init 以确保仍然执行这些任务。在调用 service 方法之前,应确保已完成了 init 方法。

2 service 方法

service 方法是 Servlet 的核心。每当一个客户请求一个 HttpServlet 对象,该对象的 service 方法就要被调用,而且传递给这个方法一个“请求” ServletRequest 对象和一个“响应” ServletResponse 对象作为参数。 在 HttpServlet 中已存在 service 方法。缺省的服务功能是调用与

HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET ,则缺省情况下就调用doGet 。 Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service 方法。只需覆盖相应的 do 方法就可以了。

= 当一个客户通过 HTML 表单发出一个 HTTP POST 请求时, doPost 方法被调用。 与 POST 请求相关的参数作为一个单独的 HTTP请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost 方法。

= 当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时, doGet 方法被调用。 与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet 方法。

Servlet 的响应可以是下列几种类型:

一个输出流,浏览器根据它的内容类型如 text/HTML 进行解释。

一个 HTTP 错误响应 , 重定向到另一个 URL 、 servlet 、 JSP 。

3 destroy 方法

destroy 方法仅执行一次,即在服务器停止且卸装 Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy 方法,该方法用于在未装入 Servlet

时将统计数字保存在文件中。另一个示例是关闭数据库连接。

当服务器卸装 Servlet 时,将在所有 service 方法调用完成后,或在指定的时间间隔过后调用 destroy 方法。一个 Servlet 在运行 service 方法时可能会产生其它的线程,因此请确认在调用 destroy 方法时,这些线程已终止或完成。

4 GetServletConfig方法

GetServletConfig 方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext 。 ServletContext 接口提供有关 servlet 的环境信息。

5 GetServletInfo方法

GetServletInfo 方法是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。

当服务器调用 sevlet 的 Service 、 doGet 和 doPost 这三个方法时,均需要 “请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。 javax.servlet 软件包中的相关类为 ServletResponse 和 ServletRequest ,而

javax.servlet.http 软件包中的相关类为 HttpServletRequest 和 HttpServletResponse 。 Servlet 通过这些对象与服务器通信并最终与客户机通信。 Servlet 能通过调用“请求”对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。 Servlet

可以调用“响应”对象的方法发送响应,该响应是准备发回客户机的。

7、Java Servlet的主要功能和作用是什么?

Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet ,并让 Servlet 建立起服务器返回给客户机的’响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet 。装入后, Servlet 继续运行直到其它客户机发出请求。 Servlet

的功能涉及范围很广。例如, Servlet 可完成如下功能:

1 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML 页面。

2 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面 HTML 片段。

3 与其它服务器资源包括数据库和基于 Java 的应用程序进行通信。

4 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如, Servlet 可

以是多参与者的游戏服务器。

5 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至 applet 的新连接,并将该连

接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下, applet 也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准如 IIOP 进行通信。

6 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括 SSI 。

7 将定制的处理提供给所有服务器的标准例行程序。例如, Servlet 可以修改如何认证用户。

8、Request对象的主要方法有哪些?

setAttributeString name,Object:设置名字为name的request的参数值

getAttributeString name:返回由name指定的属性值

getAttributeNames:返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies:返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding:返回请求中的字符编码方式

getContentLength:返回请求的Body的长度

实例

getInputStream:返回请求的输入流,用于获得请求中的数据

getMethod:获得客户端向服务器端传送数据的方法

getParameterString name:获得客户端传送给服务器端的有name指定的参数值

getParameterNames:获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValuesString name:获得有name指定的参数的所有值

getProtocol:获取客户端向服务器端传送数据所依据的协议名称

getQueryString:获得查询字符串

getRequestURI:获取发出请求字符串的客户端地址

getRemoteAddr:获取客户端的IP地址

getRemoteHost:获取客户端的名字

getSession[Boolean create]:返回和请求相关Session

getServerName:获取服务器的名字

getServletPath:获取客户端所请求的脚本文件的路径

getServerPort:获取服务器的端口号

removeAttributeString name:删除请求中的一个属性

9、使用JSP连接到数据库连接缓冲池的最好方法是什么?

1.使用JDBC2。0中带有此服务的Driver

2.使用提供有此服务的Application server

3.自己写

10、在JSP中如何写文本文件?

使用PrintWriter对象,如:

< %@ page import=”java.io.*” %>
< % String str = “print me”; String nameOfTextFile = “/usr/anil/imp.txt”; try { PrintWriter pw = new PrintWriternew FileOutputStreamnameOfTextFile; pw.printlnstr; pw.close; }
catchIOException e { out.printlne.getMessage; } %>

11、JSP的缺点?

1.对JAVA程序进行调试没有好东东

2.因大多数的servlet引擎不支持connection pooling

3.Servlet引擎没有标准

4.JSP与其它脚本语言的交互

12、在JSP中如何删除一个COOKIE?

< % Cookie killMyCookie = new Cookie”mycookie”, null; killMyCookie.setMaxAge0; killMyCookie.setPath”/”; response.addCookiekillMyCookie; %>

13、如何现实servlet的单线程模式?

< %@ page isThreadSafe=”false”%>

14、说出Servlet和CGI的区别?

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

15、Servlet的生命周期?

Servlet是一种可以 在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命 周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init、service和destroy三个方法。生 命周期的具体说明如下:

Servlet容器完成加载Servlet类和实例化一个Servlet对象

init方法完成初始化工作,该方法由Servlet容器调用完成

service方法处理客户端请求,并返回响应结果

destroy方法在Servlet容器卸载Servlet之前被调用,释放一些资源

16、介绍一下javax.servlet.Servlet接口及其主要方法?

Servlet接口的主要作用是提供Servlet生命周期的init、service和destroy方法。

servlet接口中的主要方法有:

void initServletConfit configthrows ServletException

在servlet被载入后和实施服务前由servlet引擎进行一次性调用。如果init产生溢出UnavailableException,则 servle退出服务。

ServletConfig getServletConfig

返回传递到servlet的init方法的ServletConfig对象

void serviceServletRequest request, ServletResponse responsethrows ServletException,IOException

处理request对象中描述的请求,使用response对象返回请求结果

String getServletInfo

返回描述servlet的一个字符串

void destory

当servlet将要卸载时由servlet引擎调用,销毁Servlet实例。

17、HttpServlet类中的主要方法都有哪些?各自的作用是什么?

HttpServlet的主要方法有 doGet, doPost, doPut, doDelete, doTrace等等

Void doGetHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。

Void doPostHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。

Void doPutHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP PUT请求。本方法中请求URI指出被载入的文件位置。

Void doDeleteHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP DELETE请求。请求URI指出资源被删除。

Void doOptionsHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个servlet不需要覆盖此方法,因为 HttpServlet方法已经实现规范所需的功能。

Void doTraceHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

由servlet引擎调用用处理一个HTTP TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现HTTP规范所需的功能。

Void serviceHttpServletRequest request,HttpServletResponse responsethrows ServletException,IOException

ServiceRequest request,Response response调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导向doGet、doPost等等。不应该覆盖此方法。

Void serviceRequest request,Response responsethrows ServletException,IOException

将请求和响应对象置入其指定的HTTP子类,并调用指定HTTP的service方法。

18、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

a: 两种形式 dtd schema,

b: 本质区别:schema本身是xml的,可以被XML解析器解析这也是从DTD上发展schema的根本目的。

c:有DOM,SAX,STAX等

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问;SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标

签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

API for XML StAX

19、你在项目中用到了xml技术的哪些方面?如何实现的?

用到了数据存储,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存储在XML文件中。