我是Java EE / EJB的新手,对此知之甚少。
我已经下载了NetBeans(7.01)和GlassFish(3.01)。但是,因为我不知道EJB,并且没有得到如何在NetBeans中运行代码,其中包括一个简单的无状态会话Bean,一个JSP和一些Servlet。
我找到了一个很好的示例代码Calculator Example。任何机构可以通过一步一步的程序如何运行NetBeans示例来帮助我吗?提前谢谢。
答案 0 :(得分:6)
我建议您不使用链接教程。它似乎是从2011年开始的,但它仍然讨论了许多部署描述符和家庭界面(现在是旧的,坏的,丑陋的和不必要的)。
您可以参考这个关于EJB 3.0的JBoss tutorial。
NetBeans对Java EE开发有很大的支持。只是一个非常快速的教程(在Java EE 6中):
<强> 1。创建EJB项目(EJB模块)
创建新项目:Shift + Ctrl + N
- &gt; Java EE
- &gt; EJB Module
- &gt; Next
。选择适合您的名称,然后点击Next
。选择目标应用程序服务器(NetBeans应该建议您使用Glassfish Server 3.x)和Java EE版本(选择Java EE 6) - &gt; Finish
。
<强> 2。将EJB添加到项目中
现在您已经创建了EJB项目。右键单击左侧Projects
选项卡中的项目名称。选择New
- &gt; 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日志:
INFO:EJB NewSessionBean的可移植JNDI名称: 【JAVA:全球/ EJBModule1 / NewSessionBean sss.NewSessionBean, Java的:全球/ EJBModule1 / NewSessionBean]
信息:9
信息:EJBModule1是 在78毫秒内成功部署。
此示例还显示了EJB 3.1的另一个功能 - 现在,您不仅不需要使用家庭接口,而且甚至不必使用任何接口。你可以直接使用你的课程。
请注意,此示例有几个问题。您不应该使用System.out.println
指令,我没有使用业务接口但使用this
来调用业务方法,我还没有使用Servlet调用我的EJB业务方法等等。
这只是一个让你开始EJB开发的一个非常简单的例子。
根据要求,您可以在下面找到EJB&lt; - &gt; Servlet&lt; - &gt; JSP工作流程的迷你教程:
<强> 1。创建Web项目
(注意:您可以使用Singleton EJB实现上述示例 - 使用Web Project。在这种情况下,我们需要Web Project,因为我们将在一个包中创建一个servlet和JSP。)
Ctrl + Shift + N
- &gt; Java Web
- &gt; Web Application
- &gt; Next
。设置应用程序的名称 - &gt; Next
- &gt;默认设置很好(请记住上下文路径 - 您需要它来访问您的应用程序) - &gt; 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
您项目上的人民币或Ctrl + N
- &gt; Web
- &gt; Servlet
- &gt; Next
- &gt;定义servlet名称及其包 - &gt; Next
- &gt;定义其URL模式(记住它 - 你需要它来访问你的servlet) - &gt; 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
- &gt; Web
- &gt; JSP
- &gt; Next
- &gt;键入文件名(在我的例子中为calculator
,因为Servlet代码使用此名称(请查看getRequestDispatcher
部分)。将文件夹输入值保留为空。 - &gt; 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文件名。将它们组合在一起你应该有类似的东西:
在两个输入文本中,您可以键入操作数,然后单击“计算”&#39;你应该看到结果。