JNDI容器:Java Naming Directory Interface,java命名目录接口
EJB:javaEE服务器端组件模型,Enterprise JavaBean,设计目标与核心应用是建立分布式应用程序。简单点说,就是将已经开发好的程序(java类)打包放在服务器上执行
具有跨平台的优势,是javaEE的一部分,用于开发基于组件的企业多重应用程序标准
链接数据库时候,程序员不需要关系“具体的数据库后台是什么,JDBC驱动是什么,JDBC URL是什么,链接数据库的用户名和口令是什么”,
以上这些可以交给j2EE容器来配置和管理,程序员需要做的就是对这些配置和管理进行引用即可。
采用JNDI配置数据库,在j2EE中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称,之后,在程序中,通过数据源名称引用数据源访问后台数据库
JNDI引用数据源的方式,当数据库信息发生变化时(数据库类型、数据驱动、用户名、密码等),直接修改数据源的配置文件mysql-db.xml就可以了,只要保证数据源的名称不变化,那么程序源代码就无需更改了
JNDI避免了程序和数据库之间的紧耦合,更加易于配置管理和部署
数据库连接池的使用:DBCP
1.导入jar包,commons-dbcp.jar,commons-pool.jar
2.添加配置文件,dbcpconfig.properties
3.编写工具类
public class DBCPUtil{
private static DataSource dataSource;
static{
try{
// 读取配置文件,初始化数据
InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties props = new Properties();
props.load(in);
dataSource=BasicDataSourceFactory.createDataSource(props); }catch(Exception e){
throw new ExceptionInInitializerError(e);
}
}
private static DataSource getDataSource(){
return dataSource;
}
private static Connection getConnection(){
try{
return dataSource.getConnection();
}catch(SQLException e){
throw new RuntimeException("获取数据库连接失败")
}
}
}
dbcpconfig.properties配置文件的内容
driverClassName:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/test
username:root
password:sorry
// 初始化链接配置
initialSize=10
// 最多的活跃个数
maxActive=50
// 最大空闲连接数
maxIdle=10
// 最小空闲连接数
minIdle=2
// 最长等待时间(毫秒)
maxWait=6000
// 设置连接属性
connectionProperties=useUnicode=true;characterEncoding=utf8
// 指定由连接池所创建的链接的自动提交状态
defaultAutoCommit=true
// driver default 指定由连接池所创建的链接的只读状态,默认为readOnly
defaultReadOnly=true
// driver default 指定由连接池所创建的链接的事务的状态
defaultTransactionIsolation=READ_COMMITTED 在并发编程时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同一个变量显然是不行的。
那么,我们需要这样一种机制,变量是同一个,大家都可以拿到这个变量的初始值,也就是可以拿到这个变量的副本
这种情况下,ThreadLocal就非常适合使用,这就可以用在数据库操作中,DAO数据库连接,它是单例模式,那么他的属性
connection就不是线程安全的,而且每一线程都要使用它,各自使用各自的,在这样情况下ThreadLocal就派上用场了
// ThreadLocal 线程安全局部变量
public class ThreadLocal{
private Map<Runnable,Object> map = new Map<Runnable,Object>;
public void set(Object obj){
map.put(Thread.currentThread(), obj);
}
public void remove(){
map.remove(Thread.currentThread());
}
public Object get(){
return map.get(Thread.currentThread());
}
}
// 对于数据库DBCPUtil
QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
qr.update("insert into users values(?,?,?)",12,"a","b");
qr.update("update users set name=? where id=?","zhang",2);
qr.update("delete from users where id=?", "10"); //过滤器,IE-》过滤器-》jsp-》转发-》最终回到客户
执行过程:用户IE->Tomcat->web.xml(过滤器配置)->Filter处理->Servlet/JSP->Tomcat->用户
String ans = request.getParameter("name"):
response.getWriter().write("nihao");
response.getWriter().write(name);
过滤器是对请求和相应的拦截,获取你想获取的东西
针对拦截范围内的资源的访问,每次访问都会由容器调用doFilter方法
过滤器的实现步骤:
1.编写一个类,实现java.servlet.Filter方法
public class Demo1 implements Filter{
public void init(FilterConfig filterConfig){ }
public void doFiler(ServletRequest req, ServletResponse res, FilterChain chain){
System.out.println("commit");
chain.doFilter(req, res);//放行,让下一个上
}
public void destroy(){ }
}
2.编写web.xml配置文件
<filter>
<filter-name>Demo1</filter-name>
<filter-class>com.deng.example.Demo1</filter-class>
</filter>
<filter-mapping>
<filter-name>Demo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 对于多个过滤器会有过滤顺序,那么在配置文件web.xml中,标签出现的顺序就是过滤顺序
在web项目中,当用户输入的URL中有不存在的servlet,html,jsp等资源时候,那么web.xml中的<welcome-file-list>标签元素就指定默认的访问页面

