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. 8 -- 深入使用Spring -- 0...

    要点梗概: 利用后处理器扩展Spring容器 Bean后处理器和容器后处理器 Spring3.0 的“零配置” 支持 Spring的资源访问策略 在ApplicationContext中使用资源 AO ...

  2. RabbitMQ :VHost,Exchanges, Queues,Bindings and Channels

    和RabbitMQ这个项目的缘分好奇怪,很长一段时间内是只关注源代码,真的是Erlang开源项目中的典范;现在要在项目中应用RabbitMQ,从新的视角切入,全新的感觉.仿佛旧情人换了新衣,虽是熟稔却 ...

  3. Weblogic CVE-2018-2894 漏洞复现

    0x01 前言 Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中针对可造成远程代码执行的高危漏洞 CVE-2018-2894 进行修复:http:/ ...

  4. 几种Bean的复制方法性能比较

    由于项目对性能 速度要求很高,表中的字段也很多,存在一个复制方法,耗时相对比较长,经过测试,使用Apache,Spring等提供的方法 耗时较长,使用自己自定义的复制方法时间提升很多,现记录下. 1. ...

  5. 手机CPU

    说起手机CPU的历史,笔者给大家提一个问题:"世界上第一款智能手机是什么呢?"相信很多人的答案是爱立信的R380或诺基亚的7650,但都不对,真正的首款智能手机是由摩托罗拉在200 ...

  6. JQuery插件的使用

    今天就来总结一下jquery插件的使用,刚开始学习时间一直自己在写实现他的功能,现在发现jquery好强大啊,好多的功能都给我们封装好啦,jquery万岁,嘿嘿,下面就来简单的总结一下我们学习的:

  7. 【软件分析与挖掘】An Empirical Study of Bugs in Build Process

    摘要 对软件构建过程中所产生的错误(build process bugs)进行实证研究. 5个开源项目:CXF, Camel, Felix,Struts, and Tuscany. 把build pr ...

  8. kafka---->kafka的使用(一)

    今天我们来学习一下kafka的简单的使用与配置.世上有可以挽回的和不可挽回的事,而时间经过就是一种不可挽回的事. kafka的安装配置 一.kafka的使用场景 活动跟踪:网站用户与前端应用程序发生交 ...

  9. JS插件---->SyntaxHighlighter的使用

    SyntaxHighlighter是一款用于web页面的代码着色工具,可以用来着色多种语言.今天我们通过实例来学习一下它的用法.旧同桌不是老情人,但与你分享过的青春不比初恋少半分. SyntaxHig ...

  10. Linux(Ubuntu) 下如何解压 .tar.gz 文件

    在终端输入以下命令即可解压: tar -zxvf YOUR_FILE_NAME.tar.gz 如果出现“权限不够”的错误提示,在命令前加上 sudo ,即 sudo tar -zxvf YOUR_FI ...