站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Netbeans 专题使用 NetBeans IDE 5.0 开发 Web 应用程序快速入门指南

使用 NetBeans IDE 5.0 开发 Web 应用程序快速入门指南

摘要: 使用 NetBeans IDE 5.0 开发 Web 应用程序快速入门指南 反馈 示例项目 想先接触一下 J2EE 项目吗?在 IDE 中,选择 File > New Project,然后展开 ...
使用 NetBeans IDE 5.0 开发 Web 应用程序快速入门指南
示例项目
想先接触一下 J2EE 项目吗?在 IDE 中,选择 File > New Project,然后展开 Samples 文件夹。IDE 中包含 Java BluePrints Solution Catalogue 中的一些示例。

本教程介绍创建具有容器管理持久性的实体 Enterprise JavaBeansTM(CMP实体Bean)组件的基本步骤。我们将使用 NetBeansTM IDE 5.0 从现有的 Apache Derby 数据库生成 CMP 实体 Bean。然后创建一个简单的会话 bean 来访问数据库信息和 Web 模块客户端。

此教程将对 NetBeans IDE 5.0 中的 J2EE 开发特性进行快速浏览,它不是编写企业级应用程序的教学指南。虽然不需要任何 J2EE 基础知识就可以学习本教程,但是对于初学者最好从 J2EE Tutorial in NetBeans IDE 开始学习。

注意: 本教程设计为和 Sun JavaTM System Application Server 8.2 及其捆绑的数据库服务器 Apache Derby 一起使用早期版本的 Sun Java System Application Server 使用 PointBase 作为捆绑数据库服务器。要使用 PointBase 完成本教程,请参见 NetBeans IDE 4.1 Quick Start Guide for J2EE Applications

本文档包括如下主题:

入门

开始之前,必须确保您具备所有必要的软件。还必须配置 Derby 数据库和填充用来生成 CMP 实体 Bean 的数据库表。

设置环境

首先,需要在计算机上安装 Sun Java System Application Server Platform Edition 8.2 (下载)。

注意: 如果 IDE 运行在 JDK 5.0 上,则应用服务器还需要使用 JDK5.0 中的虚拟机。为了设置 IDE 使用的 JDK,需要打开 IDE_INSTALL_DIR/etc/netbeans.conf 并且需要在 netbeans_jdkhome 属性中输入 JDK 的路径。为了设置应用服务器使用的 JDK,编辑 AS_INSTALL_DIR/config/asenv(.bat) 文件并更改 AS_JAVA 环境变量。

安装完应用服务器以后,需要向 NetBeans IDE 注册它。请注意,如果下载和安装的是同时捆绑应用服务器的 NetBeans IDE 版本,则不必执行此步骤。IDE知道捆绑的应用服务器的位置。

  1. 通过进入到 NETBEANS_INSTALL_DIR/bin directory 目录并运行 netbeans 命令来打开 NetBeans IDE 5.0。如果 java 不在 PATH 变量中,则在命令行中使用 --jdkhome /path/to/jdk 开关来启动 IDE 或向 NETBEANS_INSTALL_DIR/etc/netbeans.conf 文件中添加一行 netbeans_jdkhome="/path/to/jdk"
  2. 在 IDE 中,从主窗口选择 Tools > Server Manager。
  3. 单击 Add Server。选择 Sun Java Systems Application Server 并为实例提供名称。然后单击 Next。
  4. 指定应用服务器的安装目录(例如,C:\Sun\Appserver)。
  5. 使 Register Local Default Domain 单选按钮处于选中状态并选择一个域。
  6. 另外,单击 Next 并输入管理员用户名和密码。如果不想在 IDE 用户目录存储用户名和密码,则可以不填这些字段。IDE 将在每次需要信息时提示您。
    注意:默认的管理员密码是 adminadmin
  7. 单击 Finish。IDE 注册该服务器并在 Runtime 窗口中的 Servers 节点下把它列出。

启动应用服务器的步骤:

  1. 在 Runtime 窗口中,右键单击 application server 节点并选择 Start Server。
  2. 展开 application server 节点。该节点包含了在应用服务器的管理控制台中可以看到的所有类别的子节点。可以通过右键单击任何节点并选择 Properties 来对应用服务器进行配置。

配置 Derby 数据库

在本教程中,您将通过 Derby 数据库服务器包含的一个表来生成 CMP Bean。Derby 数据库服务器包含在下载的 Sun Java System Application Server 8.2 中。

  1. 单击 Runtime 窗口,展开 Databases 节点。将会看到 jdbc:derby://localhost:1527/sample 数据库节点。
  2. 右键单击 jdbc:derby://localhost:1527/sample 数据库并选择 Connect。如果提示要求输入密码,则键入 app 作为用户名和密码并单击 OK。
  3. 展开 sample 数据库节点和 Tables 节点。确保其中包含 CUSTOMER 节点,如下所示。

    注意: 如果改变了 sample 数据库,可以使用此 SQL 脚本重新填充它。

