JNDI

使用JNDI可以访问的目录及服务很多,如DNS,文件服务,数据库等。
Tomcat 根目录\conf\context.xml文件为全局上下文配置文件,对所有的Web应用有效。所以将发布的信息配置在此文件中,再通过JNDI来查找信息。

name属性为:环境条目的名称,相对于java:comp/env的名称、
type属性为: 环境条目的java类名的全称。
value:通过JNDIcontext请求时,返回给定应用的参数值,该值必须转换成type属性定义的java类型。
然后通过编写JSP代码,通过JNDI访问环境条目 代码如下:
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JNDI</title>
</head>
<body>
<%
//javax.naming.Context提供了查找JNDI Resource的接口
Context ctx = new InitialContext();
//java:comp/env/为前缀
String str = (String) ctx.lookup("java:comp/env/tjndi");
out.print("test jndi:"+str);
%>
</body>
</html>
数据库连接池

数据库连接池在初始化时将创建一定数量的数据库连接并放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将确保至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数量超过最大的连接数量时,这些请求将被加入等待队列中。
数据库与连接池
在DataSource中事先建立多个数据库连接,这些数据库连接保存在连接池中,java程序访问数据库时,只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,在将数据库连接返回给连接池,这些做可以提高访问数据库的效率。
连接池技术原理

在创传统模式下,数据库连接使用完毕后,需要将其关闭,,释放资源。而在数据库连接池中。使用数据源获的数据库连接对象,在调用close()方法时并不会真正的关闭连接,而仅仅是实现了断开应用程序与连接池之间的联系,


数据源的配置


配置好数据源后 就可以通过以下代码获得数据库连接对象
package com.xinwen.dao;
import java.sql.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class BaseDao {
public Connection getConnection() {
Connection conn=null;
try {
Context cont = new InitialContext();
DataSource ds = (DataSource)cont.lookup("java:comp/env/jdbc/news");
conn = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
数据源配置完毕后 要通过数据源访问数据库,还要添加数据库驱动文件,由于数据源由Tomcat创建并维护,必须把数据库驱动文件放到Tomcat的lib目录下
在使用JNDI获取数据源对象时。可以分为如下四个步骤;
- 配置context.xml文件。
- 配置Web.xml文件。
- 添加数据库驱动
- 编写代码,使用lookup()方法获得数据源对象。
软件设计分层
分层模式是将解决方案的组件分隔到不同的层中,每一层中的组件应保持内聚性,每一层都应与其下面的各层保持松耦合。对于一个小型系统一般三层就足够了。


为什么需要分层

三层架构
三层是指,表示层,业务逻辑层,数据访问层。


层与层之间的关系

表示层根据用户的操作,将请求提交给业务逻辑层;业务逻辑层收到请求,首先对请求的数据进行必要的审核和处理,然后将请求通知数据访问层或直接将处理结果返回表示层;数据库访问层收到业务逻辑层的调用后便开始访问数据库。
业务逻辑层在体系架构中的位置非常关键,起到数据交换中承上启下的作用,理想的分层式架构,应该是一个支持可抽取可替换的 “抽屉” 式架构。业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据库访问层而言,它是调用者;对于表示层而言,它却是被调用者。
数据访问层通过对数据库的访问得到请求的结果,并把请求结果通知业务逻辑层,业务逻辑层收到结果,可以对结果进行必要的审核和处理,然后将请求结果通知表示层,表示层收到后,把结果展示给用户。
分层原则

1.上一层依赖其下一层,依赖关系不跨层。
2.下一层不能调用上一层
3.下一层不依赖上一层
4.在上一层中不能出现下一层的概念
简单的说就是在业务逻辑层中,只能有用于业务逻辑控制的代码,而不能出现数据库访问层中才有的SQL语句,确保层次间关系很清晰。
使用三层架构开发的特点和优势
- 上层不知下层的存在。
- 每一层仅知它下一层的存在,而不知另外的下层。
- 上层使用下层提供的服务,并未下层提供数据。

例如在三层架构中,表示层只与业务逻辑层联系,而对于业务逻辑层下还有哪些层并不关心,表示层只依赖于业务逻辑层。
当然,在程序中使用分层也有其弊端,例如,原本很直接的操作,现在要通过层层传递,势必造成性能的下降,另外,虽然分层架构可以降低层内变化成本,但对于功能的定义(接口定义)的变化非常敏感,功能定义的变动对于分层架构是最致命的,修改起来难度非常大。所以,一个简单的判断法制是:如果系统层内实现频繁变动(甚至整层替换)的可能性很大,而功能定义变动的可能性很小,就使用分层。

本文介绍了在Java Web开发中使用JNDI进行数据库连接管理,详细阐述了数据库连接池的工作原理,并探讨了软件设计中的分层架构,特别是三层架构的实施细节和优势。通过配置context.xml和Web.xml文件,结合数据源,实现高效的数据访问和业务逻辑处理。
813

被折叠的 条评论
为什么被折叠?



