< 上一课 | 下一课 >

课程 4:创建用于访问 OSGi 服务的 Servlet

在本课程中,您将创建支持 Web 的捆绑软件以包含用于访问计数器服务并显示该服务的结果的 Servlet。该 Servlet 通过 JNDI InitialContext 查找该服务以访问 OSGi 服务。

创建支持 Web 的捆绑软件

要创建包含该 Servlet 且支持 Web 的捆绑软件,请执行下列操作:
  1. 单击文件 > 新建 > 其他,然后展开 OSGi
  2. 单击 OSGi 捆绑软件项目,然后单击下一步 这时,将打开“新建 OSGi 捆绑软件项目”。
  3. 项目名称字段中,输入 CounterWebBundle
  4. 从“目标运行时”列表中选择下列其中一个服务器:
    • WebSphere Application Server V7.0
    • WebSphere Application Server v8.0
    • WebSphere Application Server V8.5
    • WebSphere Application Server V8.5 Liberty 概要文件
  5. 在“配置”部分中,单击添加 Web 支持并从 Web 支持列表中选择 Web 2.5
  6. 确保 CounterApp 显示在应用程序项目字段中,然后单击完成

创建 servlet

要创建用于访问计数器服务的 Servlet,请执行下列操作:
  1. 在“企业资源管理器”中,右键单击 CounterWebBundle,然后选择新建 > Servlet。这时,将打开“创建 Servlet”向导。
  2. Java 包字段中,输入 com.ibm.ws.eba.servlet
  3. 类名字段中,输入 CounterServlet,然后单击完成 这时将在捆绑软件中创建 Servlet,并在编辑器打开该 Servlet。

将必需的软件包添加至捆绑软件清单

要将必需的软件包添加至捆绑软件清单,请执行下列操作:
  1. 双击清单:CounterWebBundle 以在编辑器中打开它。
  2. 切换至“依赖关系”选项卡。
  3. 在“导入的软件包”部分中,单击添加。这样会打开“程序包选择”对话框。
  4. 导出的软件包字段中,输入 com.ibm.ws.eba.counter
  5. 从列表中选择 com.ibm.ws.eba.counter,然后单击确定 “导入的软件包”部分的外观与下图类似:
    导入的软件包。
    注: 如果目标运行时服务器是 WebSphere Application Server V8.5 Liberty 概要文件,那么还必须导入 javax.naming 软件包。导入 javax.naming 软件包可防止在运行应用程序时发生 ClassNotFoundException 错误。下列步骤描述了如何导入 javax.naming 软件包:
    1. 在“导入的软件包”部分中,单击添加。这样会打开“程序包选择”对话框。
    2. 导出的软件包字段中,输入 javax.naming
    3. 从列表中选择 javax.naming,然后单击确定
    如果不导入软件包,那么当您在具有 Liberty 概要文件的 WebSphere Application Server 上运行应用程序时将发生 ClassNotFoundException 错误。发生错误的原因是,应用程序期望由服务器运行时提供含有缺少类的软件包,而不是由用户软件包提供。
  6. 保存捆绑软件清单文件。

创建实现以查找 OSGi 服务

下列步骤描述了如何创建 doGet() 方法的实现,该实现会使用 InitialContext 来查找 OSGi 服务:
  1. 在“企业资源管理器”中,双击 CounterServlet.java 以在编辑器中打开它。
  2. 找到 doGet() 方法并添加以下实现:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Counter counter;
    		try {
    			InitialContext ic = new InitialContext();
    			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
    			response.getOutputStream().println("counter="+counter.getCount());
    		}
    catch (NamingException e) {
    	e.printStackTrace();
    		}
    	}
  3. 在主菜单中,单击源代码 > 组织导入。这时,将打开“组织导入”对话框。
  4. 选择 com.ibm.ws.eba.counter.Counter,然后单击完成
  5. 保存 CounterServlet.java
Servlet 代码类似于以下代码:
package com.ibm.ws.eba.servlet;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.Servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.ws.eba.counter.Counter;

/**
 * Servlet implementation class CounterServlet
 */
public class CounterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor.
     */
    public CounterServlet() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Counter counter;
		try {
			InitialContext ic = new InitialContext();
			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
			response.getOutputStream().println("counter="+counter.getCount());
		}
catch (NamingException e) {
	e.printStackTrace();
		}
	}

	/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

课程复习要点

您创建了通过 JNDI InitialContext 查找该服务以访问 OSGi 服务的 Servlet。

在本课程中,您学习了以下主题:
  • 如何创建支持 Web 的 OSGi 捆绑软件。
  • 如何创建 Servlet。
  • 如何使用“导入的软件包”来导入捆绑软件依赖关系。
  • 如何使用 InitialContext 来查找 OSGi 服务。
< 上一课 | 下一课 >
指示主题类型的图标 教程课程主题
信息中心的条款和条件 | 反馈

时间戳记图标 最近一次更新时间: 2014 年 4 月 17 日

文件名:counter_lesson4.html