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

2024-02-01 23:08

本文主要是介绍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]><![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.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的使用。

 

这篇关于J2EE实践第二部分-创建一个简单的EJB Web程序(盗梦空间版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668764

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2