在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>
-
< a href="bind.jsp" target="_blank">http://www.51itcn.com/bind.jsp< /a>
-
< br />
-
< a href="lookup.jsp" target="_blank">http://www.51itcn.com/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>
-
< a 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>
-
< a 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下运行即可。这样就可以在J2EE下使用JNDI了。
分享到:
相关推荐
**J2EE应用服务器与Web服务器解析** J2EE(Java 2 Platform, Enterprise Edition)应用服务器和Web服务器是两种不同层次的服务器,它们在JavaWeb应用程序的部署和执行中扮演着不同的角色。 **一、Tomcat与应用...
7. **Web容器与应用服务器**:Web容器(如Tomcat)负责管理Servlet和JSP,而应用服务器(如JBoss、WebLogic)则提供更完整的环境,包括EJB容器和其他服务。 8. **安全性**:J2EE提供了一套安全模型,包括角色基的...
通过以上步骤,你就可以在J2EE应用中使用JNDI来管理和使用Oracle数据源了。这不仅可以优化数据库连接管理,还能提高应用的并发处理能力。理解并熟练掌握JNDI和数据连接池的配置,是成为一名专业的IT从业者必备的技能...
- **服务器**:常见的J2EE应用服务器包括Apache Tomcat、IBM WebSphere、Oracle WebLogic等。 - **数据库**:MySQL、Oracle、SQL Server等都可以作为J2EE应用的数据存储后端。 #### 五、J2EE示例代码分析 - **示例...
13. **性能优化**: 调整JVM参数、使用缓存技术(如EHCache)、负载均衡和集群配置等都是提升J2EE应用性能的关键策略。 14. **持续集成与持续部署(CI/CD)**: 使用Git进行版本控制,通过Jenkins、Docker等工具实现...
JBoss作为一款开放源代码的Java应用服务器,在J2EE应用开发领域占据着重要地位。它不仅以高性能的EJB容器著称,还因其便捷的部署方式和对最新技术的支持而受到开发者们的青睐。本文将结合实践经验,详细阐述如何在...
在WebLogic Server这样的应用服务器中,JNDI被广泛使用来管理应用程序的资源。 首先,我们来看看JNDI的基础概念。JNDI 不是实际存储资源的地方,而是提供一个接口,使得开发者可以通过统一的方式访问不同类型的命名...
标题"构建j2ee应用程序PDF"表明这是一个关于如何使用J2EE技术栈来构建企业级应用的指南。这份PDF可能包含了从项目初始化、设计模式、开发流程到部署和测试的全面教程。以下是一些基于J2EE开发的关键知识点: 1. **...
BEA WebLogic作为一款流行的J2EE应用服务器,JBuilder 2006同样支持在其上进行应用开发和部署,包括服务包的配置、库的建立、服务器的选择等操作,为开发者提供了全方位的支持。 总之,JBuilder 2006是一款集成了...
WebSphere是业界广泛使用的应用服务器,以其稳定性和扩展性闻名,为许多大型企业提供服务。 首先,我们需要理解J2EE应用程序的结构。J2EE是一种标准的多层架构,包含了一系列接口和组件,如Servlet、JSP(Java...
《J2EE应用开发详解(罗玉玲版)》是一本深入探讨J2EE平台下应用程序开发的专业书籍,其中的光盘内容包含了源代码,为读者提供了实践学习的宝贵资源。J2EE(Java 2 Platform, Enterprise Edition)是Java语言在企业...
6. 部署和容器:J2EE应用程序需要在应用服务器容器中运行,如Tomcat、WildFly、WebLogic等。容器负责管理应用程序的生命周期,提供运行时环境,并实现J2EE规范。 在"构建J2EE应用程序.pdf"中,可能详细讲解了以下...
本文旨在深入探讨J2EE应用中常见的性能问题,以及如何有效地检测与解决这些问题。我们将从标题“J2EE常见应用性能问题”和描述“J2EE常见应用性能问题和J2EE常见应用性能问题具体定位”出发,结合给定的部分内容,...
JBoss作为一款高性能的开源J2EE应用服务器,在业界获得了广泛的认可。它不仅提供了强大的EJB容器功能,还具有诸多特色优势,例如免安装特性、基于JMX架构、支持热部署以及能够快速开发EJB应用等。这些特性使得JBoss...
【J2EE与中间件技术-J2EE应用】 Java 企业版(J2EE,现称为Java EE)是Oracle公司推出的用于开发企业级分布式应用程序的平台。它建立在中间件之上,提供了一套标准和规范,使开发者可以构建可扩展、高可用性和安全...
《J2EE应用框架设计与项目开发》是针对企业级Java应用开发的一门深度学习资料,旨在帮助开发者理解和掌握如何构建高效、可扩展且结构化的应用程序。J2EE(Java Platform, Enterprise Edition)是一个用于开发和部署...
2. **部署**:使用部署工具将应用部署到J2EE应用服务器上。 #### 运行J2EE应用 完成以上步骤后,即可在浏览器中访问应用,测试其功能和性能。 #### 编写简单的Entity Bean应用 与Session Bean类似,Entity Bean...
最后,开发J2EE应用时,往往需要使用IDE(集成开发环境),如Eclipse或NetBeans,它们提供了便捷的工具来创建、调试和部署J2EE项目。你将学习如何使用这些工具进行开发,以及如何使用Maven或Gradle等构建工具来管理...
10. **Application Server**:J2EE应用通常部署在应用服务器上,如Tomcat、GlassFish、JBoss等。这些服务器提供运行环境,管理J2EE组件的生命周期,处理网络通信和资源管理。 通过"使用J2EE编写企业应用教程",读者...