Tom小猫,让我看清你的五脏六腑3(转)

本文介绍如何在Tomcat中配置JNDI DataSource,并设置连接池参数,同时讲解了如何通过DataSourceRealm实现用户认证。此外,还介绍了几种Tomcat阀门的应用场景,如客户访问日志记录、远程地址过滤等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tom小猫,让我看清你的五脏六腑3(转)
2007-01-29 19:51

-和JDBC域很类似,只不过访问数据库的方式不同,这个是使用JNDI DataSource来访问数据库的。
先在web.xml中加入安全约束,在和JDBC域一样新建两张表,然后在server.xml文件的<GlobalNamingResources>元素下添加如下内容:

DataSource域

< Resource  name ="jdbc/tomcatusers"  auth ="Container"  type ="javx.sql.DataSource" />
< ResourceParams  name ="jdbc/tomcatusers" >
    < parameter >
     
< name > factory </ name >
     
< value > org.apache.commons.dbcp.BasicDataSourceFactory </ value >
 
</ parameter >
 
< parameter >
     
< name > maxActiove </ name >
     
< value > 100 </ value >
 
</ parameter >
 
< parameter >
     
< name > maxIdle </ name >
     
< value > 30 </ value >
 
</ parameter >
 
< parameter >
     
< name > maxWait </ name >
     
< value > 10000 </ value >
 
</ parameter >
 
< parameter >
     
< name > username </ name >
     
< value > root </ value >
 
</ parameter >
 
< parameter >
     
< name > password </ name >
     
< value ></ value >
 
</ parameter >
 
< parameter >
     
< name > driverClassName </ name >
     
< value > com.mysql.jdbc.Driver </ value >
 
</ parameter >
 
< parameter >
     
< name > url </ name >
     
< value > jdbc:mysql://localhost/tomcatusers?autoReconnect=true </ value >
  
</ parameter >
</ ResourceParams >

注意:Tomcat的JNDI资源必须配置在<GlobalNamingResources>元素下,服务器才能找到,否则会出现NameNotFoundException;低于Tomcat5.0.12的版本,即使正确配置了DataSourceRealm,也会出现找不到JNDI DataSource的异常,这个小猫的一个bug;在web.xml中是不需要配置<resource-ref>元素的,因为Web应用并不会访问这个DataSource。
当然server.xml还需要添加和JDBC域几乎相同的代码:

< Realm  className ="org.apache.catalina.realm.DataSourceRealm"  
             driverName
="com.mysql.jdbc.Driver"  debug ="0"  
             connectionURL
="jdbc:mysql://localhost/tomcatusers"  connectionName ="roor"  
             connectonPassword
=""  userTable ="users"  userNameCol ="user_name"  
             userCredCol
="user_pass"  userRoleTable ="user_roles"  roleNameCol ="role_name" >

Tomcat阀
由org.apache.Catalina.Value接口定义,能够对Catalina容器接收的HTTP Request进行预处理,是小猫特有的功能,可以加入到3种容器中(Engine、Host、Context)。

客户访问日志阀(Access Log Value)- 能够将可以的Request信息写入到日志中。可以记录页面访问的次数、用户Session活动和用户验证信息等。
例如:<Value className="org.apache.catalina.AccessLogValue" directory="logs" prifix="localhost_access_log" suffix=".txt" pattern="%h%l%u%t%s%r%s%b" resolveHost="true"&gt;
上面的pattern值可以用common,一个默认的值。
pattern属性规定日志的格式和内容:%a-远程IP地址;%A-本地IP地址;%b-发送的字节数,不包括HTTP Header;%h-远程主机名;%H-客户请求所用的协议;%l-"-";%m-请求的方法;%p-接受请求的本地服务器断开;%q-查询字符串;%r-用户请求的第一行内容;%s-响应HTTP Request的状态码;%S-用户Session ID;%t-时间;%u-验证的用户名;%U-请求URL路径;%v-本地服务器名。

远程地址过滤器(Remote Address Filter)-根据IP地址决定是否接受客户的请求。
例如:<Value className="org.apache.catalina.RemoteAddrValue" allow="127.0.0.1" deny="127.111.*"/>

远程主机过滤器(Remot Host Filter)-根据主机名决定是否接受请求。
<Value className="org.apache.catalina.RemoteHostValue" allow="localhost" deny="monster*"/>

客户请求记录器(Request Dumper)-把客户请求的详细信息记录在日志文件中,这里的日志文件是指<Logger>元素。
假定在server.xml中localhost的<Host>元素下已经配置了<Logger>元素:

< Logger  className ="org.apache.catalina.logger.FileLogger"  directory ="logs"  prefix ="localhos_log."  
              suffix
=".txt"  timestamp ="true" />

然后再添加<Value>元素:

< Value  className ="org.apache.catalina.RequestDumperValue" />


参考:《Tomcat与JavaWeb开发技术详解》


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值