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查找,而且查找时需要制定前缀属性。

时间: 2024-08-06 03:23:49

java web(二) Tomcat数据源的相关文章

java java web及tomcat的使用

 java web及tomcat的使用 一.什么是java web: 参考百度百科: http://baike.baidu.com/link?url=HnaWXFD7wFfPAlFMW02GV6r5pAG-xOcfpfefXn3gAuVFxSy4SjwF08vbznS4d_4dvshPiOVdRtM1VGtCLN_X6_ 二.如何创建java web项目: 1.创建web project: 2.setting: projiect name:项目名称 j2ee specifcation level

java web 二维码生成

pom支持: <!-- 二维码支持包 start--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.google.zxing</

Web —— java web 项目 Tomcat 的配置 与 第一个web 项目创建

目录: 0.前言 1.Tomcat的配置 2.第一个Web 项目 0.前言 刚刚开始接触web开发,了解的也不多,在这里记录一下我的第一个web项目启动的过程.网上教程很多,使用的java IDE 好像也是各种各样,如:如2009年发表的:谈在Eclipse中配置Tomcat ,2014年发表的:如何配置Java EE Eclipse+Tomcat开发环境 等,还有很多杂七杂八的,深感后面配置越来越简单化了,而我使用的应该算是更简单的工具了. 工具越简单化傻瓜化,背后隐藏的原理就相对更多,包装的

Java Web开发Tomcat中三种部署项目的方法

一般情况下,开发模式下需要配置虚拟主机,自动监听,服务端口,列出目录文件,管理多个站点等功能 准备工作: 软件包:apache-tomcat-6.0.20.rar 将软件包解压至硬盘一分区,进入%TOMCAT_HOME%/conf目录 一:server.xml 配置 1.配置端口,修改server.xml. <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"

[Java Web学习]Tomcat启动时报war exploded: Error during artifact deployment

报错:Artifact FirstWeb:war exploded: Error during artifact deployment. See server log for details. SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframewor

Java Web(二) Servlet中response、request乱码问题解决

三月不减肥,五月徒伤悲,这就是我现在的状态,哈哈~ 健身.博客坚持. --WH 一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, MyServlet是一个普通的Servlet,浏览器访问它时,使用get请求方式提交了一个name=小明的参数值,在doGet中获取该参数值,并且打印到控制台,发现出现乱码 出现乱码的原因: 前提知识:需要了解码表,编码,解码这三个名词的意思.我简单说一下常规的, 码表:是一种规则,用来让我们看得懂的

JAVA and JAVA WEB with TOMCAT and ECLIPSE 学习过程中遇到的字符乱码问题及解决方法汇总(随时补充)

JAVA语言具有跨平台,unicode字符集编码的特点. 但是在开发过程中处理数据时涉及到的字符编码问题零零散散,尤其是处理中文字符时一不留神就可能出现一堆奇奇怪怪的符号,俗称乱码. 对于乱码,究其原因,就是因为编码和解码过程中使用了错误的字符编码方案导致的. 首先在开头说明本人对 编码 解码 这两个概念的理解(如有错误烦请dalao指出,如有疑问也欢迎交流,感激不尽!): 首先,有一个字符串: String str="hello,编码"; 使用String类的方法getBytes(S

Tomcat数据源总结

一.数据源的由来 JDBC操作主要由以下几步组成: (1)Class.forName(); (2)Connection con  = DriverManager.getConnection(); (3)PreparedStatement stat = con.prepareStatement(sql); (4)stat.executeQuery(); (5)con.close(); 很显然,(1)(2)(5)步是每次JDBC操作都要执行的,重复执行是非常耗时的,因此为了解决重复操作的问题,引入了

IDEA Java Web配置

目录 IDEA Java Web配置 tomcat配置 项目创建 项目导包 Servlet项目的创建 IDEA重启服务器的四个层级 IDEA Java Web配置 这篇文章适合使用IDEA创建过普通java类的coder tomcat配置 tomcat版本对应表: Servlet Spec JSP Spec EL Spec WebSocket Spec JASPIC Spec Apache Tomcat version Actual release revision Supported Java