// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.JavaEE Tutorials
************************************************
- link:index_zh_CN.html[JavaEE Tutorials]
- link:javaee-gettingstarted_zh_CN.html[Java EE 应用程序入门指南]
- link:javaee-gettingstarted-screencast_zh_CN.html[Java EE 应用程序入门指南的视频]
- link:javaee-intro_zh_CN.html[NetBeans IDE 中的 Java EE 技术支持简介]
- link:section_zh_CN.html[]
- link:cdi-intro_zh_CN.html[上下文和依赖关系注入以及 JSF 2.x 入门]
- link:cdi-events_zh_CN.html[使用 CDI 中的事件]
- link:cdi-inject_zh_CN.html[使用 CDI 中的注入和限定符]
- link:javaee-entapp-ejb_zh_CN.html[使用 EJB 3.1 创建企业应用程序]
- link:maven-entapp_zh_CN.html[使用 Maven 创建企业应用程序]
- link:maven-primefaces-screencast_zh_CN.html[使用 NetBeans IDE 进行 PrimeFaces 开发的视频]
- link:javaee-entapp-junit_zh_CN.html[使用嵌入的 EJB 容器测试企业应用程序]
- link:jpa-eclipselink-screencast_zh_CN.html[在 EclipseLink 中使用 JPA 支持]
- link:entappclient_zh_CN.html[在 GlassFish Server 上创建和运行应用程序客户端]
- link:secure-ejb_zh_CN.html[在 Java EE 中构建安全企业 Bean]
- link:maven-osgiservice-cdi_zh_CN.html[在 NetBeans IDE 中使用 CDI 将 OSGi 包作为服务注入]
- link:profiler-javaee_zh_CN.html[在 NetBeans IDE 中对企业应用程序进行性能分析]
- link:maven-websocketapi_zh_CN.html[在 Web 应用程序中使用 WebSocket API]
- link:maven-websocketapi-screencast_zh_CN.html[在 Web 应用程序中使用 WebSocket API 的视频]
- link:weblogic-javaee-m1-screencast_zh_CN.html[将 Web 应用程序部署到 Oracle WebLogic Server 的视频]
- link:cdi-validate_zh_CN.html[应用 @Alternative Bean 和生命周期标注]
- link:maven-entapp-testing_zh_CN.html[测试 Maven 企业应用程序]
************************************************


