Java EE知识体系

来源:互联网 发布:谷歌优化 编辑:程序博客网 时间:2024/04/26 06:10

本文记录了我在大学期间学习《Java EE》这门课程的大部分知识,对于没接触过Java EE的人来说,可以作为一个浅显的入门,当然这篇博客的内容毕竟只是冰山一角,如需深入学习方得结合其他资料。

Chapter 1
一.什么是Java EE组件?
J2EE应用是由组件组成,J2EE组件是一个独立的功能软件单元(如独立完成某个功能的JSP,JavaBean,servlet等类文件均为一个组件),它与其他相关的类别和文件被组装到一个J2EE应用中(其他文件包括如图片资源、FLASH、CSS格式控制等),并且和其他组件进行通信(如利用请求的分派forward,重定向,Session,Cookies等技术进行通信)。JavaEE组件使用java语言编写,JavaEE组件和标准Java类的不同之处在于Java EE组件需要组装到 JavaEE应用中,需要被验证是否合乎格式并遵循JavaEE规范,并且会部署到生产环境,通过JavaEE服务器来运行和管理。

二.列出JavaEE服务器中所有的容器,并给出所有容器的定义?
JavaEE共提供了四种容器:
应用客户端容器、小应用程序容器、Web容器、企业JavavBeans(EJB)容器。
①应用客户端容器:管理应用客户端组件的执行,应用客户端和他们的容器运行于客户端上。
②小应用程序容器:管理小应用程序的执行,由共同运行在客户端的Web浏览器和Java插件组成。
③Web容器:为JavaEE应用管理JSP页面和servlet组件的执行,Web组件和它们的容器运行于Java EE服务器上。
④企业JavaBeans(EJB)容器:为Java EE应用管理企业Bean的执行,企业Bean和它们的容器运行于Java EE服务器上。

三.描述所有的JavaEE组件?
J2EE组件包括:
(1)运行在客户端的组件:可以是一个Web浏览器、一个Applet,也可以是一个普通的客户端Java 应用程序。
(2)运行在服务器上的Web技术组件,主要包括:Java Servlet 和 JSP,JSF等。
(3)运行在服务器上的EJB业务组件:Session Bean(会话 Bean),Entity Bean(实体 Bean)和 Message-Driven Bean(消息驱动 Bean)。

四.什么是JavaEE模块?
J2EE模块是由一个或多个针对相同容器类型的Java EE组件以及一个属于该类型的组件部署描述符组成。例如,企业Bean模块部署描述符声明了针对企业Bean的事务属性和安全性授权方式。

五.列出所有JavaEE模块并给出它们的描述?
J2EE模块如下:(每一个模块都有一个扩展名为.xml配置描述符)
(1).EJB模块:
包含企业Bean的类文件(用于处理逻辑业务,普通的java类)和一个EJB配置描述文件,EJB模块被打包成扩展名为.jar的JAR文件。
(2).Web模块:
包含Servlet类文件、JSP文件、支撑类文件(如CSS格式控制)、图形文件(GIF或者JPG图片)、HTML文件和一个Web应用部署描述文件。Web模块被打包成扩展名为.war的WAR(Web Archive File,Web应用档案)文件。
(3).应用程序客户端模块:包含类文件和一个应用程序客户端配置描述文件。应用程序客户端模块被打包成扩展名为.jar的JAR文件。
(4).资源适配器模块:包含所有的Java接口、类、本地库和其他文档,以及资源适配器配置描述文件。它们共同实现了针对某个特定EIS的连接器体系结构。资源适配器模块被打包成扩展名为.jar的JAR文件。

六.请画出JavaEE应用的EAR文件结构(Structure of Enterprise Archive file)?
这里写图片描述

Chapter 2
一.什么是Servlet和JSP?
(1)Servlet组件是实现接受HTTP请求并能生成HTTP请求响应的功能模块,它实际上是一个Java类文件。
(2)JSP组件是一种文本文档,它包含静态元素(HTML,XML等)和JSP元素。在服务器运行JSP组件时会被翻译成Servlet再执行。

二.详细说明Web客户端与Web应用程序之间相互作用的步骤?
(1)客户端发送一个HTTP请求到Web服务器;
(2)实现了JavaServlet和JSP页面技术的Web服务器将请求转换为HTTPServletRequest对象;
(3)服务器把该对象传递给一个Web组件,Web组件可以与数据库或JavaBeans
组件进行交互来声称动态内容,或者把请求对象传递给另一个Web组件;
(4)Web组件生成一个HTTPServletResponse对象,并由Web服务器将该对象转换成HTTP响应返回给客户端。

三.什么是Web组件?
Web组件既可以是Java Servlet,也可以是JSP页面,或者是Web服务端点。

四.描述Web应用的生命周期?
创建、部署和执行Web应用的过程总结如下:
(1)开发Web组件代码
(2)开发Web应用部署描述符
(3)编译Web应用组件和组件所引用的助手类
(4)可选地将应用打包到某个可部署单元
(5)将应用部署到某个Web容器
(6)访问引用Web应用的URL

五.给出文档根和上下文根(document root and context root)的定义?并叙述它们的区别?
(1)文档根的定义:Web模块的顶级目录是应用程序的文档根目录,文档根目录是保存JSP页面,客户端类和档案以及静态Web资源的地方。
(2)上下文根的定义:上下文根标识了JAVA EE服务器中的某个Web应用。用户在部署Web模块时需指定上下文根。上下文根必须以正斜杠(/)开始,以某个字符串结束。
(3)区别:文档根是用来标识文档资源的,它可以方便用户管理文件。而上下文根是标识某个Web应用,它可以告诉服务器去找那个应用。一个是管理硬盘中的文档,一个管理网络中的应用。