JDBC及Filter的更多相关文章

  1. 在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样

    [参考]:maven pom.xml加载不同properties配置[转] 首先 看看效果: 点开我们项目中的Maven projects 后,会发现右侧 我们profile有个可勾选选项.默认勾选l ...

  2. OSGi 系列(十六)之 JDBC Service

    OSGi 系列(十六)之 JDBC Service compendium 规范提供了 org.osgi.service.jdbc.DataSourceFactory 服务 1. 快速入门 1.1 环境 ...

  3. QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler

    1.c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config&g ...

  4. QueryRunner类实战

    先上一个登录代码---判断登录是否成功 1.c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?&g ...

  5. Maven里面多环境下的属性过滤(配置)

    情景:通常一个项目都为分为开发环境(dev)和测试环境(test)还有正式环境(prod),如果每次一打包都要手动地去更改配置文件,例如数据库连接配置.将会很容易出差错. 解决方案:maven pro ...

  6. PKIX:unable to find valid certification path to requested target

    1.Communications link failure,The last packet successfully received from the server was * **millisec ...

  7. elk快速入门-Logstash

    Logstash1.功能:数据输入,数据筛选,数据输出2.特性:数据来源中立性,支持众多数据源:如文件log file,指标,网站服务日志,关系型数据库,redis,mq等产生的数据3.beats:分 ...

  8. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  9. struts神马的不过是对servlet、filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet、filter,不懂jdbc,使用struts和hibernate出问题了都不知道是怎么回事。

    struts神马的不过是对servlet.filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet.filter,不懂jd ...

随机推荐

  1. hadoop 随笔

    http://p-x1984.iteye.com/blog/859843 面试hadoop可能被问到的问题,你能回答出几个 ? 1.hadoop运行的原理? 2.mapreduce的原理? 3.HDF ...

  2. MySQL,查看连接数和状态等

    1.MySQL> show status like '%connect%'; Connections,试图连接到(不管是否成功)MySQL服务器的连接数.   Max_used_connecti ...

  3. [转]redis的三种启动方式

    来源:https://www.cnblogs.com/pqchao/p/6549510.html redis的启动方式1.直接启动  进入redis根目录,执行命令:  #加上‘&’号使red ...

  4. linux系统环境搭建

    一.安装jdk 参考帖子 用yum安装JDK(CentOS) 1.查看yum库中都有哪些jdk版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [r ...

  5. <转>Python OOP(1):从基础开始

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  6. 对Android 开发者有益的 40 条优化建议(转)

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  7. 【WEB前端系列之CSS】CSS3动画之Tranition

    前言 css中的transition允许css的属性值在一定的时间区间内平滑的过渡.这种效果可以在鼠标点击.获得焦点.被点击或对元素任何改变中触发,并圆滑的以动画效果改变CSS的属性值.语法: tra ...

  8. Python pyQt4/PyQt5 学习笔记3(绝对对位,盒布局,网格布局)

    本节研究布局管理的内容. (一)绝对对位  import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__( ...

  9. Android手机资料拷贝导出工具 --- 91手机助手

    http://zs.91.com/

  10. Junit3和Junit4使用区别

    在项目经常会用到单元测试,这里对Junit在开发中的使用标准及使用方法进行简单的介绍. 1.包目录的定义以及相关jar包的添加 2.Junit3和Junit4分别对测试类的编写 所测试的源代码: pa ...