您的位置:首页 > 其它

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

2010-09-17 19:11 856 查看
昨天晚上和同学一起去电影院看了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]><![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]><![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]><![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]><![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]><![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]><![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]><![endif]-->
1.这个例子最大的亮点,就是使用了EJB
3.0的Inseption。大家可以从Servlet的代码里看到,只是简单的用注释@EJB对Session
Bean做了一个声明。程序运行时就可以直接使用这个EJB了,Inception果然强大。
2.然后需要注意的地方是,这个简单的应用虽然简单,但是结构完整,它包括了3个项目:SumEJB,
SumWeb, SumEAR。最后通过SumEAR自动生成.ear文件进行部署,ear里包含了WEB的.war文件和EJB的jar文件,而它本身也是jar文件,只是换了一个后缀名。
这是一个非常简单EJB的小例子,但是展示SessionBean的用法以及EJB的注入功能。下一部分,我想介绍一下EJB的Entity Bean以及结合APJ的使用。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