`
friend365
  • 浏览: 54353 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

J2EE应用服务器使用JNDI

阅读更多

在J2EE环境下使用JNDI是非常简单的事,因为所有的J2EE容器都要实现JNDI服务,所以,在J2EE环境下使用JNDI,与使用Hashtable也没有什么太大区别。只有一点限制,那就是绑定对象时,对象所属的类必须实现java.io.Serializable接口,这一点也实在一点也不困难,几乎所有用到的Java类都实现了这个接口,对于自定义的类,在接口实现列表里把这个接口加进去也就是了。

下面,我将演示一下如何在J2EE环境下使用JNDI,为了保证代码的通用性,我不使用struts之类的框架,而是直接使用标准JSP和Servlet实现。我将该项目的名称定为jndi_test

要使用JNDI,需要先到SUN的网站上去下载jndi.jar。

2.1 JSP
本项目包括5个JSP,功能说明如下:

index.jsp:首页
bind.jsp:用于在JNDI中绑定对象
bind_result.jsp:绑定对象后的返回页面
lookup.jsp:用于在JNDI中检索对象
lookup_result.jsp:用于显示检索对象
本节中用到的JSP代码如下,代码都简单地很,就不多做解释了。

2.1.1 index.jsp

  1. < %...@ page language="java" contentType="text/html; charset=GB18030" 
  2.     pageEncoding="GB18030"%> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. < html> 
  5. < head> 
  6. < meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. < title>JNDI Test< /title> 
  8. < /head> 
  9. < body> 
  10. < a href="bind.jsp" target="_blank">http://www.51itcn.com/bind.jsp< /a> 
  11. < br /> 
  12. < a href="lookup.jsp" target="_blank">http://www.51itcn.com/lookup.jsp< /a> 
  13. < /body> 
  14. < /html> 

2.1.2 bind.jsp

  1. < %...@ page language="java" contentType="text/html; charset=GB18030" 
  2.     pageEncoding="GB18030"%> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. < html> 
  5. < head> 
  6. < meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. < title>JNDI Test - Bind< /title> 
  8. < /head> 
  9. < body> 
  10. < a href="bind.do">bind an object< /a> 
  11. < /body> 
  12. < /html> 

2.1.3 bind_result.jsp

  1. < %...@ page language="java" contentType="text/html; charset=GB18030" 
  2.     pageEncoding="GB18030"%> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. < html> 
  5. < head> 
  6. < meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. < title>JNDI Test - Bind result< /title> 
  8. < /head> 
  9. < body> 
  10. < p>Binded successfully!< /p> 
  11. < /body> 
  12. < /html> 

2.1.4 lookup.jsp

  1. < %...@ page language="java" contentType="text/html; charset=GB18030" 
  2.     pageEncoding="GB18030"%> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. < html> 
  5. < head> 
  6. < meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. < title>JNDI Test - lookup< /title> 
  8. < /head> 
  9. < body> 
  10. < a href="lookup.do">lookup the binded object< /a> 
  11. < /body> 
  12. < /html> 

2.1.5 lookup_result.jsp

  1. < %...@ page language="java" contentType="text/html; charset=GB18030" 
  2.     pageEncoding="GB18030"%> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. < html> 
  5. < head> 
  6. < meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. < title>JNDI Test - Lookup result< /title> 
  8. < /head> 
  9. < body> 
  10. < %...  
  11.     Object o = request.getAttribute("found_jndi_obj");  
  12.     out.println(o);  
  13. %> 
  14. < /body> 
  15. < /html> 

2.2 Servlet
本例包括两个Servlet,功能说明如下:

BindServlet:用于在JNDI服务中绑定一个对象
LookupServlet:用于在JNDI服务中取出一个对象

2.2.1 BindServlet.java

  1. package lld.test.jndi;  
  2.  
  3. import java.io.IOException;  
  4. import java.util.Date;  
  5.  
  6. import javax.naming.Context;  
  7. import javax.naming.InitialContext;  
  8. import javax.servlet.RequestDispatcher;  
  9. import javax.servlet.ServletContext;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.*;  
  12.  
  13. public class BindServlet extends HttpServlet  
  14. ...{  
  15.  
  16.     private static final long serialVersionUID = 5219969790998794367L;  
  17.  
  18.     @Override 
  19.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  20.             throws ServletException, IOException  
  21.     ...{  
  22.         this.doPost(req, resp);  
  23.     }  
  24.  
  25.     @Override 
  26.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  27.             throws ServletException, IOException  
  28.     ...{  
  29.         try 
  30.         ...{  
  31.             Context jndi_ctx = new InitialContext();  
  32.             String key = "jndi_object";  
  33.             jndi_ctx.rebind(key, new Date());  
  34.         }catch(Exception ex)  
  35.         ...{  
  36.             ex.printStackTrace();  
  37.         }  
  38.           
  39.         ServletContext context = this.getServletContext();  
  40.         RequestDispatcher dispatcher = context.getRequestDispatcher("/bind_result.jsp");  
  41.         dispatcher.forward(req, resp);  
  42.     }  
  43.       
  44. }  

使用rebind而不是bind绑定对象是因为,使用bind时,如果已经有对象绑定到该键值上,则会抛出异常。

因为只是示例代码,所以我只是绑定了一个最简单的日期对象。

2.2.2 LookupServlet.java

  1. package lld.test.jndi;  
  2.  
  3. import java.io.IOException;  
  4.  
  5. import javax.naming.Context;  
  6. import javax.naming.InitialContext;  
  7. import javax.servlet.RequestDispatcher;  
  8. import javax.servlet.ServletContext;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.  
  14. public class LookupServlet extends HttpServlet  
  15. ...{  
  16.     private static final long serialVersionUID = 6677219828267184673L;  
  17.  
  18.     @Override 
  19.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  20.             throws ServletException, IOException  
  21.     ...{  
  22.         this.doPost(req, resp);  
  23.     }  
  24.  
  25.     @Override 
  26.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  27.             throws ServletException, IOException  
  28.     ...{  
  29.         try 
  30.         ...{  
  31.             Context jndi_ctx = new InitialContext();  
  32.             String key = "jndi_object";  
  33.             Object o = jndi_ctx.lookup(key);  
  34.             req.setAttribute("found_jndi_obj", o);  
  35.         }catch(Exception ex)  
  36.         ...{  
  37.             ex.printStackTrace();  
  38.         }  
  39.           
  40.         ServletContext context = this.getServletContext();  
  41.         RequestDispatcher dispatcher = context.getRequestDispatcher("/lookup_result.jsp");  
  42.         dispatcher.forward(req, resp);  
  43.     }  
  44.       
  45. }  

2.3 web.xml

在web.xml中,加入了servlet映射

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  3.     < display-name>jndi_test< /display-name> 
  4.       
  5.     < servlet> 
  6.         < servlet-name>BindServlet< /servlet-name> 
  7.         < servlet-class>lld.test.jndi.BindServlet< /servlet-class> 
  8.     < /servlet> 
  9.     < servlet-mapping> 
  10.         < servlet-name>BindServlet< /servlet-name> 
  11.         < url-pattern>/bind.do< /url-pattern> 
  12.     < /servlet-mapping> 
  13.       
  14.     < servlet> 
  15.         < servlet-name>LookupServlet< /servlet-name> 
  16.         < servlet-class>lld.test.jndi.LookupServlet< /servlet-class> 
  17.     < /servlet> 
  18.       
  19.     < servlet-mapping> 
  20.         < servlet-name>LookupServlet< /servlet-name> 
  21.         < url-pattern>/lookup.do< /url-pattern> 
  22.     < /servlet-mapping> 
  23.       
  24.     < welcome-file-list> 
  25.         < welcome-file>index.jsp< /welcome-file> 
  26.     < /welcome-file-list> 
  27. < /web-app> 

OK,所有的代码都在这里了,部署到Tomcat下运行即可。这样就可以在J2EE下使用JNDI了。

分享到:
评论

相关推荐

    j2ee应用服务器和web服务器解析.docx

    j2ee应用服务器和web服务器解析 j2ee应用服务器和web服务器解析 Tomcat服务器是一个免费的开放源代码的Web应用服务器。因为Tomcat技术先进、性能稳定且免费,所以深受Java爱好者的喜爱并得到了部分软件开发商的认可...

    J2EE应用开发详解

    内容为J2EE应用开发详解中的源代码 第1章 Java Web应用开发简介 1 1.1 Java EE应用概述 1 1.2 Java EE概念 1 1.2.1 Java EE多层模型 1 1.2.2 Java EE体系结构 2 1.3 Java EE的核心API与组件 4 1.4 Web服务器和应用...

    如何让J2EE程序脱离容器

    J2EE的一个主要设计原理是J2EE应用程序可以松散地耦合用组件组装,在组装或者部署应用程序时而不是在组件开发时定义或者改变这些组件的相互连接。J2EE组件使用JNDI相互查找和查找所需要的资源,如JDBC和JMS连接。JMS...

    J2EE使用指南

    二.J2EE应用程序客户端 114 三.消息驱动Bean类 115 四.运行本例子 116 五.用deploytool部署消息驱动Bean 117 六.用deploytool配置JMS客户端 118 第8章 EJB查询语言 120 一.术语 120 二.简单语法 121 三.查询...

    web服务器和应用服务器.docx

    WEB服务器和使用服务器的区别: web服务器和应用服务器全文共6页,当前为第1页。 web服务器和应用服务器全文共6页,当前为第1页。 1.WEB服务器: 理解WEB服务器,首先你要理解什么是WEB?WEB你可以简单理解为你所看到的...

    J2EE指南(官方).pdf

    二.J2EE应用程序客户端 三.消息驱动Bean类 四.运行本例子 五.用deploytool部署消息驱动Bean 六.用deploytool配置JMS客户端 第8章 EJB查询语言 一.术语 二.简单语法 三.查询例子 四.全部语法 五.EJB QL的...

    J2EE中文版指南 CHM格式 带全文检索

    J2EE应用程序客户端开发者 19 应用程序组装者 19 应用程序部署者和系统管理员 19 五.本书所用的软件 20 数据库访问 20 J2EE API 20 简化系统集成 20 工具 20 第2章 动手做一个EJB 22 一.准备工作 23 二.创建J2EE...

    J2EE的13种核心技术简介.doc

    在本文中将解释支撑J2EE的13种核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL, JTS,JTA,JavaMail和JAF,同时还将描述在何时、何处需要使用这些技术。当然,我还要介绍这些不同的技术之间是如何交互...

    揭开J2EE集群的面纱 pdf

    5.4.初始化对JNDI服务器的访问 6.EJB集群实现 6.1.SMART STUB 6.2.IIOP运行库 6.3.拦截代理 6.4.EJB的集群支持 6.4.1.EJBHome Stub的集群支持 6.4.2.EJBObject Stub的集群支持 7.对于JMS和数据库连接的集群支持 8...

    在jboss上部署web应用

    JBoss是纯Java的Web应用服务器,为了保证JBoss服务器的正常运行,在安装JBoss之前首先要确保系统 已经安装了JDK。可以从http://labs.jboss.com/jbossas/downloads/ 下载最新JBoss应用服务器,本章选用JBoss 4.2.2.GA...

    J2EE_的_13_种核心技术.doc

     在本文中我将解释支撑J2EE的13种核心技术:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF,同时还将描述在何时、何处需要使用这些技术。当然,我还要介绍这些不同的...

    J2EE指南.doc

    创建J2EE应用程序 19 三.创建企业Bean 19 四.创建J2EE应用程序客户端 22 五.创建Web客户端 25 六.设置企业Bean的JNDI名 27 七.部署J2EE应用程序 28 八.运行J2EE应用程序客户端 29...

    weblogic 服务器管理(中文版)

    第18章,“管理JNDI”讨论了如何使用WebLogic JNDI名字树,包括查看和编辑JNDI命名树上的对象以及如何把对象绑定到JNDI树。 第19章,“管理WebLogic J2EE连接器架构”描述了提供对其它企业信息系统连接的WebLogic ...

    Weblogic使用手册大全详解 中文版

    1.WEBLOGIC服务器管理概述 2.节点管理器 3.配置WEBLOGIC服务器与集群 ...18.管理WEBLOGIC J2EE连接器架构 19.管理WEBLOGIC服务器许可证 使用WEBLOGIC JAVA工具 WEBLOGIC服务器的命令行接口参考 WEB服务器插件的参数

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

    J2EE实验指导书*******

    2、下载、安装Tomcat web服务器 9 3、下载、安装MyEclipse 9 6、启动MyEclipse 9 7、配置MyEclipse 10 ①配置JRE 10 ②配置集成Tomcat 11 四、实验报告 12 实验二 JDBC初步 13 一、实验目的 13 二、实验环境 13 三、...

    BEA WebLogic Server管理指南

    本书由BEA核心开发人员撰写,深入揭示当今热门的应用服务器WebLogic Server的管理与配置技术,并讲述了大量最佳实践。内容包括: 在Windows、Linux和AIX上成功安装和配置WebLogic Application Server在一个或多个...

    JBoss3.0下配置和部署EJB简介

    1.JBoss简介JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web操作系统(operatingsystemforweb),它...

Global site tag (gtag.js) - Google Analytics