®
TongTech
TongWeb 7.0
应用开发手册
东方通科技
1
TongTech ® .................................................................................. 1
第 1 章 web 应用 ................................................................................... 6
1.1
1.2
1.3
1.4
1.5
1.6
Servlet ....................................................................................................................... 6
Servlet3.0 规范的新特性.................................................................................. 6
1.1.1
Servlet3.1 规范的新特性.................................................................................. 7
1.1.2
1.1.3 调用 Servlet 的 URL ...................................................................................... 11
ServletMapping ............................................................................................... 11
1.1.4
1.1.5
init-param ........................................................................................................ 12
1.1.6
Filter ................................................................................................................ 12
1.1.7 安全角色映射 ................................................................................................. 15
1.1.8 编写 HTTP Servlet 的基本步骤 ..................................................................... 16
JSP ........................................................................................................................... 17
JSP 指令 .......................................................................................................... 18
JSP 动作 .......................................................................................................... 19
JSP 用例 .......................................................................................................... 21
JSF ........................................................................................................................... 22
JSF 中主要概念 .............................................................................................. 22
JSF 的生命周期 .............................................................................................. 23
JSF 用例 .......................................................................................................... 25
配置资源引用 ......................................................................................................... 29
1.4.1 支持环境条目(env-entry) ............................................................................... 30
1.4.2 支持资源引用(resource-ref) ........................................................................... 30
1.4.3 支持资源环境引用(resource-env-ref) ............................................................ 31
1.4.4 支持 EJB 引用(ejb-ref) ................................................................................... 32
Session 管理 .......................................................................................................... 33
URLReWriting ................................................................................................ 33
其他 ......................................................................................................................... 34
Listener 组件的开发 ....................................................................................... 34
1.6.1
1.6.2
class loader delegate ........................................................................................ 34
1.6.3 使用 WEB-INF 下资源 .................................................................................. 34
1.6.4 编写自定义 Valve ........................................................................................... 34
1.3.1
1.3.2
1.3.3
1.2.1
1.2.2
1.2.3
1.5.1
第 2 章 EJB2.0 .................................................................................... 36
2.1
2.2
2.3
2.4
2.5
EJB 应用结构 ......................................................................................................... 36
SessionBean ............................................................................................................ 36
访问 ejb 应用 .......................................................................................................... 38
2.3.1 同一个 JVM 中对 EJB 的访问 ...................................................................... 38
2.3.2 不同 JVM 中对 EJB 访问 .............................................................................. 39
2.3.3 通过 Local 接口访问 EJB 应用 ..................................................................... 39
配置数据源 ............................................................................................................. 40
2.4.1 在 SessionBean 中配置数据源 ...................................................................... 40
对 weblogic-ejb-jar.xml 的支持 ............................................................................. 41
2
2.6
Entity Bean .............................................................................................................. 43
2.6.1 配置 CMR ....................................................................................................... 43
第 3 章 EJB3.0 .................................................................................... 60
3.1
3.2
3.3
3.4
3.5
3.6
3.1.1
3.1.2
SessionBean ............................................................................................................ 60
StatelessBean................................................................................................... 60
StatefulBean .................................................................................................... 62
定时服务 ................................................................................................................. 64
拦截器 ..................................................................................................................... 65
依赖注入 ................................................................................................................. 67
3.4.1 引用 EJB ......................................................................................................... 68
3.4.2 引用 Resource ................................................................................................. 69
Pool 和 Cache ......................................................................................................... 70
配置资源引用 ......................................................................................................... 71
第 4 章 EJB3.1 .................................................................................... 71
4.1
4.2
4.3
4.4
4.5
EJB3.1 的新特性 .................................................................................................... 71
Session Bean ........................................................................................................... 72
Singleton Bean ........................................................................................................ 73
定时服务 ................................................................................................................. 74
拦截器 ..................................................................................................................... 75
第 5 章 EJB3.2 .................................................................................... 75
5.1
EJB3.2 的新特性 .................................................................................................... 75
第 6 章
JPA ......................................................................................... 77
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
容器托管 EntityManager 对象 ............................................................................... 79
6.1.1 通过@PersistenceContext 注入 ...................................................................... 80
6.1.2 通过 JNDI 方式获取 ...................................................................................... 80
应用托管 EntityManager 对象 ............................................................................... 80
EJB 容器中获得 ............................................................................................. 81
6.2.1
6.2.2 Web 容器中获得............................................................................................. 81
J2SE 中获得.................................................................................................... 82
6.2.3
使用 EntityManager ................................................................................................ 83
persistence.xml ........................................................................................................ 84
在 JavaEE 环境中使用 JPA.................................................................................... 85
6.5.1 使用过程 ......................................................................................................... 85
6.5.2 示例 ................................................................................................................. 85
在 J2SE 环境中使用 JPA ....................................................................................... 94
6.6.1 使用过程 ......................................................................................................... 94
6.6.2 示例 ................................................................................................................. 94
JPA 中 EntityManger 的事务控制 ......................................................................... 98
JPA 常用 Annotation .............................................................................................. 98
JPA 常用功能属性 ............................................................................................... 100
3
6.10
6.11
JPA2.0 新增功能 .................................................................................................. 109
JPA2.1 新增功能 .................................................................................................. 110
第 7 章 Dependency Inject .............................................................. 114
7.1
DI 的使用 ............................................................................................................. 114
7.1.1 @inject .......................................................................................................... 114
7.1.2 @Qualifier ..................................................................................................... 115
7.1.3
Provider ......................................................................................................... 115
7.1.4 @Named ....................................................................................................... 116
7.1.5 @Scope ......................................................................................................... 116
第 8 章 CDI ....................................................................................... 117
8.1
8.2
CDI 的使用 ........................................................................................................... 117
8.1.1 @Qualifier 的补充 ........................................................................................ 117
8.1.2 @Scope ......................................................................................................... 118
8.1.3 @Produces 与@Dispose ............................................................................... 119
8.1.4 @Alternative 与@Specialize ........................................................................ 120
8.1.5 @Alternative ................................................................................................. 120
8.1.6 @Specialize ................................................................................................... 122
8.1.7 @Decorator ................................................................................................... 122
event .............................................................................................................. 124
8.1.8
CDI 新特性 ........................................................................................................... 124
第 9 章 CommonAnnotation ........................................................... 127
9.1
9.2
@ManagedBean .................................................................................................... 127
@DataSourceDefinition(s) .................................................................................... 128
第 10 章
Interceptor ..................................................................... 129
10.1
10.2
10.3
@interceptor .......................................................................................................... 129
@AroundTimeout ................................................................................................. 130
@InterceptorBinding ............................................................................................. 130
第 11 章 Validation ............................................................................. 131
11.1
11.2
Bean Validation 1.0 ............................................................................................... 131
11.1.1 内置约束 ....................................................................................................... 131
11.1.2 自定义约束 ................................................................................................... 132
Bean Validation 1.1 新特性 .................................................................................. 133
第 12 章 资源应用 .............................................................................. 137
12.1
UserTransaction 的使用 ....................................................................................... 137
第 13 章
JMX ................................................................................ 138
13.1
13.2
通过 JMX 获取 TongWeb7.0 的监视量............................................................... 138
JMX 对象 ObjectName 接口对应表 .................................................................... 139
4
第 14 章
REST 调用 ..................................................................... 142
14.1
14.2
14.3
httpclient 方式 ....................................................................................................... 142
14.1.1 HttpClient3 .................................................................................................... 142
14.1.2 HttpClient4 .................................................................................................... 143
ajax 方式 ................................................................................... 错误!未定义书签。
各模块的 REST 接口 ........................................................................................... 144
14.3.1 WEB 容器 ..................................................................................................... 144
JDBC ............................................................................................................. 147
14.3.2
EJB 容器 ....................................................................................................... 149
14.3.3
14.3.4 应用管理 ....................................................................................................... 149
14.3.5 部署服务配置 ............................................................................................... 150
14.3.6 诊断 ............................................................................................................... 151
5
第1章 web 应用
1.1 Servlet
TongWeb7.0 应用服务器支持 Servlet3.1 规范。本章节介绍了 HTTP Servlet 的基本概念,
概述了如何在 TongWeb7.0 应用服务器上进行 HTTP Servlet 的开发。
Servlet 是基于 Java 技术的 Web 组件,由容器管理并产生动态的内容。Servlet 引擎作为
Web 服务器的扩展提供支持 Servlet 的功能。Servlet 与客户端通过 Servlet 容器实现的请求/
响应模型进行交互。
具体开发过程中使用的 Java Servlet API 可参考 Oracle 公司提供的相关文档。
本 小 节 中 所 有 提 到 “ 参考 TongWeb7.0 样 例 ”的 地 方 , 都 是 指 位 于 TongWeb7.0/
samples/servletjsp-samples/servlet3Jsp22-new-feature 目录下的应用 Servlet3Jsp22Sample.ear,
可将其部署到 TongWeb7.0 之后,访问其各个子模块,了解相应的特性及用法。
1.1.1 Servlet3.0 规范的新特性
1. 新增的注解支持
@WebServlet
@WebFilter
@WebListener
@WebInitParam
@MultipartConfig
具体的注解使用可以参考 TongWeb7.0 的样例 Servlet3Annotation.war。
2. 可插性(pluggability)设计
使用该特性,现在我们可以在不修改已有 Web 应用的前提下,只需将按照一定格式打
包的 JAR 文件放到 WEB-INF/lib 目录下,即可实现新功能的扩充,不需要额外的配置。
Servlet 3 引入了称之为“Web 模块部署描述符片段”的 web-fragment.xml 部署描述文
件,该文件必须存放在 JAR 文件的 META-INF 目录下,该部署描述文件可以包含一切可
以在 web.xml 中定义的内容。JAR 包通常放在 WEB-INF/lib 目录下,除此之外,所有该
模块使用的资源,包括 class 文件、配置文件等,只需要能够被容器的类加载器加载上即可。
具体参考 TongWeb7.0 样例 Servlet3WebFragment.war。
3. 异步处理的支持
Servlet 接收到请求之后,可能会对数据进行一些预处理;之后 Servlet 线程将请求转交
给一个异步线程来执行业务处理,线程本身返回,此时 Servlet 还没有生成响应数据,异步
6
线 程 处 理 完 业 务 以 后 , 可 以 直 接 生 成 响 应 数 据 ( 异 步 线 程 拥 有 ServletRequest 和
ServletResponse 对象的引用),或者将请求继续转发给其它 Servlet。如此一来, Servlet 线
程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。
异步处理特性可以应用于 Servlet 和 Filter 两种组件。异步处理特性默认并没有开启,
如果希望使用该特性,则必须按照如下的方式启用:
在 web.xml 中配置时,Servlet 3.0 为
和标签增加了子
标签,该标签的默认取值为 false,要启用异步处理支持,则将其设为 true 即可。以 Servlet
为例,其配置方式如下所示:
DemoServlet
com.tongweb.servlet.Demo Servlet
true
使用 Servlet 3.0 提供的 @WebServlet 和 @WebFilter 注解 进行 Servlet 或 Filter 配置
的情况,这两个注解都提供了 asyncSupported 属性,默认该属性的取值为 false,要启用异
步处理支持,只需将该属性设置为 true 即可。以 @WebFilter 为例,其配置方式如下所示:
@WebFilter(urlPatterns = "/demo",asyncSupported = true)
public class DemoFilter implements Filter{...}
此处,Servlet3 还为异步处理提供了一个监听器,使用 时只需要实现 AsyncListener 接
口即可,可以捕获异步处理的成功、失败、超时等事件。
具体可以参考 TongWeb7.0 的样例 Servlet3Async.war。
4. ServletContext 的性能增强
ServletContext 对象支持在运行时动态部署 Servlet、Filter 和监听器,以及为 Servlet 和
Filter 增加 URL 映射等。参见 TongWeb7.0 的样例 Servlet3Programmatic.war。
5. HttpServletRequest 对文件上传的支持
HttpServletRequest 提供了两个方法用于从请求中获取上传的文件:
Part getPart(String name)
Collection getParts()
第一个方法用于获取请求中给定名称的文件,第二个用于获取所有文件,每一个文件用
一个 javax.servlet.http.Part 对象来表示。另外,可以结合前面提到的@MultipartConfig 注解来
对上传操作进行自定义配置,比如限制上传文件的大小,设置保存路径等,请自行查阅相关
文档。
1.1.2 Servlet3.1 规范的新特性
1. 非阻塞 IO
Servlet 3.0 中引入了 Async Servlet,然而虽然 servlet 的执行过程可以是异步的了,但
是从 request 读取和向 response 写入的过程,依然是同步的 IO。而 Servlet 3.1 在 Async Servlet
7
的基础上,引入了 Non-blocking IO Servlet,Web 容器中的非阻塞请求处理有助于提高对改
善 Web 容器可扩展性不断增加的需求, 增加 Web 容器可同时处理请求的连接数量。
servlet 容器的非阻塞 IO 允许开发人员在数据可用时读取数据或在数据可写时写数据。IO 的
过程是通过 WriteListener 和 ReadListener 来实现的,类似于 event driven 的过程。
非阻塞 IO 仅对在 Servlet 和 Filter 中的异步请求处理和升级处理有效。否则,当调用
ServletInputStream.setReadListener 或 ServletOutputStream.setWriteListener 方 法 时 将 抛 出
IllegalStateException。
ReadListener 为非阻塞 IO 提供了下面的回调方法:
ReadListener
■ onDataAvailable()
当可以从传入的请求流中读取数据时 ReadListener 的 onDataAvailable 方法被调用。
当数据可读时容器初次调用该方法。当且仅当下面描述的 ServletInputStream 的 isReady 方
法返回 false,容器随后将调用 onDataAvailable 方法。
■ onAllDataRead()
当读取完注册了此监听器的 ServletRequest 的所有数据时调用 onAllDataRead 方法。
■ onError(Throwable t). 处理请求时如果有任何错误或异常发生时调用 onError 方法。
容器必须线程安全的访问 ReadListener 中的方法。
除了上述 ReadListener 定义的方法外,下列方法已被添加到 ServletInputStream 类中。
■ boolean isFinished()
与 ServletReader/ServletInputStream 相关的请求的所有数据已经读取完时 isFinished 方
法返回 true。否则返回 false。
■ boolean isReady()
如果可以无阻塞地读取数据 isReady 方法返回 true。如果没有数据可以无阻塞地读取
该方法返回 false。如果 isReady 方法返回 false,调用 read 方法是非法的,且必须抛出
IllegalStateException。
■ void setReadListener(ReadListener listener)
设置上述定义的 ReadListener,调用它以非阻塞的方式读取数据。一旦把监听器与给定
的 ServletInputStream 关联起来,当数据可以读取,所有的数据都读取完或如果处理请求时
发生错误,容器调用 ReadListener 的方法。注册一个 ReadListener 将启动非阻塞 IO。在
那时切换到传统的阻塞 IO 是非法的, 且必须抛出 IllegalStateException。 在当前请求范
围内, 随后调用 setReadListener 是非法的且必须抛出 IllegalStateException。
WriteListener 提供了如下适用于容器调用的回调方法:
■ WriteListener
■ void onWritePossible()
当 一 个 WriteListener 注 册 到 ServletOutputStream 时 , 当 且 仅 当 下 边 描 述 的
ServletOutputStream 的 canWrite 方法被调用并返回 false,该容器将回调该方法。
■ onError(Throwable t). 当处理响应过程中出现错误时回调。
除了 WriteListener 外,还有如下方法被添加到 ServletOutputStream 类并允许开发人员运
行时检查是否可以写数据发送到客户端。
■ ServletOutputStream
■ boolean canWrite()
8