在Servlet容器(以Tomcat为例)中使用CDI的方法

JSR-299 规范原来叫做 Web Beans,其主要目的是为了整合 JSF 和 EJB。到 2009 年">正式发布该规范时,JSR-299 已经改称 “Contexts and Dependency Injection for the Java EE platform”(简称 CDI ),整合 JSF 和 EJB 仍是其目的,但这并非 CDI 的唯一功能。

通读 JSR-299 规范的文本,描述最多的是依赖注入(Dependency Injection, DI ) 容器。CDI 的 DI 有与众不同之处,它的第一个字母 C,代表 Contexts,是上下文环境,也是范围。CDI 注入的对象必须与某个 Context 关联,其生命周期与 Web 应用的各个范围息息相关。

本教程适合的读者对象

阅读本教程的读者需具备以下基础:

熟悉
Servlet 开发。示例的应用逻辑比较简单,有了 Servlet 编程基础就能看懂。 熟悉 JPA 开发。需要对 Persistence Context 和 Entity Manager 有一定了解。 熟悉 Maven 工具。本教程的示例应用配置了 pom.xml,对初次接触 Maven 的读者,第一次更新依赖库时可能会有较多的问题,需要了解 Maven 的基本操作才能解决。 了解 Spring IoC。教程中经常会比较 CDI 和 Spring IoC,不熟悉 Spring IoC 的读者可略过这些内容。

本教程的内容选择

本教程探讨了在 Servlet 环境中使用 CDI,没有用到 JSF 和 EJB。这么做主要是出于下面的考虑:

JSF 对 Servlet 封装得很深,在处理各个范围时不如 Servlet 来得直观。 Servlet 是每个 Java Web 开发者必备的知识技能,熟悉 JSF 的开发者相对较少。 Servlet 环境中使用 CDI
复杂度较低,结合了 JPA 后,也能实现 JSF + EJB 组合的许多重要特性。 起草中的 JSR-346,即 CDI 1.1 规范,增强了对 Servlet 的支持力度。

本教程的内容组织

本教程基本遵照项目驱动的方式来组织知识点,所用的示例应用实现了雇员信息的查看和修改。涉及的 CDI 功能包括:

CDI 作为依赖注入容器的特点和用法。 用 CDI 实现声明式事务管理。 用 CDI 实现在 Session 范围里共享 Persistence Context。 监听 CDI 容器的事件。

开发环境配置

下面列出示例应用所用开发环境及工具软件的版本:

Tomcat,版本 7.0.28。 Eclipse Java EE IDE for Web Developers,版本 Indigo SR2。 Maven,版本 3.0.4。

Maven 配置

示例应用用到了 Weld 和 Hibernate,使用 Maven 来管理项目,需要添加 JBoss Public 仓库和相关依赖项,pom.xml 中相关配置代码如清单 1 所示。

清单 1. pom.xml 配置代码片断

<repositories> <repository> <id>jboss-public-repository-group</id> <name>JBoss Public
Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public/</url> <layout>default</layout> … </repository> </repositories> <dependencies> <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet-core</artifactId> <version>1.1.8.Final</version> </dependency> <dependency> <groupId>org.jboss.weld</groupId> <artifactId>weld-core</artifactId> <version>1.1.8.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.1.4.Final</version> </dependency> … </dependencies>

初次下载工程以后,可到工程目录下执行:mvn dependency:resolve,让 maven 下载相关依赖包。

Eclipse 工程配置

默认情况下,用 maven 创建的工程会把 Web 资源放到 src/main/webapp 目录下,为了在 eclipse 环境中调试 Web 应用,需要配置工程属性。在 Eclipse 的 Project 菜单中点击 Properties,打开工程配置界面,找到 Deployment Assembly 选项,具体配置如图 1 所示。

图 1. eclipse 工程配置图

时间: 2024-11-05 12:26:01

在Servlet容器(以Tomcat为例)中使用CDI的方法的相关文章

