学习JNDI
既然datasource对象有tomcat提供,那么我们如何在应用程序中获得它呢,tomcat把这个对象放在JNDI服务中,
并用一个名字把它关联起来,我们在应用程序中,只需通过JNDI搜索这个名字,就能得到这个datasource对象。
JNDI是一个目录服务,就像我们书本前面的目录一样,大家可以翻到书中的目录,比如说“第二章servlet基础。。。25页”,
这就建立了一个名称和对象的关联,我们可以根据“第二章servlet基础。。。25页”这个名字,在25页找到真正的第二章内容。
同样,JNDI也是一样,我们将datasource放到JNDI目录服务中,然后给他起一个名字比如“jdbc/s1”,那么我们在应用程序中,
就可以通过javax.namming.Context接口的lookup()方法,索引“jdbc/s1”这个名字来得到datasource对象
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性
一、记住三点:
1.在Tomcat\conf\context.xml 配置
<Resource name="jdbc/hadoop"
auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="root" password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.8.134:3306/hadoop"/>
2.在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>mysql hadoop DataSource</description >
<res-ref-name>jdbc/hadoop</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
3.在javabean进行取得连接 ,已经操作:
package datasource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class TitlesBean {
Connection conn=null;
ArrayList<String> mylist=new ArrayList<String>();
public ArrayList<String> getMylist() {
return mylist;
}
public ArrayList<String> getAccount() {
try {
//通过Context、DataSource获取Connection对象
Context ic = new InitialContext();
//这里的lookup是在tomcat的context中配置的名字
DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/hadoop");
conn = source.getConnection();
/*java:comp/env/jdbc/news"
* 分为两部分java:comp/env
*为JavaEE默认路径
*jdbc/news为DataSource名
*/
String sql="select * from trade_detail";
Statement st = conn.createStatement() ;
ResultSet results = st.executeQuery(sql);
while(results.next())
{
mylist.add(results.getString("account"));
}
} catch (Exception exception) {
exception.printStackTrace();
}
finally{
}
return mylist;
}
}
4.这样既就可以进行web页面进行操作
例如:
showJNDI_hadoopData.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="datasource.TitlesBean" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
TitlesBean c = new TitlesBean();
ArrayList<String> mylist = c.getAccount();
for (Iterator<String> iterator = mylist.iterator(); iterator
.hasNext();) {
String str = (String) iterator.next();
System.out.println("account :"+str);
%>
<p><%=str%></p>
<% } %>
</body>
</html>
图:
学习JNDI的更多相关文章
- Java前辈:学习J2EE流程中的经验和教训
Java前辈:学习J2EE流程中的经验和教训 在这里我谈谈我在学习j2ee流程,并谈到在此过程中领会的经验和教训.以便后来者少走弯路. Java发展到现在,按应用来分主要分为三大块:J2SE,J2 ...
- Java安全之JNDI注入
Java安全之JNDI注入 文章首发:Java安全之JNDI注入 0x00 前言 续上篇文内容,接着来学习JNDI注入相关知识.JNDI注入是Fastjson反序列化漏洞中的攻击手法之一. 0x01 ...
- J2EE、J2SE、J2ME是什么意思?
本文介绍Java的三大块:J2EE.J2SE和J2ME.J2SE就是Java2的标准版,主要用于桌面应用软件的编程:J2ME主要应用于嵌入是系统开发,如手机和PDA的编程:J2EE是Java2的企业版 ...
- J2EE、J2SE、J2ME
http://developer.51cto.com/art/200906/130453.htm 本文介绍Java的三大块:J2EE.J2SE和J2ME.J2SE就是Java2的标准版,主要用于桌面应 ...
- java开发都需要学什么
1.java基础 2.JSP+Servlet+JavaBean 环节主要 懂流程 MVC而已 别往深了研究 现 开发基本 用 模式 3.Struts+Hibernate+Spring 才 开发 主流技 ...
- 转载 j2ee j2se j2me 区别,mvc 和ssh联系理解
[转]J2SE J2EE J2ME的区别 以及 MVC与SSH对应关系 2014-3-6阅读322 评论0 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在J ...
- 从0开始fastjson漏洞分析2
从0开始fastjson漏洞分析https://www.cnblogs.com/piaomiaohongchen/p/14777856.html 有了前文铺垫,可以说对fastjson内部机制和fas ...
- Java学习笔记之JNDI(六)
JNDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的 ...
- J2EE学习从菜鸟变大鸟之四 JNDI(Java Naming and Directory Interface)
掌握 J2EE 是件不是很轻松的事哈,但是很有意思,抽象抽象哈哈,因为它包含的技术和缩略语在不断地增长.Java 命名和目录接口(Java Naming and Directory Interface ...
随机推荐
- jQuery对话框插件 ThickBox
http://baike.haosou.com/doc/7607201-7881296.html 项目已经停止维护,但该插件还是不错的! ThickBox是一个基于JQuery类库的扩展,它能在浏览器 ...
- 转一篇简易易懂的android回调的实现--->(转的)
回调机制在 Android 监听用户界面操作中的体现 本文讨论以下两个内容: 1. 回调函数 2. 回调机制在 Android框架 监听用户界面操作中的作用 一 回调函数 回调函数就是一个通过函数 ...
- HDU 1392 Surround the Trees(凸包*计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1392 这里介绍一种求凸包的算法:Graham.(相对于其它人的解释可能会有一些出入,但大体都属于这个算 ...
- 《Zend studio 12 + UPUPW+PHP5.4开发平台配置过程》
一.安装Zend studio 12 安装过程比较简单,就不简述. 二.修改PHP.ini文件 在UPUPW文件夹目录下,找到\upupw\PHP5\php.ini配置文件,并通过搜索 ...
- 我要阻止做java开发的男朋友去创业型公司工作吗?
命这样的标题,我没有瞧不起创业型公司,我只是有点急了,因为男朋友今天晚上就要回复招聘公司了.我先来说说来由吧. 前段时间男朋友离职了,从毕业到现在在公司呆了2年多,因为资金不足导致他做的项目被迫停止了 ...
- JavaScript深入浅出4-对象
慕课网教程视频地址:Javascript深入浅出 对象的结构:包含一系列无序的属性,每个属性都有字符串key和对应的值 创建对象:对象字面量.new/原型链.Object.create 对象的属性操作 ...
- JS中try....catch
1.事情还有得挽回,换条路走try { 执行某个逻辑} catch (e) { 出问题,换个逻辑执行} 2.体面的退出try { 正常流程} catch (e) { 弹个框告诉用户不好意思出了点问题 ...
- MikroTik RouterOS防火墙与过滤详解
MikroTik RouterOS能对包状态过滤:P2P协议过滤:源和目标NAT:对源MAC.IP地址.端口.IP协议.协议(ICMP.TCP.MSS等).接口.对内部的数据包和连接作标记.ToS 字 ...
- 11.8---维护x的秩(CC150)
思路:比较easy.就是借助hashset让他有序然后就能够比较节省时间了. 答案: public static int[] getRankOfNumber(int[] a, int n){ int[ ...
- DECO 一个REACT NAtive 开发IDE工具
DECO 一个REACT NAtive 开发IDE工具. 目前只支持 OS,NO WINDOWS https://www.decosoftware.com/ 一个方便的快速 ERXPRESS 教程:h ...