当前位置: 首页 > news >正文

天津免费网站建站模板服务器建立网站

天津免费网站建站模板,服务器建立网站,久久建筑网是山东省的吗,兼职做网站JNDI全称(Java Naming and Directory Interface)#xff0c;是java命名和目录接口。它是一个应用程序设计的API#xff0c;为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口#xff0c;类似JDBC都是构建在抽象层上。 1、命名的概念与应用 JNDI中的命名(Nam… JNDI全称(Java Naming and Directory Interface)是java命名和目录接口。它是一个应用程序设计的API为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口类似JDBC都是构建在抽象层上。 1、命名的概念与应用 JNDI中的命名(Naming)就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中以后调用容器环境到JNDI容器环境Context的查找(lookup)方法又可以查找出某个名称所绑定的Java对象。 这样做的好处在于在真实的项目应用中通常是由系统程序或框架程序先将资源对象绑定到JNDI环境中以后在该系统或框架中运行的模块程序就可以从JNDI环境中查找这些资源对象了。比如Tomcat服务器在启动时可以创建一个连接到某种数据库系统的数据源(DataSource)对象并将该数据源(DataSource)对象绑定到JNDI环境中以后在这个Tomcat服务器中运行的Servlet和JSP程序就可以从JNDI环境中查询出这个数据源(DataSource)对象进行使用而不用关心数据源(DataSource)对象是如何创建出来的这种方式极大的增强了系统的可维护性这样当数据库系统的连接参数发生变更时就只是Tomcat系统管理员一个人要关心的事情而与所有的应用程序开发人员无关。 容器环境Context本身也是一个Java对象它可以通过一个名称绑定到另一个容器环境中。将一个Context对象绑定到另一个Context对象中这就形成了一种父子级联关系多个Context对象最终可以级联成一种树状结构树中的每个Context对象中都可以绑定若干个Java对象。 上图中的每个方框分别代表以后个Context对象它们分别绑定的名称分别为a、b、c、d、e其中b和c是a的子Contextd是b的子Contexte又是d的子Context。各个方框内的每个小椭圆分别代表一个Java对象它们也都有一个绑定的名称这些名称分别为dog、pig、sheet等在同一个Context不能绑定两个相同名称的Java对象在不同的Context中可以出现同名的绑定对象。可见Context树的级联结构与文件系统中的目录结构非常类似Context与其中绑定的Java对象的关系也非常类似于文件系统的目录与文件的关系。 想要得到一个Context对象就可以调用它的查询lookup方法来获得其中绑定的java对象。另外调用某个Context对象的lookup方法也可以获得Context树中的任意一个Context对象这只需要在lookup方法中指定相应的Context路径即可。 在JNDI中不存在着“根”Context的概念也就是说执行JNDI操作不是从一个“根”Context对象开始而是可以从Context树中的任意以后个Context开始。如论如何程序必须获得一个作为操作入口的Context对象后才能执行各种JNDI命名操作为此JNDI API中提供了一个InitialContext类来创建用作JNDI命名操作的入口Context对象。 Context是一个接口Context对象实际上是Context的某个实现类的实例对象选择这个具体的Context实现类并创建其实例对象的过程是由一个Context工厂类来完成的这个工厂类的类名可以通过JNDI的环境属性java.naming.factory.initial指定也可以根据Context的操作方法的url参数的Schema来选择。 2、目录的概念与应用 JNDI中的目录(Directory)与文件系统中的目录概念有很大的不同JNDI中的目录(Directory)是指将一个对象的所有属性信息保存到一个容器环境中。JNDI的目录(Directory)原理与JNDI的命令(Naming)原理非常相似主要的区别在于目录容器环境中保存的是对象的属性信息而不是对象本身所以目录提供的是对属性的各种操作。事实上JNDI的目录(Directory)与命名(Naming)往往是结合在一起使用的JNDI API中提供的代表目录容器环境的类为DirContext,DirContext是Context的子类显然它除了能完成目录相关操作外也能完成所有的命令(Naming)操作。DirContext是对Context的扩展它在Context的基础上增加了对目录属性的操作功能可以在其中绑定对象的属性信息和查找对象的属性信息。JNDI中的目录(Directory)的结构示意图如下 上图中的每个外层的方框分别代表一个DirContext对象它们绑定的名称分别为a、bb是a的子DirContext。图中的每个小椭圆分别代表一个java对象各个里层的方框分别代表一个对象属性。从名称为a的DirContext中的内容可以看到一个DirContext容器环境中即可以绑定对象自身也可以绑定对象的属性信息绑定的对象和绑定的属性是完全独立的两个事物即使它们的绑定名称相同它们的操作也是完全独立的。另外一个属性可以有多个属性值例如dog对象的category属性就设置了两个属性值meat和pet。 从名称为b的DirContext中的内容可以看到一个DirContext容器环境中也可以只绑定对象的属性信息而不绑定任何对象自身。与Context的操作原理类似JNDI API中提供了一个InitialDirContext类创建用作JNDI命名与目录属性操作的入口DirContext对象。 3、JNDI的用法创建一个数据源 没有JNDI时的做法 Connection conn null; try{Class.forName(com.mysql.jdbc.Driver,true,Thread.currentThread().getContextClassLoader());conn DriverManager.getConnection(jdbc:mysql://MyDBServer?userxxxpasswordxxx);.....conn.close(); }catch(Exception e){e.printStackTrace(); }finally{if(conn!null){try{conn.close();}catch(SQLException e){}} }这种做法只适用于小规模开发在大规模开发中就会存在许多问题比如 数据库服务器名称MyDBServer、用户名和口令都可能需要改变由此引发JDBC URL需要修改。数据库可能改用别的产品引发JDBC驱动程序包和类名需要修改。随着实际使用终端的增加原配置的连接池参数可能需要调整。 在开发过程中程序员应该不需要关心“具体的数据库后台是什么JDBC驱动程序是什么”等这些问题程序员编写的程序应该没有对JDBC驱动程序的引用没有服务器名称没有用户名称等而是把这些问题交给容器来配置和管理这样程序员只需要对这些配置和管理进行引用即可。 使用JNDI context.xml配置数据库连接信息 ?xml version1.0 encodingUTF-8?Context!-- Default set of monitored resources. If one of these changes, the --!-- web application will be reloaded. --WatchedResourceWEB-INF/web.xml/WatchedResourceWatchedResource${catalina.base}/conf/web.xml/WatchedResource!-- Uncomment this to disable session persistence across Tomcat restarts --!--Manager pathname /--Resource namejdbc/mysql authContainertypejavax.sql.DataSource driverClassNamecom.mysql.jdbc.Driverurljdbc:mysql://127.0.0.1:3306/taskusernameroot password123456 maxTotal20 maxIdle10maxWaitMillis-1/ /Contextweb.xml中引入数据源 ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0welcome-file-listwelcome-fileindex.html/welcome-file/welcome-file-listresource-refres-ref-namejdbc/mysql/res-ref-nameres-typejavax.sql.DataSource/res-typeres-authContainer/res-auth/resource-ref /web-app获取Connection对象查询数据库 import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;WebServlet(/test) public class Servlet1 extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {try {Context initContext new InitialContext();Context envContext (Context) initContext.lookup(java:/comp/env);DataSource ds (DataSource) envContext.lookup(jdbc/mysql);Connection conn ds.getConnection();PreparedStatement ps conn.prepareStatement(select * from t_role);ResultSet rs ps.executeQuery();System.out.println(rs.next());rs.close();conn.close();} catch (Exception e) {e.printStackTrace();}} }可能很多人对于JNDI这个名词感到十分陌生实际上JNDI是一种广泛存在于各种J2EE容器的技术而且也是J2EE的技术规范之一。但由于我们日常工作中其实很少会直接在代码层面使用到JNDI规范当然了JNDI配置肯定是少不了的所以可能有时候会觉得有些陌生。本篇文章将对JNDI的概念及其作用进行介绍同时通过一个小案例来介绍我们如何在真实开发中使用JNDI规范希望对各位读者有所帮助。 一、什么是JNDI JNDI的全称是Java Naming and Directory Interface即Java命名和目录接口作用是为JAVA应用程序提供命名和目录访问服务的API。 咋一看这个解释似乎让人看不懂这个JNDI规范的作用。我个人感觉将JNDI规范看成是一个让配置参数和代码解耦的一种规范和思想会更好理解一些。比如说常见的在DAO层通过原始的JDBC来连接数据库我们可以选择在代码中直接写入数据库的连接参数但一旦数据源发生变更我们就势必要改动代码后重新编译才能连接新的数据源。而如果我们将数据库连接参数改成外部配置的方式那么也就实现了配置和代码之间的解耦。JNDI规范本质上就是上述的这种操作。 看完上面的介绍相信大家对JNDI的作用已经有了一个初步的认知。但是对于其具体的应用场景和工作流程还不是特别清楚。下面我们先来对JNDI的两个单词的概念进行解释Name和Directory 二、概念解析 Name Name很好理解就是命名。将Java对象以某个名称的形式绑定binding到一个容器环境Context中以后调用容器环境Context的查找lookup方法又可以查找出某个名称所绑定的Java对象。简单来说就是把一个Java对象和一个特定的名称关联在一起方便容器后续使用。 Directory **JNDI中的目录Directory是指将一个对象的所有属性信息保存到一个容器环境中。**JNDI的目录Directory原理与JNDI的命名Naming原理非常相似主要的区别在于目录容器环境中保存的是对象的属性信息而不是对象本身。举个例子Name的作用是在容器环境中绑定一个Person对象而Directory的作用是在容器环境中保存这个Person对象的属性比如说age10name小明等等。实际上二者往往是结合在一起使用的 三、JDNI的实际应用 下面我们来通过一个小案例来演示一下JNDI在实际项目中的应用 正如JNDI的名称一样JNDI只是JDK定义的一个接口具体的实现其实是由各个容器的厂商或者称之为开发团队去实现的。这里的话我们选择用Tomcat作为我们演示的容器环境下面来看一下具体的使用吧。 1. 新建一个Web项目在META-INF目录下新建context.xml文件 ?xml version1.0 encodingUTF-8? ContextResource namejndi/personauthContainertypejavax.sql.DataSourceusernamerootpasswordrootdriverClassNamecom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/testmaxTotal8maxIdle4/ /Context在Context.xml文件中我们可以定义数据库驱动url、账号密码等关键信息其中name这个字段的内容为自定义后面的时候我们会使用到 2. 在具体的程序中使用配置的数据源 这里需要注意使用InitialContext对象获取数据源的时候java:comp/env/后面需要跟上步骤一中配置的数据源名称。 Connection connnull; PreparedStatement ps null; ResultSet rs null; try { Context ctxnew InitialContext(); Object datasourceRefctx.lookup(java:comp/env/jndi/person); //引用数据源 DataSource ds(Datasource)datasourceRef; connds.getConnection(); String sql select * from person where id ?;ps conn.prepareStatement(sql);ps.setString(1, 1);rs ps.executeQuery();while(rs.next()){System.out.println(person name is rs.getString(name));}c.close(); } catch(Exception e) { e.printStackTrace(); } finally { if(conn!null) { try { conn.close(); } catch(SQLException e) { } } }3. 将mysql驱动放到tomcat的lib目录中重要 需要注意由于我们的数据源不再直接由自己提供而是转为由Tomcat容器提供所以我们要给tomcat提供连接池的驱动否则会报错。 4. 启动tomcat进行测试 PS这里关于Tomcat集成JNDI的用法其实在启动tomcat后访问http://localhost:8080/docs/jndi-resources-howto.html可以看到更加详细的使用介绍 说在最后 至此本篇文章对于JDNI的介绍就到此结束了。简单来说JNDI就是J2EE提出的一种能够降低耦合性的一种技术规范并定义了接口。JNDI接口由各个容器开发团队去实现有了JDNI之后我们可以将一些与业务无关的配置转移到外部更好的方便项目的维护。从另一个角度理解的话可以把JNDI看成是间接寻址在编写代码的时候定义了某个对象的名称等到实际使用的时候根据这个对象名称再去读取配置 参考文章 1、JNDI的原理和应用
http://www.pierceye.com/news/393038/

