java web(二) Tomcat数据源
一、数据源的产生
1、JDBC操作原理
(1) 加载数据库驱动程序(数据库驱动程序可通过classpath配置);
Class.forName();
(2)通过DriverManager类取得数据库连接对象;
Connection conNn = DriverManager.getConnection();
(3)通过Connection实例化PreparedStatement对象,编写SQL命令操作数据库;
PreparedStatement ps = conn.prepareStatement(sql);
ps.executeQuery();
(4)数据库属于资源操作,操作完成后要关闭数据库以及释放资源。
con.close();
2、由于每一个用户进行数据库操作时都要经过相同的(1)(2)(4)步骤,但每个用户对于数据库的操作却是不同,所以在进行数据库操作时如果可以将重复的3个步骤去掉而只保留步骤3的话性能肯定能有所提高。
二、数据源简介
1、数据源的核心原理:在一个对象池中保存多个数据库连接(也成为数据库连接池--Connection Pool),用户对数据库进行操作时取出一个,用完后放回连接等待其他用户继续使用;
2、考虑因素:
1>最小连接数:如果一个程序在使用时没有一个用户连接,则数据库最小应该维持的数据库连接 数;
2>最大连接数:在一个程序中一个数据库最多可以打开的数据库连接数;
3>最大等待时间:当一个数据库连接池中已经没有更多的数据库连接提供给用户时,其他用户的最大等待时间,如果再等到的时间内有放回则可以继续使用,否则用户无法取得数据库连接。
由此我们可以Java应用程序实现,先在一个类集中保存多个数据库连接对象,之后通过控制类集达到连接池功能的实现,但是这样就要考虑多线程问题,以上三种问题也要考虑,实现起来比较困难; Tomcat4.1.x版本之后已经支持了此操作,所以在Web开发中可以直接通过Tomcat即可实现数据库连接池功能;除此之外也可通过数据库连接池组件进行实现 如Apache组织的C3P0组件。
3、web容器中数据库的连接池都是通过数据源(javax.sql.Datasource)访问的,即可以通过javax.sql.Datasource类得到一个Connection对象,而想要的得到DataSource对象需要使用JNDI进行查找(JNDI--java 命名及目录接口,java EE13种技术之一,主要功能是通过一个名称的key查找到对应的一个value)
三、数据源的实现
注意,mysql-connector-java-5.1.6-bin.jar 包存放于 docBase所指定的lib目录下或者Tomcat安装文件下的lib中
1、配置数据库连接池,server.xml文件
<Context path="/kk" docBase="D:\Local\webKK" reloadable="true">
<Resource
name="jdbc/xrk" ->配置一个连接池资源,名称为jdbc/xrk
auth="Container" ->容器负责资源的连接
type="javax.sql.DataSource" ->此数据源名称对应的类型是DataSource
maxActive="100" ->最大连接数
maxIdle="30" ->最小连接数
maxWait="10000" ->用户等待的最大时间
username="root" ->数据库用户名
password="kk" ->数据库密码
driverClassName="org.gjt.mm.mysql.Driver" ->数据库驱动程序
url="jdbc:mysql://localhost:3306/test" ->数据库名称
/>
</Context>
以上配置是全局数据源配置,全局数据源意思是配置了一个数据源后任何web应用都能够访问。
<Resource>节点中的auth选项表示的是连接数据库的方法:
Container--容器将代表应用程序登录到资源管理器(常用);
Application--应用程序必须程序化的登录到资源管理器。
2、配置web.xml文件
注意在文件中指明要使用的数据源名;
<display-name>Welcome to Tomcat</display-name>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/xrk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
3、查找数据源
数据源的操作使用的是JNDI方式进行查找,步骤如下:
1>初始化名称查找上下文:Context ctx=new InitialContext();
2>通过名称查找DataSource对象:DataSource ds=(DataSource)ctx.lookup(DSNAME);
3>通过DataSource取得一个数据库连接:Connection conn=ds.getConnection();
<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<head><title>xur</title></head>
<body>
<%
String DSNAME="java:comp/env/jdbc/xrk"; //JNDI名称
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup(DSNAME);
Connection conn=ds.getConnection();
%>
<%=conn%>
<%
conn.close();
%>
</body>
</html>
上述文件中初始化JNDI名称时前面加了java:comp/env/前缀,主要是为了解决JNDI查找时的冲突问题(java EE规定的环境命名上下文--Environment Naming Context(ENC))
运行该程序,取得连接则输出如下,否则输出null。
四、使用数据库连接池的好处
1、通过数据库连接池可以提升数据库的操作性能,可以避免类加载、数据库连接、数据库关闭等操作;
2、数据源操作时要使用JNDI查找,而且查找时需要制定前缀属性。
java web(二) Tomcat数据源的更多相关文章
- java java web及tomcat的使用
java web及tomcat的使用 一.什么是java web: 参考百度百科: http://baike.baidu.com/link?url=HnaWXFD7wFfPAlFMW02GV6r5p ...
- java web服务器tomcat介绍【转载】
机器矩阵2016-08-10 22:14 java程序员亲切地称他为tom猫,看到这只猫可以说明1 服务器部署成功了 ,2 网络是联通的. 到底这只猫是什么来头呢? tomcat是Apache基金会下 ...
- java web 二维码生成
pom支持: <!-- 二维码支持包 start--> <dependency> <groupId>com.google.zxing</groupId> ...
- JAVA and JAVA WEB with TOMCAT and ECLIPSE 学习过程中遇到的字符乱码问题及解决方法汇总(随时补充)
JAVA语言具有跨平台,unicode字符集编码的特点. 但是在开发过程中处理数据时涉及到的字符编码问题零零散散,尤其是处理中文字符时一不留神就可能出现一堆奇奇怪怪的符号,俗称乱码. 对于乱码,究其原 ...
- java web(三) Tomcat虚拟目录映射方式
Tomact服务器虚拟目录的映射方式 web应用开发好后若想被外界访问,需要将web应用所在的目录交给web服务器管理,这个过程称为虚拟目录的映射. 方式一:在server.xml文件的host元素中 ...
- java web(一):tomcat服务器的安装和简单介绍,与eclipse关联
一:下载tomcat安装包和安装 这个百度一下就可以了. 安装完以后进入tomcat的安装路径查看 如图所示:有几个目录简单介绍下 bin目录: 存放运行tomcat服务器的相关命令. conf目 ...
- Java web 项目 tomcat部署方式.
本地做Java Web项目的时候常常会用到tomcat部署测试的问题, 这里介绍项目的部署方法: 1,配置文件的形式: 例如: 你的项目目录为:f:\workspaces\MyProject,此时使用 ...
- Web —— java web 项目 Tomcat 的配置 与 第一个web 项目创建
目录: 0.前言 1.Tomcat的配置 2.第一个Web 项目 0.前言 刚刚开始接触web开发,了解的也不多,在这里记录一下我的第一个web项目启动的过程.网上教程很多,使用的java IDE 好 ...
- Java Web(二) Servlet详解
什么是Servlet? Servlet是运行在Web服务器中的Java程序.Servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求.Java Web应用程序中所有的请求-响应 ...
随机推荐
- [荐]Js apply()和call()方法详解 - http://www.w3cfuns.com/article-5596443-1-1.html
本帖最后由 默默DE人生 于 2013-3-19 13:22 编辑 Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文 ...
- 【T_SQL】 基础
一.T-SQL 的组成 1.DML(数据操作语言 Data Manipulation Language) 查询.插入.删除和修改数据库中的数据.SELECT.INSERT. ...
- 性能测试中TPS和并发用户数
并发用户数与TPS之间的关系 1. 背景 在做性能测试的时候,很多人都用并发用户数来衡量系统的性能,觉得系统能支撑的并发用户数越多,系统的性能就越好:对TPS不是非常理解,也根本不知道它们之间的关系 ...
- Liferay 6.2 改造系列之二十:修改默认添加用户权限及用户是否拥有个人站点的配置
1.修改默认添加用户权限为User,而非Powers User: 在/portal-master/portal-impl/src/portal.properties文件中有如下配置: # # Inpu ...
- 标准W3C盒子模型和IE盒子模型
标准W3C盒子模型和IE盒子模型 CSS盒子模型:网页设计中CSS技术所使用的一种思维模型. CSS盒子模型组成:外边距(margin).边框(border).内边距(padding).内容(co ...
- Wireshark工具创建过滤器的方式
Wireshark工具创建过滤器的方式 [实例1-3]现在要抓取目的或来源地址为192.168.5.9的封包.在图1.5中添加如下所示的条件: tcp dst port 3128 添加后单击Star ...
- 每天一个linux命令---telnet
执行telnet指令开启终端机阶段作业,并登入远端主机. telnet的命令的格式: telnet ip port 例1: 建立连接不成功 [richmail@portal bin]$ telne ...
- 【原】iOS中KVC和KVO的区别
在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...
- 【转】vim格式化C代码
转自:http://blog.chinaunix.net/uid-24774106-id-3396220.html 在自己的目录下编辑自己的.vimrc, vim ~/.vimrc 添加下面的几行: ...
- flex设置成1和auto有什么区别
首先明确一点是, flex 是 flex-grow.flex-shrink.flex-basis的缩写.故其取值可以考虑以下情况: flex 的默认值是以上三个属性值的组合.假设以上三个属性同样取默认 ...