第一部分Servlet/JSP快速入门
1. 请列举至少6种JavaEE技术,并简述其作用。
参考答案
(1) JDBC(Java DatabaseConnectivity):用来访问数据库的API。
(2) Java Servlet:是一种小型的Java程序,扩展了Web服务器的功能。
(3) JSP(Java Server Pages):JSP页面由HTML代码和嵌入其中的Java代码组成,用来实现动态视图。
(4) JNDI(Java Name and DirectoryInterface):JNDI API被用于访问名字和目录服务。
(5) EJB(Enterprise JavaBean):实现业务逻辑的组件,可以构建分布式系统。
(6) RMI(Remote Method Invoke):调用远程对象方法。
(7) Java IDL/CORBA:将Java 和CORBA 集成在一起。
(8) XML(Entersible Markup Language):可以用来定义其他标记语言的语言。
(9) JMS(Java Message Service):用于和消息中间件相互通讯的API。
(10)JTA(Java Transaction Architecture):一种标准的API,可以访问各种事务管理器。
(11)JTS(Java Transaction Service) :是CORBA OTS事务监控的基本实现。
(12)JavaMail:用于存取邮件服务器的API。
(13)JAF(JavaBeans Activation Framework):JavaMail利用JAF来处理MIME编码的邮件附件。
2. 在web.xml中配置Servlet时,主要配置哪些信息?
参考答案 配置Servlet时,主要配置<servlet>以及<servlet-mapping>,如以下所示:
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.etc.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
3. 如果通过一个超级链接访问Servlet,默认调用Servlet中的哪个方法提供服务?
参考答案 默认调用doGet方法提供服务。
4. 如果一个表单<form>没有显示指定method属性值,那么默认使用什么方式提交请求?
参考答案 默认使用Get 方式。
5. 请求接口中的哪个方法可以返回请求参数的值?哪个方法可以把请求参数的多个值同时返回?
参考答案 请求接口中的getParameter方法可以返回某一个请求参数的值,getParameterValues方法可以把某个请求参数的多个值同时返回,封装到一个数组中,例如复选框的多个值。
6. 响应接口中的哪个方法可以设置内容类型?用简单代码演示。
参考答案 响应中的setContentType的方法可以设置内容类型,如下所示:
//设计响应的内容类型
Response.setContentType(“text/html;charset=gb2312”);
上述代码中设置响应的内容类型是text或者html,编码格式是gb2312。
7. 简述JSP的运行过程。
参考答案
(1) 容器将JSP翻译成符合Servlet规范的类。
(2) 容器编译JSP生成的类。
(3) 容器初始化JSP实例。
(4) 将请求和响应对象传递给JSP实例的服务方法,提供服务。
8. JSP中的<% %>和<%= %>有什么区别?
参考答案 <% %>称为脚本片段,可以包含任何符合语法的Java代码,可以同时包含多行代码。而<%= %>称为表达式,=号后面是一个表达式,这个表达式的值将被输出到浏览器中,表达式后面不用使用分号结束,而且每个<%= %>只能包含一个表达式。
9. JDBC编程中主要有哪几种语句对象?有什么区别?
参考答案 JDBC中主要有一下3种语句对象:
(1) Statement:Statement:是所有语句对象的父接口,定义了语句对象的规范。
(2) PreparedStatement:预编译的语句对象,将待执行的语句进行预编译,可以在执行时动态指定SQL语句中的参数。
(3) CallableStatement:可以用来调用数据库的存储过程。、
10. 简述使用JDBC操作数据库的主要步骤。
参考答案
(1) 加载驱动类;
(2) 获得连接对象;
(3) 获得语句对象;
(4) 执行SQL语句,如果是查询语句,需要处理结果集。
(5) 关闭结果集、语句对象、数据库连接对象。
11..说明MVC模式的含义,应用图表示Web应用中MVC模式中每部分之间的关系。
参考答案 MVC本来应用于桌面程序中,M是指数据模型,V是指用户界面,C则是控制器,至今已被广泛使用。使用MVC的目的则是将M和V的实现代码分离,从而使用一个程序可以使用不同的表达式。C存在的目的这是确保M和V的同步,一旦M改变,V应该同步更新。MVC模式是近些年被JavaEE平台广泛使用的设计模式。Web应用中的MVC模式与桌面程序中的MVC模式有所不同。由于Web应用大多基于请求响应模式,因此往往做不到“一旦M改变,V应该同步更新”
第二部分 详解Servlet组件开发
1. 请说明Servlet的生命周期。
参考答案
阶段一 初始化
客户端第一次访问Servlet,或者容器加载应用时(配置<load-on-startup>),容器调用Servlet类的构造方法,实例化一个Servlet对象,该对象存在于服务器端内存中,容器将启动多线程并发访问该对象。实例化结束后,将对Servlet实例进行初始化,先调用init(ServletConfig)方法,在调用init()方法。
阶段二 提供服务
Servelet初始化成功后,容器调用Servlet接口中定义的service(ServletRequest req,ServletResponse res)的方法。service方法将请求和响应对象转换成HttpServletRequest 和 HttpServletResponse对象,调用HttpServlet类中定义的service(HttpServletRequestreq,HttpServletResponse resp)方法。HttpServlet中的service方法,将请求根据请求方式转发给对应的doXXX方法,如doGet、doPost。
阶段三 销毁
Servlet提供服务结束,或者一段时间过后,容器将销毁Servlet实例。销毁Servlet实例前,容器先调用Servlet接口中定义的destroy方法,允许完成一些自定义操作。
2. 什么是Servlet的初始化参数?如何配置?如何在程序中获得?
参考答案 Servlet的初始化参数值的是初始化Servlet实例时的参数,可以再web.xml中进行配置,如下所示:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.etc.TestServlet</servlet-class>
<init-param>
<param-name>level</param-name>
<param-value>2.1</param-value>
</init-param>
</servlet>
上述配置中,使用<init-param>为TestServlet配置了一个名字为level的初始化参数,值为2.1。可以使用多个<init-param>元素配置多个初始化参数。在TestServlet中,可以直接调用getInitParameter(“level”)方法返回该参数的值。
3. 请列出请求接口中至少三个获得求头方法。
参考答案 getHeader 方法可以根据请求头名字获得请求头值;getIntHeader方法用来返回整形请求头的值;getDataHeader 方法用来返回日期类型请求头的值;
4. 响应接口中的addHeader方法和setHeader方法的区别。
参考答案 addHeader方法用来向响应中添加一个头,如果该头的名字已经存在,那么允许一个头包含多个值;setHeader方法向响应中添加一个头信息,如果头存在,则覆盖已有的值。
5. Servlet跳转到JSP常常有两种方法:一种称为响应重定向,一种称为请求转发。请求用代码展示两种方法,并说明其区别。
参考答案
响应重定向:response.sendRedirect(“index.jsp”);
请求转发:request.getRequestDispatcher(“index.jsp”).forward(request,response);
响应重定向相当于让客户端向重定向的资源重新发出一个请求,当前请求中的信息无法传递到下一个资源。而请求转发相当于把当前的请求转发到下一个资源,当前请求中的信息将可以传递到下一个资源。
6. 请求接口中提供了处理属性的方法,请列举每个方法并说明其作用。
参考答案 请求接口中有三个和属性有关的方法,分别是:setAttribute(String,Object),可以将一个对象设置一个名字,储存到请求中;getAttribute(String),可以根据属性的名字返回属性值:removeAttribute(String),可以根据属性的名字删除属性。
7. cookie有什么作用?如何使用Servlet 的 API返回请求中的cookie?如何将cookie保存到客户端?
参考答案 cookie 用来将一些信息保存到客户端,以备用户下次访问同一应用时,能够自动将这些信息发送到服务器端。服务器端通过使用cookie编程,能够提高用户体验。请求接口中提供了getCookies方法返回说有cookie,响应接口中提供了addCookie方法能够将cookie对象返回客户端。
8. 如何获得会话对象?请用简单代码展示
参考答案 可以通过请求对象获得会话对象,如request.getSessioin()。如果当前存在会话,直接返回使用;如果不存在,则创建一个新的会话返回。还有一个重载的getSession方法,具有一个boolean类型的参数,其中request.getSession(true)和request.getSession()完全相同,而request.getSession(false)意思是如果存在会话对象就返回使用,如果不存在则返回null。
9. 有哪几种方式可以设置会话有效时间?
参考答案 有两种方法可以设置会话的有效时间,一种是在web.xml中配置,如下所示:
<session-config>
<session-timeout>40</session-timeout>
</session-config>
使用这种方式设置的有效时间,是对当前应用中所有会话都有效,单位是分钟。
还有一种方式是使用HttpSession中的setMaxInactiveInterval(int)方法,这个方法能够设定最大不活动时间,超过这个时间会话没有被访问,即被容器销毁。这个方法只能控制调用该方法的会话对象,不会对所有会话对象生效。
10. 什么是URL重写?能解决什么问题?
参考答案 URL重写就是使用响应接口中的encodeURL(path)方法,把指定的path重新编码,将名字是JSESSIONID的cookie的值强制加到path对应的URL中,传值到服务器端,这样就能保证即使cookie被阻止,服务器端永远能得到会话对象的ID值,使得会话有效。
11. 会话接口中提供了处理会话属性的方法,请列举每个方法并说明其作用。
参考答案 会话接口中有三个和属性有关的方法,分别是setAttribute(String,Object),可以将一个对象设置一个名字,存储到会话中;getAttribute(String),可以根据属性的名字返回属性值;removeAttribute(String)可以根据属性的名字删除属性。
12. 什么是上下文对象?如何获得上下文对象?
参考答案 当容器启动时,会加载容器中的每一个应用,并且针对每一个应用创建一个对象,称为上下文对象。每个应用都只有一个唯一的上下文对象,Servlet API 中提供了ServletContext接口来表示上下文对象。要在Servlet中获得上下文对象非常简单,直接使用getServletContext()方法就可以返回当前的上下文对象,在JSP中可以直接使用application内置对象使用上下文。
13. 如何配置上下文参数?在程序中如何获得上下文参数?
参考答案 在web.xml中可以使用 <context-param>配置上下文参数,如下所示:
<context-param>
<param-name>path</param-name>
<param-value>/WEB-INF/props</param-value>
</context-param>
要获得上下文参数,可以使用ServletContext接口中的getInitParameter方法返回。
14. 上下文接口中提供了处理属性的方法,请列举每个方法并说明其作用。
参考答案 上下文接口中有三个和属性有关的方法,分别是:setAttribute(String,Object),可以将以个对象设置一个名字,存储到上下文范围中;getAttribute(String),可以根据属性的名字返回属性值;removeAttribute(String),可以根据属性的名字删除属性。
15. 说明请求属性、会话属性、上下文属性的区别
参考答案 请求属性是请求范围内的属性,除了请求转发外,只在当前的请求中有效;会话属性是会话范围内的属性,只要会话没有消失,就一直随着当前的会话存在;上下文属性是上下文范围的属性,只要容器没有重新加载应用,就一直随着上下文对象存在。应该尽量使用请求属性实现功能,只有在必须用会话属性或者必须用上下文属性时才考虑使用这两种属性。
16. 请说明ServletContextEvent什么场景下会被触发,及时如何处理。
参考答案 当上下文对象被初始化或者被销毁时,将触发ServletContextEvent。要处理该事件,可以自定义事件处理类实现ServletContextListener接口,然后覆盖该接口中的方法,实现处理逻辑。
17. 请说明HttpSessionEvent什么场景下会被触发,以及如何处理。
参考答案 当会话对象有变化的时候,将触发HttpSessionEvent事件发生,例如会话被创建、会话被销毁、会话被活化、会话被钝化。要处理该事件,有两个接口可以监听,分别是HttpSessionListener和HttpSessionActionListener。其中前者监听会话创建和销毁的情况,后者监听会话活化和钝化的情况。
18. 如何在web.xml中配置监听器,使监听器生效?
参考答案 在web.xml中,可以使用<listener>配置监听器,如下所示:
<listener>
<listener-class>com.etc.listener.CounterListener</listener-class>
</listener>
19. 简述监听器的开发配置步骤
参考答案
(1) 根据需求分析需要使用哪种监听器。
(2) 创建类实现监听接口,并实现接口中必要的方法,实现监听功能。
(3) 在 web.xml 中使用<listener>配置监听器。
20. 过滤器有什么作用?
参考答案 在Web应用中,往往需要一些通用的处理和控制,如果把这些通用的处理编写在每一个需要的资源文件中,代码就很冗余,且不好管理。只要需要修改,就得修改所有文件中的相关代码,造成维护困难。过滤器就是用来执行这些通用处理的程序,往往可以用来实现图像转换、数据压缩、登陆验证、权限控制等。
21. Filter接口中定义了哪几个方法?分别有什么作用?
参考答案 Filter接口中有以下三个方法:
(1) init(FilterConfigfilterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。
(2) doFilter(ServletRequestrequest, ServletResponse response,FilterChain chain):该方法是Filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
(3) destroy():该方法在容器销毁过滤器对象前被调用。
22. 简述过滤器的开发配置步骤。
参考答案
(1) 创建类实现Filter接口。
(2) 实现Filter接口中的方法,重点实现doFilter方法对请求和响应进行过滤。
(3) 在web.xml中配置过滤器,使用<filter>配置过滤器的类和名字,使用<filter-mapping>配置过滤器需要过滤的资源路径。
23. 过滤器配置中,<dispatcher>元素是什么含义?有几个可选值?
参考答案 <dispatcher>可以配置能够被过滤的URL的请求方式,有以下四个值可以使用:
(1) REQUEST:请求方式,是一种默认的方式。即不配置dispatcher选项时,默认过滤REQUEST方式请求的URL,包括在地址栏输入URL、表单提交、超级链接、响应重定向,但是如果指定了其他dispatcher值,REQUEST也必须显示指定才能生效。
(2) FORWARD:转发方式,表示可以过滤请求转发方式访问的URL。
(3) INCLUDE:包含方式,表示可以过滤动态包含的URL。
(4) ERROR:错误方式,表示可以过滤错误页面。
第三部分 详解JSP组件开发
1. 列举至少5个JSP内置对象,并说明其类型。
参考答案
(1) request.HttpServletRequest
(2) response.HttpServletResponse
(3) session.HttpServlet
(4) application.ServletContext
(5) pageContext:PageContext
(6) out:JspWriter
2. 说明<%@include%>和<jsp:include/>的区别
参考答案 <%@include%>是指令,是静态包含,在翻译期将把被包含的资源翻译到包含资源中,源代码合二为一。而<jsp:include/>是动作,是动态包含,在运行期动态访问被包含的资源,将生成的响应合二为一进行显示。
3. 列举page指令中至少3种常用属性,并说明其含义。
参考答案
(1) Import:用来导入需要使用类。
(2) pageEncoding:指定JSP页面的编码。
(3) errorPage:指定错误页面。
4. <jsp:forward>的含义是什么?
参考答案<jsp:forward>可以在JSP中实现请求转发,类似在Servlet中使用RequestDispatcher的forward方法进行请求转发。
5. 列举与JavaBean相关的3个标准动作,并说明其含义。
参考答案 与JavaBean相关的有以下三个标准动作
(1)<jsp:useBean>:用来获得或者创建JavaBean实例。
(2)<jsp:setProperty>:用来为JavaBean的属性赋值。
(3)<jsp:getProperty>用来显示JavaBean的属性值。
6.什么是EL?EL的主要作用是什么?
参考答案 EL是Expression Language 的简称,即表达式语言,主要用来代替表达式<%= %>,使得JSP更为简单。EL常常结合JSTL一起使用,发挥更强大的作用。
7.列举EL中4个与属性相关的内置对象,并说明含义。
参考答案
(1) pageScope:可以获得PageContext范围的属性。
(2) requestScope:获得请求范围的属性。
(3) sessionScope:获得会话范围的属性。
(4) applicationScope:获得上下文范围的属性。
8.如果web.xml中定义了一个名字为rate的上下文参数,在JSP中如何使用EL进行输出?
参考答案${initParam.rate}
9.EL中的内置对象pageContext,与其他内置对象有什么不同?
参考答案pageContext内置对象非常特殊,它是一个真正的PageContext类型的对象,只要PageContext中存在getXXX方法,就可以使用${pageContext.xxx}将getXXX方法的返回值进行输出。而其他的内置对象都没有这个特点,只能输出特定的信息。
10.EL中的.与[]有什么区别?
参考答案 EL中,使用.和[]都可以用来获得数据,然而某些情况下只能使用[],而不能使用圆点,有以下三种情况只能使用[]:
(1) 通过数组或集合的索引返回值,只能使用[];
(2) 属性值中包括-或者.等非字符或数字的字符,只能使用[];
(3) 属性值不是常量,而是变量时,只能使用[];
11. JSP中的自定义标记有什么作用?
参考答案 使用自定义标记,能够使得JSP文件结构简练,减少冗余代码,能够在多个地方使用自定义标记,达到重复使用的目的,同时也使得动态功能更容易管理、维护。
12. 简述开发自定义标记的主要步骤
参考答案
(1) 根据需求设计需要开发的标记。
(2) 在tld文件中描述标记的基本信息,包括标记名称、标记的属性、标记体的特征以及标记的处理器类等。
(3) 根据tld描述的信息开发标记处理器类,实现标记的功能。
13. 如何使用自定义标记?
参考答案
(1) 将自定义标记相关的tld文件引入到工程中,可以存放到WEB—INF目录下。
(2) 将自定义标记相关的jar文件引入到工程中,可以存放到WEB—INF\lib目录下。
(3) 在JSP文件中,使用taglib指令指定标记库的uri,并指定使用该标记库的前缀。
(4) 在JSP中需要使用标记的地方,利用前缀引用标记,传递属性即可使用。
14. 简述tld文件的主要作用。
参考答案 tld文件时标记库描述文件,主要描述了标记库的信息。主要包括标记名称、标记体的情况、标记中的属性、标记对应的处理器类。另外还会指定一个唯一的uri值,在JSP中使用标记库时就通过这个uri进行引用。
15. JSTL是什么?有什么作用?
参考答案 JSTL是原SUN公司定义的一套标准标签库,提供一些在Web应用中常用的标签,例如迭代数组或集合的标签。使用JSTL能够使得JSP代码更为简练,减少JSP中的Java代码量。这些标签能够在多个场合反复使用,提高了开发效率。
16. 如何使用JSTL?
参考答案
(1) 首先引入JSTL的tld文件和相关的jar文件。
(2) 在JSP中使用taglib指令指定要使用的tld和uri值,并自定义一个前缀。
(3) 在需要使用标记的地方,使用前缀引用标记,设置必要的属性即可。
17. 假设存在一个会话属性list,list是泛型为Customer的集合对象,Customer中包含custname、age、address三个属性。请使用JSTL中的迭代标记遍历该list,将集合中的数据显示到表格的行中。
参考答案
<c:forEach items=”${sessionScope.list}”var=”cust”>
<tr>
<td>${cust.custname}</td>
<td>${cust.age}</td>
<td>${cust.address}</td>
</tr>
</c:forEach>
18. 如何在web.xml中配置异常处理?
参考答案 在web.xml中配置异常处理的方式如下:
<error-page>
<exception-type>com.etc.exception.RegisterException</exception-type>
<location>/register.jsp</location>
</error-page>
上述配置后,当发生了RegisterException却没有被捕获时,跳转到register.jsp页面进行处理。
第四部分 高级主题
1. Log4j有什么作用?
参考答案 Log4j和Apache的一个开源项目,使用Log4j可以便捷地控制日志信息输出的目的地,包括控制台、文件、GUI组件以及NT事件记录器等。同时,Log4j可以控制每一条日志信息的输出格式,也能够通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。
2. Log4j主要由哪三部分组成?每部分的主要作用是什么?
参考答案 Log4j包含三个主要组成部分,即Logger、Appender以及Layout。其中Logger是日志记录器,是Log4j的核心组件;一个Logger可以指定多个Appender,Appender用来指定日志信息的输出的目的地,可以是文件、控制台或消息文件等;一个Appender又可以指定一个Layout,Layout用来指定日志信息的格式,可以使HTML、简单文本等。
3. 列举至少3中Log4j的输出目的地,并说明含义。
参考答案
(1) org.apache.log4j.ConsoleAppender:将日志信息输出到控制台,如果Logger没有使用addAppender显示添加Appender,默认使用ConsoleAppender。、
(2) org.apache.log4j.FileAppender:将日志信息输入一个文件。
(3) org.apache.log4j.DailyRollingFileAppender:将日志信息输出到一个日志文件,并且根据指定的模式,可以按照一定日期时间段将日志信息输出到一个新的日志文件。
4. 使用properties文件配置Log4j属性,要求日志级别为debug,目的地为文件,格式为HTML。
参考答案
log4j.rootLogger=debug.appender1
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.Threshold=debug
log4j.appender.appender1.ImmediateFlush=true
log4j.appender.appender1.File=log.html
log4j.appender.appender1.Append=true
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
log4j.appender.appender1.layout.LocationInfo=true
log4j.appender.appender1.layout.Title=LogMessage
5. 在Web应用中使用Log4j记录日志,往往有哪些方法加载属性文件?
参考答案 在Web应用中加载Log4j的属性文件往往有以下两种方式:
(1) 定义一个Servlet,并使用<load-on-startup>在web.xml中配置这个Servlet,使得应用加载时就初始化这个Servlet,从而可以在这个Servlet的init方法中加载Log4j属性文件。只要加载了应用,就会初始化Servlet,就会调用init方法,从而就会加载属性文件。
(2) 定义一个上下文事件监听器,在监听器的contextInitialized方法中加载Log4j属性文件。这样能够保证只要加载了应用,就会触发上下文事件,从而调用监听器中的contextInitialized方法,加载Log4j属性文件。
6. Ajax是什么含义?有什么作用?
参考答案 Ajax是“Asynchronous JavaScript and XML“的简称,即异步的JavaScript和XML。
Ajax就是能够在Web浏览器中实现与桌面应用类似客户端的技术。例如,使用Ajax技术后,服务器端不会每次返回一个完整页面,而会返回一部分文本,只刷新页面的一部分,不需要等待整个页面刷新;使用Ajax可以异步提交,不需要必要等待服务器端响应后才进行其他操作。可以说,Ajax试图在Web应用中实现桌面应用的功能和交互性,并能够使用和桌面应用中类似友好界面和漂亮控件。
7. Ajax中的XMLHttpRequest对象有哪些作用?
参考答案 XMLHttpRequest是Ajax技术的核心对象,使用Ajax技术都是从XMLHttpRequest对象开始。在Ajax应用程序中,XMLHttpRequest对象负责将用户信息以异步方式发送到服务器端,并接收服务器响应的信息和数据。
8. 什么是DOM?有什么作用?
参考答案 DOM是Document Object Model 的简称,即文档对象模型,是利用HTML和XML文档的API。DOM提供了文档的结构化表示,把网页和脚本或编辑语言连接了起来,可以修改文档的内容和视觉表现。使用Ajax编程时,从服务器端返回的内容需要更新到客户端页面中,就可以使用DOM对象操作浏览器内容,进行局部刷新。
9. JSF框架的主要特点是什么?
参考答案 JSF是一种以组件为中心来开发Java Web应用框架。JSF提供了一组用户界面组件,这些组件式可重用的,开发员可以利用这些组件方便地构建Web应用的用户界面;JSF框架支持开发自定义的用户界面组件,而且这些自定义用户界面组件同样可以重用。另外,使用JSF框架,可以方便地进行输入校验、国际化编程等。