`
baiguomeng
  • 浏览: 949111 次
文章分类
社区版块
存档分类
最新评论

J2EE实践第二部分-创建一个简单的EJB Web程序(盗梦空间版)

 
阅读更多

昨天晚上和同学一起去电影院看了IMAX版的盗梦空间,晚上回家后做了个梦,竟然梦见自己做了个梦--早上醒来,才发现自己又做了一个梦中梦。这里之所以用了“又”,那是因为自己经常会做梦中梦,很有劲。呵呵,回到正题上,盗梦空间这部电影很精彩,今天仍然回味无穷,而且因为这部电影导致灵感大发,于是写了这个EJB的小例子,也就是EJB盗梦空间版。

准备:
搭建开发环境:
JDK: 1.6.0
eclipse: 最新的HeliosWTP版本
Web服务器: Jboss 5.1

场景:

简便起见,还是一个非常简单的小例子,用户通过Web页面输入两个数字,后台由本地的ejb计算后,将结果返回到用户。

1. 首先创建一个EJB项目,名字叫SumEJB,然后在这里将它自动关联到EAR中,叫SumEAR。这样完成后,eclipse会自动创建一个SumEAR项目。

2.不用创建EJB Client Project了,这里不用选择。最后完成项目的创建。

3.然后创建一个Local的Session Bean,SessionBean主要负责业务逻辑的处理。这里我们的Web页面和它都在同一服务器里,所以用了Local类型,这样可以提高性能。

创建好ejb后,开始编写代码:

(1)首先是SumToolLocal接口:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

packagecom.sap.demo.sum.ejb;

importjavax.ejb.Local;

@Local

public interface SumToolLocal {

public float add(float f1, float f2);

}

(2)然后是它的实现类:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

packagecom.sap.demo.sum.ejb;

importjavax.ejb.Stateless;

/**

* Session Bean implementation class SumTool

*/

@Stateless

public class SumTool implements SumToolLocal {

/**

* Default constructor.

*/

public SumTool() {

// TODOAuto-generated constructor stub

}

public float add(float f1, float f2) {

return f1 + f2;

}

}

4.然后创建一个Web Project,名字叫SumWeb,也把它选到add to SumEAR。

5.然后右键选择它的属性,在Project Referece中,选择EJB和EAR项目:

6.由于要用到EJB,所以我们选择 Project的Build path,将SumEJB加入到BUILD PATH中。

7.完成设置后,开始编写代码了:

(1)先是写一个普通的java bean:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

packagecom.sap.demo.sum.model;

public class Number {

private float param1 = 0;

private float param2 = 0;

private float result = 0;

public float getResult() {

return result;

}

public void setResult(float result) {

this.result = result;

}

public float getParam1() {

return param1;

}

public void setParam1(float param1) {

this.param1 = param1;

}

public float getParam2() {

return param2;

}

public void setParam2(float param2) {

this.param2 = param2;

}

}

(2)然后是两个jsp页面,index.jsp和result.jsp,很简单,分别是输入和输出页面:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

index.jsp:

<%@ pagelanguage="java" contentType="text/html;charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE htmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">

<title>Insert titlehere</title>

</head>

<body>

<FORM ACTION="SumServlet">

First Parameter: <INPUT TYPE="TEXT"NAME="param1"><BR>

Second Parameter: <INPUT TYPE="TEXT"NAME="param2"><BR>

<CENTER><INPUT TYPE="SUBMIT"></CENTER>

</FORM>

</body>

</html>

result.jsp:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

<%@ pagelanguage="java" contentType="text/html;charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE htmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">

<title>Insert titlehere</title>

</head>

<body>

<jsp:useBean id="number"

type="com.sap.demo.sum.model.Number"

scope="request" />

<jsp:getProperty name="number"property="param1" /><br>

<jsp:getProperty name="number"property="param2" /><br>

<jsp:getProperty name="number"property="result" /><br>

</body>

</html>

(3)最后创建一个Servlet:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

packagecom.sap.demo.sum.model;

import java.io.IOException;

import javax.ejb.EJB;

importjavax.servlet.RequestDispatcher;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.sap.demo.sum.ejb.SumTool;

/**

* Servlet implementation class SumServlet

*/

public class SumServletextends HttpServlet {

private static final long serialVersionUID = 1L;

@EJB

private SumTool sumtool;

/**

* @see HttpServlet#HttpServlet()

*/

public SumServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @seeHttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

String param1 = request.getParameter("param1");

String param2 = request.getParameter("param2");

float f1 = Float.parseFloat(param1);

float f2 = Float.parseFloat(param2);

float result = sumtool.add(f1, f2);

Number b = new Number();

b.setParam1(f1);

b.setParam2(f2);

b.setResult(result);

request.setAttribute("number", b);

RequestDispatcher dispatcher =request.getRequestDispatcher("result.jsp");

dispatcher.forward(request, response);

}

/**

* @seeHttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

}


8.部署程序并运行:

首先输入两个数字:

然后点提交后,我们就可以看到EJB计算的结果了:

9. 小结:

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]><style> <!-- table.MsoNormalTable {line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif"} --> </style><![endif]-->

1.这个例子最大的亮点,就是使用了EJB 3.0Inseption。大家可以从Servlet的代码里看到,只是简单的用注释@EJBSession Bean做了一个声明。程序运行时就可以直接使用这个EJB了,Inception果然强大。

2.然后需要注意的地方是,这个简单的应用虽然简单,但是结构完整,它包括了3个项目:SumEJB, SumWeb, SumEAR。最后通过SumEAR自动生成.ear文件进行部署,ear里包含了WEB.war文件和EJBjar文件,而它本身也是jar文件,只是换了一个后缀名。

这是一个非常简单EJB的小例子,但是展示SessionBean的用法以及EJB的注入功能。下一部分,我想介绍一下EJB的Entity Bean以及结合APJ的使用。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics