`
huangyuanmu
  • 浏览: 290051 次
  • 性别: Icon_minigender_1
  • 来自: 龙城
社区版块
存档分类
最新评论

JNDI笔记(二)

阅读更多

原帖地址:http://blog.csdn.net/qhmao/archive/2008/10/19/3097753.aspx

 

在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

<% ... @ page language = " java "  contentType = " text/html; charset=GB18030 "
    pageEncoding
= " GB18030 "
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=GB18030" >
< title > JNDI Test </ title >
</ head >
< body >
< href ="bind.jsp"  target ="_blank" > bind.jsp </ a >
< br  />
< href ="lookup.jsp"  target ="_blank" > lookup.jsp </ a >
</ body >
</ html >


2.1.2 bind.jsp

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

 

2.1.3 bind_result.jsp

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

 

2.1.4 lookup.jsp

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

 

2.1.5 lookup_result.jsp

<% ... @ page language = " java "  contentType = " text/html; charset=GB18030 "
    pageEncoding
= " GB18030 "
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=GB18030" >
< title > JNDI Test - Lookup result </ title >
</ head >
< body >
<% ...
    
Object  o  =  request.getAttribute( " found_jndi_obj " );
    out.println(o);
%>
</ body >
</ html >

 

2.2 Servlet

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

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

2.2.1 BindServlet.java

package  lld.test.jndi;

import  java.io.IOException;
import  java.util.Date;

import  javax.naming.Context;
import  javax.naming.InitialContext;
import  javax.servlet.RequestDispatcher;
import  javax.servlet.ServletContext;
import  javax.servlet.ServletException;
import  javax.servlet.http. * ;

public   class  BindServlet  extends  HttpServlet
... {

    
private   static   final   long  serialVersionUID  =   5219969790998794367L ;

    @Override
    
protected   void  doGet(HttpServletRequest req, HttpServletResponse resp)
            
throws  ServletException, IOException
    
... {
        
this .doPost(req, resp);
    }


    @Override
    
protected   void  doPost(HttpServletRequest req, HttpServletResponse resp)
            
throws  ServletException, IOException
    
... {
        
try
        
... {
            Context jndi_ctx 
=   new  InitialContext();
            String key 
=   " jndi_object " ;
            jndi_ctx.rebind(key, 
new  Date());
        }
catch (Exception ex)
        
... {
            ex.printStackTrace();
        }

        
        ServletContext context 
=   this .getServletContext();
        RequestDispatcher dispatcher 
=  context.getRequestDispatcher( " /bind_result.jsp " );
        dispatcher.forward(req, resp);
    }

    
}

 

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

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

2.2.2 LookupServlet.java

package  lld.test.jndi;

import  java.io.IOException;

import  javax.naming.Context;
import  javax.naming.InitialContext;
import  javax.servlet.RequestDispatcher;
import  javax.servlet.ServletContext;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

public   class  LookupServlet  extends  HttpServlet
... {
    
private   static   final   long  serialVersionUID  =   6677219828267184673L ;

    @Override
    
protected   void  doGet(HttpServletRequest req, HttpServletResponse resp)
            
throws  ServletException, IOException
    
... {
        
this .doPost(req, resp);
    }


    @Override
    
protected   void  doPost(HttpServletRequest req, HttpServletResponse resp)
            
throws  ServletException, IOException
    
... {
        
try
        
... {
            Context jndi_ctx 
=   new  InitialContext();
            String key 
=   " jndi_object " ;
            Object o 
=  jndi_ctx.lookup(key);
            req.setAttribute(
" found_jndi_obj " , o);
        }
catch (Exception ex)
        
... {
            ex.printStackTrace();
        }

        
        ServletContext context 
=   this .getServletContext();
        RequestDispatcher dispatcher 
=  context.getRequestDispatcher( " /lookup_result.jsp " );
        dispatcher.forward(req, resp);
    }

    
}

 

2.3 web.xml

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

<? xml version="1.0" encoding="UTF-8" ?>
< 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" >
    
< display-name > jndi_test </ display-name >
    
    
< servlet >
        
< servlet-name > BindServlet </ servlet-name >
        
< servlet-class > lld.test.jndi.BindServlet </ servlet-class >
    
</ servlet >
    
< servlet-mapping >
        
< servlet-name > BindServlet </ servlet-name >
        
< url-pattern > /bind.do </ url-pattern >
    
</ servlet-mapping >
    
    
< servlet >
        
< servlet-name > LookupServlet </ servlet-name >
        
< servlet-class > lld.test.jndi.LookupServlet </ servlet-class >
    
</ servlet >
    
    
< servlet-mapping >
        
< servlet-name > LookupServlet </ servlet-name >
        
< url-pattern > /lookup.do </ url-pattern >
    
</ servlet-mapping >
    
    
< welcome-file-list >
        
< welcome-file > index.jsp </ welcome-file >
    
</ welcome-file-list >
</ web-app >


OK,所有的代码都在这里了,部署到Tomcat下运行即可。

分享到:
评论

相关推荐

    初学jndi笔记

    #### 二、JNDI的重要性 对于J2EE开发者来说,理解和掌握JNDI是非常重要的。在大型企业级应用中,服务和资源通常分布在不同的服务器和位置。JNDI通过提供一种统一的接口来管理和查找这些资源,极大地简化了分布式...

    DBCP 数据库连接池JNDI连接 学习笔记

    这篇“DBCP 数据库连接池JNDI连接 学习笔记”主要探讨了如何结合JNDI(Java Naming and Directory Interface)来使用DBCP进行数据库连接管理。JNDI提供了一种标准的方式来查找和绑定资源,如数据源,在企业级应用中...

    servlet学习笔记_JNDI.doc

    ### JNDI (Java Naming and Directory Interface)学习笔记 #### 一、JNDI简介 JNDI(Java Naming and Directory Interface),即Java命名和目录接口,是在分布式计算环境中使用的一种标准化接口,它允许Java应用...

    Tomcat学习笔记 - 【使用JNDI数据源】

    【标题】"Tomcat学习笔记 - 使用JNDI数据源" 在Java应用服务器如Tomcat中,使用JNDI(Java Naming and Directory Interface)数据源是一种标准的方式,它允许我们集中管理和配置数据库连接,提高应用的可移植性和可...

    李兴华--J2EE核心框架 笔记

    笔记可能涉及JNDI的基本操作和在J2EE应用中的应用场景。 6. **JTA(Java Transaction API)**:JTA为分布式事务处理提供了标准接口,确保在多组件环境中的数据一致性。笔记可能会讲解事务的ACID属性和JTA的使用方法...

    JAVA WEB学习笔记

    【JAVA WEB学习笔记】——Tomcat中数据源的配置与使用 在Java Web开发中,数据源(DataSource)是管理数据库连接的关键组件。它提供了一种高效、灵活的方式来获取和管理数据库连接,尤其是在大型企业级应用中。...

    javaweb笔记+狂神+知识总结

    7. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一种标准的方式来查找和访问各种命名和目录服务,常用于在JavaWeb应用中查找数据库连接池、邮件服务器配置等资源。 8. **DAO(Data Access Object...

    JAVAWEB开发实战经典(课堂笔记)

    5. **Java EE相关技术**:包括JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)和JMS(Java Message Service)等,这些在企业级Java应用中广泛使用,笔记可能涉及这些技术的基本概念和...

    基于j2ee开发的web笔记

    这个压缩包很可能包含了多个文件,如HTML、PDF或Markdown格式的笔记文档,它们可能分别对应J2EE的不同组件和技术,如Servlet、JSP、EJB、JNDI、JTA、JMS、JPA等。这些文件可能按照课程章节或主题进行组织,以便读者...

    java web 笔记整理

    这份"java web 笔记整理"涵盖了该领域的关键概念和技术,包括Servlet、JSP、MVC模式、JNDI、JTA以及EJB等核心内容。以下是根据笔记内容整理出的知识点详解: 1. **Servlet**:Servlet是Java平台上的服务器端组件,...

    Javaee课堂笔记精华总结就业必备

    8. **JNDI(Java Naming and Directory Interface)**:JNDI为Java应用提供了一种查找和管理资源的接口,如EJB、数据源等。 9. **JAX-RS(Java API for RESTful Web Services)**:JAX-RS是JavaEE中的RESTful服务...

    达内java笔记,精挑细选(达内助教整理)

    6. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个统一的接口来查找和管理网络资源,如EJB、数据库连接等。 在"达内笔记(达内助教整理的)"中,你可能会发现以下内容: - **基础篇**:Java...

    魔乐科技 J2EE详细笔记 很经典的

    3. JNDI(Java Naming and Directory Interface):服务发现和绑定,用于查找和访问各种资源。 通过学习《魔乐科技 J2EE详细笔记》,开发者可以深入了解J2EE的各个层面,掌握企业级应用开发的必备技能。这份笔记...

    MLDN李兴华视频教程学习笔记j2ee web.rar

    学习笔记会讲解如何通过JNDI查找和管理这些服务。 5. **JTA(Java Transaction API)和JPA(Java Persistence API)**:JTA提供了一种统一的事务管理机制,确保多操作的原子性。JPA则简化了对象关系映射(ORM),...

    javaee思维导图版笔记-吉林大学

    本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。Servlet的生命周期包括初始化、提供服务和...

    jsp自制详细笔记

    Java Web开发是基于Java技术栈进行Web应用程序开发的一系列技术和框架的集合,除了JSP和Servlet,还可能涉及到Java EE规范、MVC模式、DAO设计模式、JNDI、JTA等概念。 【压缩包子文件的文件名称列表】暗示了学习...

    软件工程师学习笔记J2EE

    此外,笔记可能还会涉及到其他J2EE相关技术,如JNDI(Java Naming and Directory Interface)、JPA(Java Persistence API)、JSF(JavaServer Faces)、CDI(Contexts and Dependency Injection)等,以及如何使用...

    Servlet学习笔记3

    ### Servlet学习笔记3:深入理解Servlet...综上所述,本学习笔记涵盖了Servlet技术的核心概念、Tomcat服务器配置、JNDI和数据源管理以及Java EE架构的概览,是Java Web开发者深入理解和掌握Servlet技术的重要参考资料。

Global site tag (gtag.js) - Google Analytics