编写 EJB 模块代码

编写 Enterprise Bean 的代码很容易。IDE 为您考虑了所有实现细节,所以您可以集中精力于编写 EJB 模块的业务逻辑代码。

创建企业应用程序项目

在本示例中,将创建一个企业应用程序项目作为 Web 模块和 EJB 模块的容器。企业应用程序模版使您能自动为 Web 模块和 EJB 模块创建项目。

  1. 选择 File > New Project (Ctrl-Shift-N),然后从 Enterprise category 中选择 Enterprise Application template。单击 Next。
  2. 将应用程序命名为 CustomerBook 并指定该项目的位置。保留其他设置为默认值,然后单击 Finish。

生成 CMP 实体 Bean

现在来生成访问 sample 数据库的实体 Bean。程序要访问的每一个表都需要一个实体 Bean。

  1. 在 Projects 窗口中, 右键单击 EJB 模块的节点(CustomerBook-EJBModule),然后选择 New > CMP Entity Beans from Database。
  2. 选择 JDBC Connection 作为数据库源,然后从组合框中选择 jdbc:derby://localhost:1527/sample 连接。
  3. 键入 ejb 作为包的名称,然后单击 Next。向导显示选择的数据库中的所有表。
  4. 选择 CUSTOMER 表,单击 Add,然后单击 Finish
    。IDE 为 CUSTOMER 表和任何从 CUSTOMER (DISCOUNT_CODE) 引用的表创建 CMP Bean。IDE 还创建新的 JDBC 连接池和数据源,在部署项目时将在应用服务器上注册它们。

编写会话 Bean 的代码

现在创建一个会话 Bean,用它来处理 Web 应用程序客户端和实体 Bean 中的信息之间的访问。首先创建一个空的会话 Bean,生成对实体 Bean 的调用,然后添加一些业务方法。

  1. 在 Projects 窗口中,右键单击 CustomerBook-EJBModule 项目节点,然后选择 New > Session Bean。将会话 Bean 命名为 CustomerFacade,并将其放在 ejb 包中。把 Bean 设置为无状态的,并且只有远程接口。然后单击 Finish。IDE 创建 Bean 并在源代码编辑器中打开其 Bean 类。
  2. 在源代码编辑器中,右键单击 Bean 类的任意位置,然后选择 Enterprise Resources > Call Enterprise Bean。选择 CustomerEB,然后单击 OK。IDE 在源文件底部生成 lookupCustomerBean 方法。
  3. 在 Bean 类开始处的变量声明中添加如下代码:
    private ejb.CustomerLocalHome custHome;
  4. 现在让我们在会话 Bean 的 create 方法中获取对实体 Bean 的 home 接口的引用。删除 ejbCreate() 中的注释并添加如下的语句:
    custHome = lookupCustomerBean();
  5. 右键单击 Bean 类主体的任意位置,然后选择 EJB Methods > Add Business Method。指定以下信息:

    元素
    方法名 getCustomerInfo
    返回类型 String
    参数 int custId
    异常 javax.ejb.FinderException

  6. 在源代码编辑器中,把 getCustomerInfo 业务方法编辑为如下:
    public String getCustomerInfo(int custId) throws javax.ejb.FinderException {
        ejb.CustomerLocal customer = custHome.findByPrimaryKey(new Integer(custId));
        return "Name:" + customer.getName() + ", E-mail: " +customer.getEmail();
    }
    

    最终的 CustomerFacadeBean.java 文件应该像此处的一样。

编写 Web 模块代码

现在需要编写能为实体 Bean 提供用户界面的 Web 模块。Web 模块包含一个使用户能够通过客户号查找客户的 Servlet。

创建自定义服务定位器

上一节中,在调用 Enterprise Bean 时我们让 IDE 生成内联查找代码。在本节中,我们将创建 IDE 生成对 Enterprise Bean 的调用时使用的自定义服务定位器。服务定位器没有任何特殊功能,但是可以定制企业应用程序查找 Enterprise Bean 的方式。

  1. 在 Projects 窗口中,右键单击 CustomerBook-WebModule 节点,然后选择 New > File/Folder。在向导中,从 Enterprise category 中选择 Service Locator 模板。单击 Next。
  2. 键入 ServiceLocator 作为类名,键入 web 作为包,然后单击 Finish。

编写 Servlet 的代码

