JDBC及Filter
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的更多相关文章
- 在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样
[参考]:maven pom.xml加载不同properties配置[转] 首先 看看效果: 点开我们项目中的Maven projects 后,会发现右侧 我们profile有个可勾选选项.默认勾选l ...
- OSGi 系列(十六)之 JDBC Service
OSGi 系列(十六)之 JDBC Service compendium 规范提供了 org.osgi.service.jdbc.DataSourceFactory 服务 1. 快速入门 1.1 环境 ...
- QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler
1.c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config&g ...
- QueryRunner类实战
先上一个登录代码---判断登录是否成功 1.c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- Maven里面多环境下的属性过滤(配置)
情景:通常一个项目都为分为开发环境(dev)和测试环境(test)还有正式环境(prod),如果每次一打包都要手动地去更改配置文件,例如数据库连接配置.将会很容易出差错. 解决方案:maven pro ...
- PKIX:unable to find valid certification path to requested target
1.Communications link failure,The last packet successfully received from the server was * **millisec ...
- elk快速入门-Logstash
Logstash1.功能:数据输入,数据筛选,数据输出2.特性:数据来源中立性,支持众多数据源:如文件log file,指标,网站服务日志,关系型数据库,redis,mq等产生的数据3.beats:分 ...
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- struts神马的不过是对servlet、filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet、filter,不懂jdbc,使用struts和hibernate出问题了都不知道是怎么回事。
struts神马的不过是对servlet.filter的封装而已,hibernate神马的也不过是对jdbc的封装而已,他们只是把一些常见的操作流程化了,如果不懂servlet.filter,不懂jd ...
随机推荐
- InnoDB锁问题 & DB事务隔离级别
<参考:http://www.cnblogs.com/jack204/archive/2012/06/09/2542940.html>InnoDB行锁实现方式InnoDB行锁是通过给索引上 ...
- 搭建项目Maven+springMVC+hibernate时,JUnit測试出现报ClassNotFoundException错误的解决
近期在搭建Maven+springMVC+hibernate项目,正常启动项目时一切正常.但JUNIT測试时出现报ClassNotFoundException错误,经过细致排查发现没有生成class文 ...
- Java查看内部类信息
Java中支持在类的内部定义类,这种类成为内部类.内部类有些像Java中的方法,可以使用访问权限限定符修饰,可以使用static修饰等.编写程序,利用Java的反射机制来查看内部类的信息. 思路分析: ...
- Activiti 5.1.4最佳实践
1.简单介绍 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度. Activiti 作为一个遵从 Apache 许可的工作流和业 ...
- Linux+Redis实战教程_day02_消息订阅与发布_多数据库_redis批量操作-事务_redis持久化
5.扩展知识-消息订阅与发布(了解) 订阅新闻,新闻发布 subscribe channel:订阅频道,例:subscribe mychat,订阅mychat这个频道 psubscribe chann ...
- 使用 urllib 设置代理服务
(1) 如果我们一直用同一个IP去请求同一个网站上的网页,久了之后可能会被该网站服务器屏蔽,因此我们可以使用代理IP来发起请求,代理实际上指的就是代理服务器(2) 当我们使用代理IP发起请求时,服务器 ...
- samba 服务器
1.apt-get install smaba 2.安装完成后apt-get install smbclient 然后就是配置那个.conf文件,这个到网上搜下ubuntu下配置smaba服务器就可以 ...
- spring boot配置文件application.propertis
转自http://www.qiyadeng.com/post/spring-boot-application-properties 本文记录Spring Boot application.proper ...
- mysql学习笔记(三)
-- 主键冲突(duplicate key) ,'xujian','anhui'); ,'xiewei','anhui'); ,'luyang','anhui');-- 主键冲突了 -- 可以选择性的 ...
- Android 之 布局训练
1.线性布局 LinearLayout <?xml version="1.0" encoding="utf-8"?> <LinearLay ...