我花了我的大部分时间。NET技术(SharePoint时,ASP,永丰... ...),但我知道,J2EE是非常强大的头号技术在企业中应用的世界,所以我决定,我应该学习J2EE的一些基本知识。您可以下载{A}
这是一个简单的教程上quot;,如何构建简单的企业DBquot顶部的Web应用程序使用Java持久性API,JSF中,NetBeans和Derby数据库。我们将创建应用程序,允许管理quot;公司和他们的Productsquot;首先,您需要的NetBeans 6.7.1 {A2}。我用6.7.1,因为它支持与逆向工程和代码生成的UML建模工具。包是迄今尚未移植到新版本的NetBeans。J2EE应用服务器 - 我用的GlassFish 2.1
Derby数据库(Java DB是Sun的这个开源数据库的版本)
您可以下载NetBeans捆绑已经包括了一切。只要记住,这是测试的6.7.1/GlassFish 2.1版本和较新版本的一些设置可能无法正常工作。技术放大器;推荐阅读Java持久性API - 将有助于我们与对象 - 关系映射 - 它将把Java对象在数据库中的表。实体Bean - 代表的对象(公司,产品)和其字段(名称,描述),后来由于数据表中的列代表。会话Bean - 而是代表所有可与实体Bean(创造新产品,产品的公司名单... ...)的行动JSF - 加速GUI创建一个易于使用的Web应用程序框架。我用1.2版本,这是JSP(下层为建立动态Web应用程序技术)上建立的。创建项目
在NetBeans中选择New - GT;新的项目GT的Java EE - GT;企业应用程序。后来,你会被要求到指定的应用服务器,在这里你可以选择安装GlassFish实例。
{S0}
,在最后一个标签,您可以指定为EJB和Web应用程序模块的名称。这是因为NetBeans将创建两个模块。 EJB模块会照顾你的quot;型号和Controlquot,Web应用程序模块将照顾quot; Viewquot;
如果你想与NetBeans UML工具比选择新的项目GT实体Bean模型,你UML - GT; Java平台模型- GT;完成,并且以后你可以创建类图。开始与建模
首先,我们要创建实体Bean - 代表一些现实世界的实体,将存储在数据库中的对象。在我们的应用程序有2:公司及产品。下面是我们要创建的类图。
{S1}
,从这个图中,我们可以生成实体类。右键单击UML项目- GT;生成代码。你应该得到以下类:public class Company {
private int id;
private String description;
private String name;
private List<product> products;
public Company () {
}
public int getId () {
return id;
}
public void setId (int val) {
id = val;
}
public String getName () {
return name;
}
public void setName (String val) {
name = val;
}
public List<product> getProducts() {
return products;
}
public void setProducts(List<product> products) {
this.products = products;
}
public String getDescription () {
return description;
}
public void setDescription (String val) {
this.description = val;
}
}
{C}
你也可以写的类和使用逆向工程获得的类图。从类创建实体Bean
要转换的实体Bean的类,你必须做两个简单的步骤 - 添加注释和实现Serializable接口。public class Company implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="companyID",nullable=false)
private int id;
@Column(name="companyDescription")
private String description;
@Column(name="companyName")
private String name;
@ManyToMany
private List<product> products;
...and all the setters and getter...
}
这是相当不言自明的。类被注解为@实体,并有至少有一个@ Id字段。然后,我们可以指定将在数据库中创建的列的名称,而且生成的ID值的策略。
你会发现,有NetBeans的灯泡告诉你,没有持久性单元 - 现在我们将创建一个。
{S2}创建持久性单元
持久性单元将执行对象 - 关系映射为我们。要创建一个,我们将首先创建一个数据库。
在quot; Servicesquot;窗格本地化数据库- GT的Java DB - GT;创建数据库和指定的要求细节。
{S3}
现在,当我们有数据库,我们可以创建数据库连接,这将是持久性单元用于连接到DB。
数据库 - >新建连接。
{S4}的
现在回去,然后右击您的应用程序的EJB模块,并选择New - GT;持久性单元。
{五}
,我们继续与会话bean之前,我们将准备一个命名查询。命名查询以后编译SQL和使用的持久性单元的静态查询。我们将使用一个简单的查询表中的所有公司。我们把上面的类定义的查询。@Entity
@NamedQuery(
name="Company.getAllCompanies",
query="SELECT c FROM Company c"
)
public class Company implements Serializable {
}
现在你已经完成持久性单元,你可以尝试部署项目。当然还有到目前为止,创建没有的功能,但在部署数据库应为您创建。您可以在"服务"选项卡中检查导致数据库。
{中六}会话Bean
现在我们将创建一个会话Bean,这将为我们可以执行我们的实体Bean的方法和行动。
转到企业Bean - GT;新GT比指定包的会话Bean,和离开的标准设置。
{七}
你可以看到,新创建的bean实现的接口与quot; Localquot。
现在我们将添加的第一种方法将返回数据库中的所有公司。 NetBeans的告诉你如何做到这一点 - 上下文菜单 - >插入代码- GT;添加Bussiness方法。
{S8}
该方法将被定义在实施创建的接口和方法存根。现在,您可以编辑像这样的代码:@Stateless
public class SalesSessionBean implements SalesSessionLocal {
@PersistenceContext
private EntityManager em;
public List<company> getAllCompanies() {
List<company> companies = em.createNamedQuery(
"Company.getAllCompanies").getResultList();
return companies;
}
}
请注意,我们定义这是一个类,管理持久化上下文的EntityManager的。持久化上下文是一篮子管理实体(对象的代表公司,产品...).这是由实体管理托管类是实体Bean。在该方法中,你可以看到,我们都调用我们之前创建的命名查询。
支持Bean
现在我们将创建一个会话Bean和JSP网站代表GUI之间的中间层 - 这一层是一个backing bean。 backing bean的管理,是从实际的JSP页面访问的是一个Java类。在Web模块中创建新类(新GT Java类),并命名它SalesBack。现在这里是执行:public class SalesBack {
@EJB
SalesSessionLocal ssl;
public List<company> getAllCompanies(){
return ssl.getAllCompanies();
}
}
你可以看到这个类基本上引用会话Bean(小心你要引用的接口,而不是实际执行)。比的方法,我们简单地调用会话Bean的方法。从这一点看来,这一层是没有必要的,但实际上它是安静的帮助你将在后面看到。Faces配置
为了能够使用,只是在JSP页面中创建备份豆,您将需要进行一些修改faces - config.xml文件。打开该文件并添加到faces - config元素的以下内容:<managed-bean>
<managed-bean-name>sales</managed-bean-name>
<managed-bean-class>sales.back.SalesBack</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
是一定要检查的backing bean的类(包括包名)。稍后,您可以参考的backing bean作为quot; salesquot;在JSP页面。JSF页面
现在,我们将呈现什么样的优势/组件带来的Java Server Faces,以及如何使用它们。首先,我们将创建一个简单的页面,只显示了在数据库中存储的所有公司在的表。在Web模块中创建一个新的JSP页面中使用JSF。 (新GT; JSF JSP页面)。创建页面后,你可以看到它包含两个@ taglib指令引用JSF框架的标签。
JSP技术可以延长,由quot;自定义tagsquot。当我们注册使用的taglib目录的前缀,我们将介绍JSF框架的所有自定义标签。第一组与前缀quot; fquot名为quot; Corequot;引用独立渲染器(例如,转换器,验证器)的所有组件。第二组前缀quot; hquot;名为"HTMLquot;介绍所有的HTML标签和组件带来JSF创建漂亮的GUI和图形用户界面功能(按钮,表格,网格...).
好了,现在让放的代码将显示表的公司。 <h1><h:outputtext value="Companies List"></h:outputtext></h1>
<h:datatable value="#{sales.allCompanies}" var="item">
<h:column>
<f:facet name="header"><h:outputtext value="Name"></h:outputtext>
<h:outputtext value="#{item.name}">
</h:outputtext>
<h:column>
<f:facet name="header"><h:outputtext value="Description">
</h:outputtext>
<h:outputtext value="#{item.description}">
</h:outputtext>
</f:facet>
</h:column></f:facet></h:column></h:datatable>
JSF的主要优势是,它可以让我们一些HTML组件的内容绑定到backing bean的属性/领域。因为在我们的backing bean的方法称为quot; getAllCompaniesquot;比在这里我们可以参考这种方法作为quot;#{sales.allCompanies} quot;这是绑定的quot; LT; datatablegt; quot;通过设置值属性的组件。注意,第二个属性VAR让你设置quot;一排的绑定集合; namequot。后来在列定义,你可以解决在收集这个名字(这里"itemquot;)公司。面临web.xml中的servlet配置
OK,现在你已经创建的JSP文件是一次尝试。之前,你将不得不告诉应用服务器,如果用户导航到你的页面,该页面包含面元素,并使用Faces servlet处理。打开web.xml和改变这样的Faces Servlet的设置:<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
的重要组成部分是映射配置。基本上你说的话,每个文件结束JSF将面临的Servlet处理。现在,如果创建的文件的名称是quot; companies.jspquot,比在浏览器中,您将参考由quot; companies.jsfquot;现在运行该项目,并在浏览器类型的quot; companies.jsfquot;你应该得到以下结果。
{S9}
显然,公司的表是空的。所以,尽管使用的NetBeans(服务- GT,数据库)运行一些SQL INSERT语句,你应该能够看到在表中插入数据。INSERT INTO SALES.COMPANY (companyname, companydescription) values('First company',
'Sales bananas');
INSERT INTO SALES.COMPANY (companyname, companydescription) values('Second company',
'Sales oranges');
{S10}
确定在未来的职位,我将完成这项申请,并提供一些额外的功能,以编辑该公司的详细信息,添加和删除一个公司的产品。
{A3}|一月Fajfr