`
friend365
  • 浏览: 56394 次
  • 性别: 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(Java 2 Platform, Enterprise Edition)应用服务器和Web服务器是两种不同层次的服务器,它们在JavaWeb应用程序的部署和执行中扮演着不同的角色。 **一、Tomcat与应用...

    J2EE应用开发详解

    7. **Web容器与应用服务器**:Web容器(如Tomcat)负责管理Servlet和JSP,而应用服务器(如JBoss、WebLogic)则提供更完整的环境,包括EJB容器和其他服务。 8. **安全性**:J2EE提供了一套安全模型,包括角色基的...

    J2EE基础:JNDI定义Oracle数据源的方法

    通过以上步骤,你就可以在J2EE应用中使用JNDI来管理和使用Oracle数据源了。这不仅可以优化数据库连接管理,还能提高应用的并发处理能力。理解并熟练掌握JNDI和数据连接池的配置,是成为一名专业的IT从业者必备的技能...

    J2EE应用程序开发指南

    - **服务器**:常见的J2EE应用服务器包括Apache Tomcat、IBM WebSphere、Oracle WebLogic等。 - **数据库**:MySQL、Oracle、SQL Server等都可以作为J2EE应用的数据存储后端。 #### 五、J2EE示例代码分析 - **示例...

    构建J2ee应用程序

    13. **性能优化**: 调整JVM参数、使用缓存技术(如EHCache)、负载均衡和集群配置等都是提升J2EE应用性能的关键策略。 14. **持续集成与持续部署(CI/CD)**: 使用Git进行版本控制,通过Jenkins、Docker等工具实现...

    开发基于JBoss的J2EE应用

    JBoss作为一款开放源代码的Java应用服务器,在J2EE应用开发领域占据着重要地位。它不仅以高性能的EJB容器著称,还因其便捷的部署方式和对最新技术的支持而受到开发者们的青睐。本文将结合实践经验,详细阐述如何在...

    j2ee JNDI 存储 和 读取程序 weblogic

    在WebLogic Server这样的应用服务器中,JNDI被广泛使用来管理应用程序的资源。 首先,我们来看看JNDI的基础概念。JNDI 不是实际存储资源的地方,而是提供一个接口,使得开发者可以通过统一的方式访问不同类型的命名...

    构建j2ee应用程序PDF

    标题"构建j2ee应用程序PDF"表明这是一个关于如何使用J2EE技术栈来构建企业级应用的指南。这份PDF可能包含了从项目初始化、设计模式、开发流程到部署和测试的全面教程。以下是一些基于J2EE开发的关键知识点: 1. **...

    jbuilder2006 开发j2EE应用程序.pdf

    BEA WebLogic作为一款流行的J2EE应用服务器,JBuilder 2006同样支持在其上进行应用开发和部署,包括服务包的配置、库的建立、服务器的选择等操作,为开发者提供了全方位的支持。 总之,JBuilder 2006是一款集成了...

    将J2EE应用程序移植到WebSphere应用程序服务器

    WebSphere是业界广泛使用的应用服务器,以其稳定性和扩展性闻名,为许多大型企业提供服务。 首先,我们需要理解J2EE应用程序的结构。J2EE是一种标准的多层架构,包含了一系列接口和组件,如Servlet、JSP(Java...

    J2EE应用开发详解(罗玉玲版)光盘内容(源代码)

    《J2EE应用开发详解(罗玉玲版)》是一本深入探讨J2EE平台下应用程序开发的专业书籍,其中的光盘内容包含了源代码,为读者提供了实践学习的宝贵资源。J2EE(Java 2 Platform, Enterprise Edition)是Java语言在企业...

    构建J2EE应用程序

    6. 部署和容器:J2EE应用程序需要在应用服务器容器中运行,如Tomcat、WildFly、WebLogic等。容器负责管理应用程序的生命周期,提供运行时环境,并实现J2EE规范。 在"构建J2EE应用程序.pdf"中,可能详细讲解了以下...

    J2EE常见应用性能问题

    本文旨在深入探讨J2EE应用中常见的性能问题,以及如何有效地检测与解决这些问题。我们将从标题“J2EE常见应用性能问题”和描述“J2EE常见应用性能问题和J2EE常见应用性能问题具体定位”出发,结合给定的部分内容,...

    开发基于JBoss的J2EE应用.pdf

    JBoss作为一款高性能的开源J2EE应用服务器,在业界获得了广泛的认可。它不仅提供了强大的EJB容器功能,还具有诸多特色优势,例如免安装特性、基于JMX架构、支持热部署以及能够快速开发EJB应用等。这些特性使得JBoss...

    J2EE与中间件技术-J2EE应用.ppt

    【J2EE与中间件技术-J2EE应用】 Java 企业版(J2EE,现称为Java EE)是Oracle公司推出的用于开发企业级分布式应用程序的平台。它建立在中间件之上,提供了一套标准和规范,使开发者可以构建可扩展、高可用性和安全...

    《J2EE应用框架设计与项目开发》

    《J2EE应用框架设计与项目开发》是针对企业级Java应用开发的一门深度学习资料,旨在帮助开发者理解和掌握如何构建高效、可扩展且结构化的应用程序。J2EE(Java Platform, Enterprise Edition)是一个用于开发和部署...

    j2ee编写企业应用教程

    2. **部署**:使用部署工具将应用部署到J2EE应用服务器上。 #### 运行J2EE应用 完成以上步骤后,即可在浏览器中访问应用,测试其功能和性能。 #### 编写简单的Entity Bean应用 与Session Bean类似,Entity Bean...

    j2ee实例 j2ee实例j2ee实例

    最后,开发J2EE应用时,往往需要使用IDE(集成开发环境),如Eclipse或NetBeans,它们提供了便捷的工具来创建、调试和部署J2EE项目。你将学习如何使用这些工具进行开发,以及如何使用Maven或Gradle等构建工具来管理...

    使用J2EE编写企业应用教程

    10. **Application Server**:J2EE应用通常部署在应用服务器上,如Tomcat、GlassFish、JBoss等。这些服务器提供运行环境,管理J2EE组件的生命周期,处理网络通信和资源管理。 通过"使用J2EE编写企业应用教程",读者...

Global site tag (gtag.js) - Google Analytics