《精通Spring MVC 4》——1.8 嵌入式Servlet容器(Tomcat)的配置

1.8 嵌入式Servlet容器(Tomcat)的配置 默认情况下,Spring Boot在打包和运行应用时,会使用Tomcat嵌入式API(Tomcat embedded API). 我们来看一下EmbeddedServletContainerAutoConfiguration: @Order(Ordered.HIGHEST_PRECEDENCE) @Configuration @ConditionalOnWebApplication @Import(EmbeddedServletContai

Servlet容器Tomcat中web.xml中url-pattern配置详解

前言 今天研究了一下tomcat上web.xml配置文件中url-pattern的问题. 这个问题其实毕业前就困扰着我,当时忙于找工作. 找到工作之后一直忙,也就没时间顾虑这个问题了. 说到底还是自己懒了,没花时间来研究. 今天看了tomcat的部分源码 了解了这个url-pattern的机制.  下面让我一一道来. tomcat的大致结构就不说了, 毕竟自己也不是特别熟悉. 有兴趣的同学请自行查看相关资料. 等有时间了我会来补充这部分的知识的. 想要了解url-pattern的大致配置必须了解

Android中bindService基本使用方法概述_Android

Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况.如果想了解startService相关的使用,请参见<Android中startService基本使用方法概述>. bindService启动服务的特点 相比于用startService启动的Service,bindService启动的服务具有如下特点:

Java中synchronized关键字修饰方法同步的用法详解_java

Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有一个允许被访问. 静态方法则有不同的行为.用synchronized关键字声明的静态方法,同时只能够被一个执行线程访问,但是其他线程可以访问这个对象的非静态的synchronized方法.必须非常谨慎这一点,因为两个线程可以同时访问一个对象的两个不同的synchronized方法,即其中一个是静态s

深入剖析tomcat之一个简单的servlet容器

上一篇,我们讲解了如果开发一个简单的Http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能. 简单介绍下Servlet接口 如果我们想要自定义一个Servlet,那么我们必须继承Servlet,并且实现下面几个重要的方法 public void init(ServletConfig config) throws ServletException public void service(ServletRequest request,ServletResponse resp

基于Java web服务器简单实现一个Servlet容器_java

上篇写了一个简单的Java web服务器实现,只能处理一些静态资源的请求,本篇文章实现的Servlet容器基于前面的服务器做了个小改造,增加了Servlet请求的处理.  程序执行步骤 1.创建一个ServerSocket对象:  2.调用ServerSocket对象的accept方法,等待连接,连接成功会返回一个Socket对象,否则一直阻塞等待:  3.从Socket对象中获取InputStream和OutputStream字节流,这两个流分别对应request请求和response响应:

Servlet容器工作原理

本文介绍servlet 容器的基本原理.现有两个Servlet容器,第一个很简单,第二个则是根据第一个写出.为了使第一个容器尽量简单,所以没有做得很完整.复杂一些的 servlet 容器 (包括 TOMCAT 4 和 5) 可以参考其他资料. 两个servlet容器都处理简单的servlet及staticResource.您可以使用 webroot/ 目录下的 PrimitiveServlet 来测试它.复杂一些的 servlet会超出这些容器的容量,创建复杂servlet容器不是本文的内容,所

Java中用Servlet容器实现程序监听

servlet|程序 分两步走:(1). 实现 javax.servlet.ServletContextListener 接口的两个方法:contextInitialized()和contextDestroyed() contextInitialized():当Servlet容器启动时会执行 contextDestroyed():当Servlet容器停止时会执行(2). 在contextInitialized()中加入需要监听的程序,并由 java.util.Timer 的 schedule()

第十六章_动态注册和Servlet容器初始化

16.1.动态注册 为了使动态注册成为可能,ServletContext接口中还添加了以下方法,用来动态地创建Web对象: <T extends Filter>createFilter(Java.lang.Class<T> clazz) <T extends java.util.EventListener> createListener(java.lang.Class<T> clazz) <T extends Servlet> createSer