相关文章:

  • 如何上传自己做的网站wordpress the content
  • 公司网站介绍范文dede手机网站标签
  • 彩票网站什么做公司内部网络怎么建立
  • 江苏网站备案要多久wordpress素材模板怎么用
  • 淄博网站建设有实力wordpress 异常
  • 卖汽车的网站怎么做百度图片点击变网站是怎么做的
  • 可以做英文教师的网站桂阳网站建设
  • 常州网站建设外包WordPress cos媒体库
  • 教着做美食的网站wordpress 无法安装主题
  • 只选设计师的网站牛商网是干什么的
  • 网站设计中新闻版块怎么做乐清新闻联播
  • 网站开发维护员挣钱吗全球电子商务公司排行
  • 祥云县住房和城乡建设网站百度热议排名软件
  • 网站开发攻克时间网站模版制作教程
  • 遵义一般做一个网站需要多少钱菲斯曼售后服务中心
  • 教务系统网站建设模板下载东莞企业高端网站建设
  • 淮南建设公司网站网站建设对教育解决方案
  • 泰兴建设局网站wordpress资料图片不显示
  • 外贸推广免费网站图片 网站源码
  • 博客推广那个网站列好邢台网红桥
  • 艺之都网站建设微信app开发腾讯视频分享到wordpress
  • 洛阳最好的做网站的公司哪家好建网站需要哪些文件夹
  • 舟山企业网站建设导出wordpress用户
  • 肇庆新农村建设内容在哪个网站有关天猫网站开发的论文
  • 网站建设代码生成器php网站开发专员招聘
  • 视频教学网站cms陕西网站备案查询
  • 湖州网站设计浙北数据wordpress自定义搜索页面
  • 昆明公司网站开发流线型的网站建设
  • 南京建设网站企业泊头市建设网站
  • 前端跟后端哪个就业难北京网站建设seo优化