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. 06-Linux RPM 命令参数使用详解

    rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组 ...

  2. 10 -- 深入使用Spring -- 5... 实现任务的自动调度

    10.5 实现任务的自动调度 10.5.1 使用Quartz 10.5.2 在Spring中使用Quartz

  3. 解决win10休眠后无法唤醒

    在控制面板-电源选项-编辑计划设置-高级电源设置中把"睡眠"的选项中休眠调整为从不,"电源按键和盖子"选项中也都设为睡眠,这样使得无论你是使用电池还是电源,系统 ...

  4. python与VScode

    用VScode写python是非常方便的.vscode是一个功能非常强大的编辑器,下面介绍大致的使用方法: 下载安装python,配置环境变量. 下载安装VScode(vscode会自动连接pytho ...

  5. Docker-创建和分享应用(3)

          Dockerfile定义容器内环境中发生的事情.对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”哪些 ...

  6. 【Android】录音-amr音频录制

    http://www.cnblogs.com/fengzhblog/archive/2013/08/01/3231500.html http://blog.csdn.net/fan7983377/ar ...

  7. PostgreSQL恢复误删数据

    在Oracle中:删除表或者误删表记录:有个闪回特性,不需要停机操作,可以完美找回记录.当然也有一些其他的恢复工具:例如odu工具,gdul工具.都可以找回数据.而PostgreSQL目前没有闪回特性 ...

  8. Splash images_enabled 属性

    images_enabled属性用于设置加载页面时是否加载图片,如下,禁止之后,返回的页面截图就不会带有任何图片,加载速度也会快很多 function main(splash, args) splas ...

  9. Mybatis的resultMap返回map

    <resultMap type="Map" id="bankMaintainMap"> <result column="bank_n ...

  10. vuex - 辅助函数学习

    官网文档: https://vuex.vuejs.org/zh-cn/api.html  最底部 mapState 此函数返回一个对象,生成计算属性 - 当一个组件需要获取多个状态时候,将这些状态都声 ...