我对 Java EE/EJB 非常陌生,对此知之甚少。
我已经下载了 NetBeans (7.01) 和 GlassFish (3.01)。但是,由于我不了解 EJB,并且不知道如何在 NetBeans 中运行代码,其中包括一个简单的无状态会话 Bean、一个 JSP 和一些 Servlet。
我找到了一个很好的示例代码Calculator Example。任何机构都可以通过逐步说明如何运行 NetBeans 示例来帮助我吗?提前致谢。
我对 Java EE/EJB 非常陌生,对此知之甚少。
我已经下载了 NetBeans (7.01) 和 GlassFish (3.01)。但是,由于我不了解 EJB,并且不知道如何在 NetBeans 中运行代码,其中包括一个简单的无状态会话 Bean、一个 JSP 和一些 Servlet。
我找到了一个很好的示例代码Calculator Example。任何机构都可以通过逐步说明如何运行 NetBeans 示例来帮助我吗?提前致谢。
我建议您不要使用链接的教程。似乎是从 2011 年开始的,但它仍然谈论很多部署描述符和家庭接口(现在这些都是旧的、坏的、丑陋的和不必要的)。
你可以参考这篇关于 EJB 3.0的JBoss 教程。
NetBeans 对 Java EE 开发有很好的支持。只是一个非常快速的教程(在 Java EE 6 中):
1. 创建您的 EJB 项目(EJB 模块)
创建新项目:Shift + Ctrl + N
-> Java EE
-> EJB Module
-> Next
。选择任何适合您的名称并点击Next
。选择目标应用程序服务器(NetBeans 应该建议您 Glassfish Server 3.x)和 Java EE 版本(选择 Java EE 6)-> Finish
。
2. 将 EJB 添加到您的项目中
现在您已经创建了 EJB 项目。右键单击Projects
左侧选项卡中的项目名称。选择New
-> Session Bean
。选择适合您的任何名称,定义您的包并选择Singleton
(如果您使用 EJB 3.0,则无法创建单例 EJB - 只需选择另一种类型)。确保未选中本地和远程接口。打Finish
。
您刚刚创建了您的第一个 EJB ;-)
3.调用EJB业务方法
您现在可以尝试使用它。您需要执行您的 EJB 类方法——为此,您需要有人调用您的方法。它可以是:
@PostConstruct
方法。我将向您展示如何使用最后一个选项,如果您可以使用 Singleton EJB,这似乎是最简单的。@PostConstruct
关于注解方法,您只需要知道它会在应用程序容器创建您的 bean 时被调用。它就像构造函数的一种特殊类型。
关键是您通常无法控制 EJB 的初始化。但是,如果您使用@Singleton
EJB,您可以强制容器在服务器启动期间初始化您的 bean。这样,您将知道您的@PostConstruct
方法将在服务器启动期间被调用。
此时,您应该有类似于以下的代码:
package your.package;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.LocalBean;
import javax.ejb.Startup;
@Singleton
@Startup
public class NewSessionBean {
// This method will be invoked upon server startup (@PostConstruct & @Startup)
@PostConstruct
private void init() {
int result = add(4, 5);
System.out.println(result);
}
// This is your business method.
public int add(int x, int y) {
return x + y;
}
}
运行此示例代码(工具栏上的绿色大箭头)后,您应该会看到与此类似的 GlassFish 日志:
信息:EJB NewSessionBean 的可移植 JNDI 名称:[java:global/EJBModule1/NewSessionBean!sss.NewSessionBean, java:global/EJBModule1/NewSessionBean]
信息:9
信息:EJBModule1 在 78 毫秒内成功部署。
这个例子还展示了 EJB 3.1 的另一个特性——现在,您不仅不需要使用 home 接口,而且甚至不需要使用任何接口。你可以直接使用你的类。
请注意,此示例有几处错误。你不应该使用System.out.println
指令,我没有使用过业务接口,而是使用this
过调用业务方法,我没有使用 Servlet 来调用我的 EJB 的业务方法等等。
这只是一个非常简单的示例,让您开始 EJB 开发。
根据要求,您可以在下面找到 EJB<->Servlet<->JSP 工作流的迷你教程:
1. 创建 Web 项目
(注意:您也可以使用 Singleton EJB 和 Web 项目来实现上述示例。在这种情况下,我们需要 Web 项目,因为我们将在一个包中创建一个 servlet 和 JSP。)
Ctrl + Shift + N
-> Java Web
-> Web Application
-> Next
。设置您的应用程序的名称 -> Next
-> 默认值很好(记住上下文路径 - 您需要它来访问您的应用程序)-> Finish
。
2. 创建你的 EJB
这一次,它将是无状态 EJB,因为它更好地反映了计算器 bean 应该是什么。
您完全按照上面描述的方式进行操作 - 只需选择Stateless
而不是Singleton
在相应的窗口中。
3. 将业务逻辑放入您的 EJB
找到下面的例子:
package com.yourpckg;
import javax.ejb.Stateless;
// Stateless EJB with LocalBean view (default when no interface is implementated)
@Stateless
public class Calculator {
// Business method (public) that may be invoked by EJB clients
public int add(int x, int y) {
return x + y;
}
}
4.创建将调用您的业务逻辑的Servlet
RMB 在您的项目或Ctrl + N
-> Web
-> Servlet
-> Next
-> 定义 servlet 名称及其包 -> Next
-> 定义其 URL 模式(记住它 - 您将需要它来访问您的 servlet)-> Finish
。
5. 定义 Servlet 和 EJB 之间的依赖关系。
您的控制器(Servlet)需要使用您的 EJB。您不想进行任何查找或讨厌的样板代码。您只需定义您的 Servlet 将Calculator
通过使用注释来使用您的 EJB。
@EJB
Calculator calculator;
你把它作为一个字段放在你的 servlet 类中,所以它应该是这样的:
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {
@EJB
Calculator calculator;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ...
}
6. 将控制器逻辑放入您的 Servlet
默认情况下,NetBeans 将所有 HTTP 方法请求委托给一个方法 - processRequest(-)
,因此这是您应该修改的唯一方法。
找到下面的例子:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// Fetch the user-sent parameters (operands)
int operand1 = Integer.parseInt(request.getParameter("operand1"));
int operand2 = Integer.parseInt(request.getParameter("operand2"));
// Calculate the result of this operation
int result = calculator.add(operand1, operand2);
// Put the result as an attribute (JSP will use it)
request.setAttribute("result", result);
} catch (NumberFormatException ex) {
// We're translating Strings into Integers - we need to be careful...
request.setAttribute("result", "ERROR. Not a number.");
} finally {
// No matter what - dispatch the request back to the JSP to show the result.
request.getRequestDispatcher("calculator.jsp").forward(request, response);
}
}
7.创建JSP文件
Ctrl + N
在您的项目上 -> Web
-> JSP
-> Next
-> 键入文件名(在我的情况下,它的calculator
,因为 Servlet 代码使用此名称(查看getRequestDispatcher
部分)。将文件夹输入值留空。-> Finish
。
8.用用户界面代码填充JSP文件
它应该是一个简单的表单,它定义了两个参数:operand1
和operand2
将请求推送到您的 servlet URL 映射。就我而言,它类似于以下内容:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="MyServlet">
<input type="text" name="operand1" size="3" value="${param['operand1']}" /> +
<input type="text" name="operand2" size="3" value="${param['operand2']}" /> =
<input type="submit" value="Calculate" />
</form>
<div style="color: #00c; text-align: center; font-size: 20pt;">${result}</div>
</body>
</html>
只需注意表单action
属性值(它应该是您的 Servlet URL 映射。)。
您应该知道 GlassFish 使用的端口。我猜默认情况下在 NetBeans 中它的37663
. 接下来是 Web 应用程序 URL 和 JSP 文件名。将它们结合在一起,你应该有类似的东西:
在两个输入文本中键入操作数,单击“计算”后,您应该会看到结果。