ale*_*dro 4 java netbeans ejb-3.0 netbeans-7
我是Java EE/EJB的新手,对它知之甚少.
我已经下载了NetBeans(7.01)和GlassFish(3.01).但是,因为我不知道EJB,并且没有得到如何在NetBeans中运行代码,其中包括一个简单的无状态会话Bean,一个JSP和一些Servlet.
我发现了一个很好的例子代码计算器实施例.任何机构可以通过一步一步的程序如何运行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初始化.但是,如果您使用@SingletonEJB,则可以强制容器在服务器启动期间初始化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;
}
}
Run Code Online (Sandbox Code Playgroud)
运行此示例代码(工具栏上的绿色大箭头)后,您应该看到类似于此的GlassFish日志:
INFO:EJB NewSessionBean的可移植JNDI名称:[java:global/EJBModule1/NewSessionBean!sss.NewSessionBean,java:global/EJBModule1/NewSessionBean]
INFO:9
INFO:EJBModule1已在78毫秒内成功部署.
此示例还显示了EJB 3.1的另一个功能 - 现在,您不仅不需要使用home接口,而且甚至不必使用任何接口.你可以直接使用你的课程.
请注意,此示例有几个问题.您不应该使用System.out.println指令,我没有使用业务接口但是用于this调用业务方法,我没有使用Servlet来调用我的EJB的业务方法等等.
这只是一个让您开始EJB开发的非常简单的示例.
根据要求,您可以在下面找到EJB < - > Servlet < - > JSP工作流的迷你教程:
1.创建Web项目
(注意:你可以使用Singleton EJB实现上面的例子 - 也可以使用Web Project.在这种情况下,我们需要Web Project,因为我们将在一个包中创建一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
4.创建将调用业务逻辑的Servlet
您的项目上的RMB或Ctrl + N- > Web- > Servlet- > Next- >定义servlet名称及其包 - > Next- >定义其URL模式(记住它 - 您需要它来访问您的servlet) - > Finish.
5.定义Servlet和EJB之间的依赖关系.
您的控制器(Servlet)需要使用您的EJB.你不想做任何查找或讨厌的样板代码.您只需定义Servlet将使用Calculator注释来使用EJB.
@EJB
Calculator calculator;
Run Code Online (Sandbox Code Playgroud)
你把它作为一个字段放在你的servlet类中,所以它应该是这样的:
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {
@EJB
Calculator calculator;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ...
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
只需观察表单action属性值(它应该是您的Servlet URL映射.).
您应该知道GlassFish使用的端口.我想在NetBeans中默认情况下是这样的37663.接下来是Web应用程序URL和JSP文件名.将它们组合在一起你应该有类似的东西:
在两个输入文本中键入操作数,单击"计算"后,您应该看到结果.