使用分层实现业务处理
搭建三层架构基本框架的步骤如下
- 示层:用于用户展示与交互
- 业务逻辑层:提供对业务逻辑处理的封装
- 数据访问层:数据的增、删、改、查操作
JNDI介绍
什么是JNDI
- Java Naming and Directory Interface,Java命名和目录接口
- 通过名称将资源与服务进行关联
JNDI的简单应用
应用步骤
- 发布信息:修改Tomcat\conf\context.xml文件
<Context>
<Environment name="tjndi" value="hello JNDI" type="java.lang.String" />
//name="tjndi"是JNDI查找的名称
</Context>
获取资源:使用lookup()进行查找
//javax.naming.Context提供了查找JNDI 的接口
Context ctx = new InitialContext(); //初始化Context对象
//java:comp/env/为前缀
String testjndi = (String)ctx.lookup("java:comp/env/tjndi");//tjndi是JNDI查找的名称
out.println("JNDI: "+testjndi);
为什么使用连接池
传统数据库连接方式的不足
- 需要经常与数据库建立连接
- 在访问结束后必须要关闭连接释放资源
- 当并发访问数量较大时,网站速度收到极大影响
- 系统的安全性和稳定性相对较差
使用连接池实现数据库连接步骤
- 配置context.xml文件
- Tomcat的conf/context.xml中的配置
<Context>
<Resource name="jdbc/news"
auth="Container"type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="sa" password=“sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:5545;DatabaseName=NewsManager"/>
</Context>
属性名称 | 说明 |
---|---|
name | 指定Resource的JNDI名称 |
auth | 指定管理Resource的Manager |
type | 指定Resource所属的Java类 |
maxActive | 指定连接池中处于活动状态的数据库连接的最大数目 |
maxIdle | 指定连接池中处于空闲状态的数据库连接的最大数目 |
maxWait | 指定连接池中的连接处于空闲的最长时间 |
- 配置web.xml文件
-. 在web.xml中配置
<resource-ref>
<res-ref-name> jdbc/news </res-ref-name>//jdbc/news指定JNDI的名字,与<Resource>元素中的name一致
<res-type> javax.sql.DataSource </res-type>//javax.sql.DataSource 指定引用资源的类名,与<Resource>元素中的type一致
<res-auth> Container </res-auth>//Container 指定管理所引用资源的Manager与<Resource>元素中的auth一致
</resource-ref>
- 添加数据库驱动文件
-. 把数据库驱动的.jar文件,加入到Tomcat的lib中 - 进行代码编写,实现查找数据源
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class BaseDao {
public Connection getConnection () {
Context ctx;
try {
ctx = new InitialContext();
//获取与逻辑名相关联的数据源对象
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/news");
conn=ds.getConnection();
} catch (SQLException exception) {
exception.printStackTrace();
}catch (NamingException namingException)
namingException.printStackTrace();
}
}
}