技术开发 频道

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

对 Web 模块进行编码

现在,我们需要对 Web 模块进行编码,该模块将为实体 Bean 提供用户接口。Web 模块包含一个 Servlet,允许用户按客户编号对客户进行搜索。

创建定制服务定位器

在上一节中,我们在调用 Enterprise Bean 时通过 IDE 生成了内联查找代码。在此节中,我们将创建一个定制服务定位器,IDE 将在生成对 Enterprise Bean 的调用时用到它。我们的服务定位器没有任何特殊功能,但您可以定制企业应用程序查找 Enterprise Bean 的方式。

  1. 在“项目”窗口中,右键单击 CustomerBook-WebModule 节点,然后选择“新建”>“文件/文件夹”。在向导中,从“企业”类别中选择服务定位器模板。单击“下一步”。
  2. 键入 ServiceLocator 作为类名,键入 Web 作为包,然后单击“完成”。

对 Servlet 进行编码

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

  1. 在“项目”窗口中,右键单击 CustomerBook-WebModule 节点,然后选择“新建”> "Servlet"。将 Servlet 命名为 CustomerDetail,然后将其放在 web 包中。然后单击“完成”。
  2. 在源代码编辑器中,在 Servlet 类中的任意位置单击鼠标右键,选择“企业资源”>“调用 Enterprise Bean”。选择 CustomerFacade 会话 Bean,将 web.ServiceLocator 类设置为服务定位器策略,然后单击“确定”。IDE 将插入该查找方法。
  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(); }
  1. 最终的 CustomerDetail.java Servlet 应如此处所示。

生成和部署应用程序

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

设置程序的缺省 Web 页

缺省情况下,Web 应用程序在运行时会显示其 index.jsp 页。由于我们的 index.jsp 是空的,因此希望 CustomerBook 项目显示 CustomerDetail Servlet。

  1. 在“项目”窗口中,右键单击 CustomerBook 项目,然后选择“属性”。接下来在左面板中单击“运行”。
  2. 在“相对 URL”字段中键入 /CustomerDetail

运行应用程序

  1. 右键单击 CustomerBook 项目并选择“运行项目”。IDE 会执行以下所有任务:
    • 生成企业应用程序项目及其所有子项目(Web 模块项目和 EJB 模块项目)。
    • 如果服务器尚未运行,请启动它。
    • 如果企业应用程序已部署到应用服务器上,请卸下它。
    • 将企业应用程序部署到应用服务器上。
    • 打开在指定的相对 URL 中的 Web 模块。

您应在外部浏览器中看到以下页面。在键入某一客户编号并按 Enter 键时,页面中应显示该客户的信息。

疑难解答

一些常见问题包括:

  • 打开 CustomerDetail 时出现 HTTP Status 404 错误。这意味着,应用服务器找不到 CustomerDetail Servlet。确保上下文根目录 (/CustomerBook-WebModule) 与为 Web 模块设置的根目录匹配(右键单击 Web 模块项目节点 >“属性”>“运行”>“上下文路径”)。
  • 在 CustomerDetail 表单中提交客户编号时出现 javax.transaction.TransactionRolledbackException: CORBA TRANSACTION_ROLLEDBACK 错误。这通常意味着,服务器无法访问数据库。如果出现这种情况,请执行以下操作:
    • 确保 Derby 数据库服务器正在运行。要启动 Derby,请选择“工具”> "Derby" >“启动 Derby 服务器”。
    • 确保在应用服务器中正确注册了资源池和数据源。要对其进行检查,可转到“运行环境”窗口并展开应用服务器的 JDBC 节点。“JDBC 资源”节点应包含 jdbc/derby_net 节点;“连接池”节点应包含 derby_netConnectionPool 节点。注册连接池和数据源(如果尚未注册):

      1. 展开 CustomerBook-EJBModule 项目的“服务器资源”节点。
      2. 右键单击 connection-pool-derby_net.sun-resource 节点,然后选择“注册”。
      3. datasource-jdbc_derby_net.sun-resource 节点执行相同的步骤。

注意:要查看服务器日志,请转至“运行环境”窗口,右键单击应用服务器节点,然后选择“查看服务器日志”。

0
相关文章