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. dubbo开发前戏--ZooKeeper集群部署(3.4.6)

    最近在开发dubbo服务的时候一直用的是公司提供的zk平台,因为使用的人太多或者没人维护老是出问题,导致dubbo服务偶尔可以调通,偶尔调不通的情况,所以花点时间自己部署一套,后面出问题还方便看日志排 ...

  2. JQuery Mobile 简单入门引导

    看了慕课网的jqm视频(http://www.imooc.com/learn/207),觉的不错,简单截几个图,做一下备忘:

  3. [AX]AX2012 R2 HR Jobs, Positions, Department和Workers

    部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...

  4. scala中隐式转换之隐式值和隐式视图

    /** * Created by root * Description : 隐式值和隐式视图 */ object ImplicitTest { def main(args: Array[String] ...

  5. MongoDB(六)-- 集群搭建

    一.集群介绍 sharding通过将数据集分布于多个也称作分片(shard)的节点上来降低单节点的访问压力.每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整意义的数据库.因此,分片 ...

  6. beef 安装使用

    http://www.freebuf.com/articles/web/5511.html

  7. thinkphp3.2 判断星期几

    后台 $w=date('w'); $week=array( "=>"星期日", "=>"星期一", "=>&qu ...

  8. 【盘古分词】Lucene.Net 盘古分词 实现公众号智能自动回复

    盘古分词是一个基于 .net framework 的中英文分词组件.主要功能 中文未登录词识别 盘古分词可以对一些不在字典中的未登录词自动识别 词频优先 盘古分词可以根据词频来解决分词的歧义问题 多元 ...

  9. css笔记 - transform学习笔记(二)

    transform转换 CSS transform 属于2D/3D上的转换.变形效果.他不是一个动画,他就是变形.比如正方形变平行四边形,再变圆形.都是形状变成另一个形状. 但是如果配合上transi ...

  10. 二分法求平方根(Python实现)

    使用二分法(Bisection Method)求平方根. def sqrtBI(x, epsilon): assert x>0, 'X must be non-nagtive, not ' + ...