在最后一步中,向 Web 模块添加 Servlet,通过该 Servlet 可以查找和显示 CUSTOMER 表中的每个客户的信息。

  1. 在 Projects 窗口中,右键单击 CustomerBook-WebModule 节点,然后选择 New > Servlet。把 Servlet 命名为 CustomerDetail 并把它放在 web 包中。然后单击 Finish。
  2. 在源代码编辑器中,右键单击 Servlet 类的任意位置,然后选择 Enterprise Resources > Call Enterprise Bean。选择 CustomerFacade 会话 Bean,把 web.ServiceLocator 类设置为服务定位器策略,然后单击 OK。IDE 插入 lookup 方法。
  3. processRequest 方法编辑成如下所示的样子:
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
       response.setContentType("text/html");
       PrintWriter out = response.getWriter();
       out.println("<html>");
       out.println("<head>");
       out.println("<title>Servlet customerDetail</title>");
       out.println("</head>");
       out.println("<body>");
       out.println("<h1>Servlet customerDetail at " + request.getContextPath () + "</h1>");
    
       String customerNr = request.getParameter("customer_nr");
       if((customerNr != null) && !(customerNr.equals("")))
       {
       try{
       ejb.CustomerFacadeRemote custFacade = lookupCustomerFacadeBean();
       out.println("Customer's info for nr. " + customerNr + ": " + custFacade.getCustomerInfo(
                        Integer.parseInt(customerNr)));
       }catch(javax.ejb.FinderException ex){
           out.println("Customer with nr. " + customerNr +" not found");
         }
       }
    
       out.println("<form>");
       out.println("Customer number: <input type='text' name='customer_nr' />");
       out.println("<input type=submit value=Select />");
       out.println("</form>");
    
       out.println("</body>");
       out.println("</html>");
       out.close();
    }
    

    最终的 CustomerDetail.java 应该像此处一样。

构建和部署应用程序

现在可以把企业应用程序部署到应用服务器中了。不需要再对部署描述符进行配置。IDE 已经对部署描述符进行了配置,并为企业应用程序准备好连接池和数据源。

设置程序的默认 Web 页

默认情况下,Web 应用程序运行时显示它的 index.jsp 页面。由于我们的 index.jsp 是空白的,因此我们让 CustomerBook 项目显示 CustomerDetail

  1. 在 Projects 窗口中,右键单击 CustomerBook 项目,然后选择 Properties。接着在左面板上单击 Run。
  2. 在 Relative URL 字段中键入 /CustomerDetail

运行应用程序

  1. 右键单击 CustomerBook 项目,然后选择 Run Project。IDE 执行如下的所有操作:
    • 构建企业应用程序项目及其所有子项目(Web 模块项目和 EJB 模块项目)。
    • 如果服务器还没有运行则启动它。
    • 如果企业应用程序已经部署到应用服务器则解除部署。
    • 把企业应用程序部署到应用服务器。
    • 打开在指定的相对 URL 处的 Web 模块。

将会在外部浏览器中看到如下的页面。当键入某个客户号并按下 Enter 键时,页面将显示客户的信息。

故障排除

一些常见问题包括:

  • 打开 CustomerDetail 时出现 HTTP Status 404 错误。这意味着应用服务器找不到 CustomerDetail servlet。确保上下文根目录 (/CustomerBook-WebModule)与为 Web 模块设置的根目录匹配(右键单击 Web 模块项目节点 > Properties > Run > Context Path)。
  • 在 CustomerDetail 表单中提交客户号时出现 javax.transaction.TransactionRolledbackException:CORBA TRANSACTION_ROLLEDBACK 错误。通常这意味着服务器不能访问数据库。为了说明此问题,请执行以下操作:
    • 确保 Derby 数据库在运行。要启动 Derby,选择 Tools > Derby > Start Derby Server。
    • 确保在应用服务器上正确地注册了资源池和数据源。要检查这一点,需要进入 Runtime 窗口并展开应用服务器的 JDBC 节点。JDBC Resources 节点应该包括 jdbc/derby_net,Connection Pools 节点应该包括 derby_netConnectionPool 节点。要注册所缺少的连接池和数据源,应该执行:

      1. 展开 CustomerBook-EJBModule 项目的 Server Resources 节点。
      2. 右键单击 connection-pool-derby_net.sun-resource 节点,然后选择 Register。
      3. datasource-jdbc_derby_net.sun-resource 节点执行相同的步骤。

注意: 通过进入 Runtime 窗口,右键单击应用服务器节点,然后选择 View Server Log,可以查看服务器日志。

下一步

有关使用 NetBeans IDE 5.0 的更多信息,请参见以下参考资料:

要发送评论和建议、获得支持和随时获得关于 NetBeans IDE J2EE 开发特性的最新发展情况,请加入 nbj2ee@netbeans.org 邮件列表。




↑返回目录
前一篇: 在 NetBeans IDE 5.0 中导入 J2EE 应用程序
后一篇: 使用 NetBeans IDE 测试 Enterprise Beans