六.画出Web模块结构图?
这里写图片描述

Chapter 3
一.什么是过滤器?
过滤器(filter)是一种可以对请求或相应的报头和主体内容进行转换的对象。过滤器与Web组件不同,因为过滤器通常本身并不负责创建响应。相反,过滤器提供可以“附加”到任何Web资源的功能。过滤器可以完成以下主要任务:
(1)查询请求并进行相应的操作。
(2)阻塞请求-相应对,使其不能进一步被传递。
(3)修改其请求报头和数据。用户可以通过提供一个自定义的请求版本来完成任务。
(4)修改响应报头和数据。用户可以通过提供一个自定义的响应版本来完成该任务。
(5)和外部资源进行交互。

二.为了处理http服务, 在Java源码中需要扩展哪个servlet类?
处理Http服务,在Java源码中需扩展HttpServlet类并重写其中的doGet()和doPost()方法来实现这个组件。

三.在Java源码中怎样定义过滤器?
(1)引用javax.servlet包实现其中的Filter接口。
(2)实现Filter接口需要重写doFilter(Servlet Request req , Servlet Response res ,FilterChain chain)方法。
(3)在web.xml中指定过滤器映射。

四.详细描述Servlet的生命周期?
Servlet的生命周期:Servlet加载—>实例化—>服务—>销毁。
(1)Servlet加载阶段:当出现下列几种情况时Servlet容器装载Servlet,
①Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>标签之间添加代码<loadon-startup>1</loadon-startup>
②在Servlet容器启动后,客户首次向Servlet发送请求;
③Servlet类文件被更新后,重新装载Servlet。
(2)实例化阶段:Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法仅执行一次。
(3)服务阶段:调用service()方法,它是Servlet的核心,负责响应客户请求。每当一个客户请求一个HttpServlet对象时,该对象的service()方法就要被调用,并且传递给这个方法一个请求(ServletRequest)对象和一个响应(ServletResponse)对象作为参数。在HttpServlet中已存在service()方法,默认的服务功能是调用与Http请求方法相应的doGet或doPost方法来响应用户。
(4)销毁阶段:当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,该方法仅执行一次。在destroy()方法中可以释放掉Servlet所占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

五.在Java源码中怎样驱动过滤器链(Filter chain)?
两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。
执行的代码顺序是:
(1).执行第一个过滤器EncodingFilter.doFilter()中chain.doFilter()之前的部分;request.setCharacterEncoding(encoding);
(2).执行第二个过滤器SecurityFilter.doFilter()中chain.doFilter()之前的部分:判断用户是否已登录。如果用户已登录,则访问请求的资源;如果用户未登录,则页面重定向到:/failure.jsp。
(3).执行第二个过滤器SecurityFilter.doFilter()中chain.doFilter()之后的部分。
(4).执行第一个过滤器EncodingFilter.doFilter()中chain.doFilter()之后的部分:写入已经完成的日志,最后返回响应。

Chapter 4
一.什么是统一表达式语言?
统一表达式语言(统一EL)代表了JSP2.0提供的表达式语言(EL)和针对JSF(基于组件的Java Web应用框架模型)技术版本1.0所创建的表达式语言两者之间的联合,其主要功能有:
1.动态地读取存储在JavaBean组件中的不同数据结构和隐式对象的数据;
2.动态地将数据写入到JavaBean组件中;
3.调用任意静态和公有的方法;
4.动态执行算术运算。

二.列举出JavaBean组件的属性?
在JavaBean设计中,按照属性的不同作用分为四类:简单属性(Simple Property)、索引属性(Indexed Property)、关联属性(Bound Property)和限制属性(Constrained Property)。

三.给出立即求值和延迟求值表达式的定义和语法?
(1)立即求值
定义:
指JSP引擎在页面第一次被调用时就立即计算表达式并返回结果。
语法:
所有使用${expr}符号的表达式都是立即执行的;
只能用于Html模板数据中或者作为能够使用运行时表达式的JSP标签属性值,例如:

<c:out value=”${sessionScope.username}”/>

(2)延迟求值
定义:
在页面生命周期以后,通过底层技术的某种机制延迟计算表达式,直到生命周期的合适点出现。
语法:
延迟求值表达式的格式为#{expr};
可以在任何使用表达式技术定义的页面生命周期的其他阶段进行计算。例如:

<h:inputText id=”name” value=”#{customer.name}”/>

四.描述JavaBean的设计习惯?
JavaBean组件设计约定负责管理类的属性以及管理提供对这些属性访问的公共方法。JavaBean组件可以是:
(1)读/写、只读、或者只写;
(2)简单(Simple)特性,意味着它包含一个值,或者索引(indexed)特性,意味着它表示一个值数组。
特性并不一定必须由某个实例变量来实现,必须使用遵循以下规范的公共方法来访问特性:
①对于每一种可读的特性,bean必须具有以下形式的方法。
PropertyClass getProperty(){ … }
②对于每一种可写的特性,bean必须具有以下形式的方法。
setProperty(PropertyClass pc){ … }
除了特性方法,JavaBean组件必须是一个public公共类,必须定义一个不带任何参数的构造函数。另外,一本将属性设置成private私有。

0 0
原创粉丝点击