??xml version="1.0" encoding="utf-8" standalone="yes"?>
requestQ?/strong>
好处Q用完就仍,不会D资源占用的无限增ѝ?
弊处Q每ơ要用都从数据库中抓Q多做操作,自然会对性能有一些媄响?
sessionQ?/strong>
好处Q不用每ơ都L据库抓,做操作?
弊处Q每个客户都有一个sessionQ只能自׃用,不同session可能保存大量重复数据Q?
可能耗费大量服务器内存;
另外session构徏在cookie和url重写的基上,所以用session实现会话跟踪Q会用掉一点点服务器带宽和客户端保持联l,
当然session多Q耗费的带宽越多,理论上也会对性能造成影响?
集群的session同步会是个问题?
servletContextQ?/strong>
好处Q不用每ơ都L据库抓,做操作?
存储的数据所有客户都可以用?
可减重复在内存中存储数据造成的开销?
弊处Q很多时候相同的数据可能不多(相当于cache的命中率很低Q?
其实以上3中方法都有利有弊Q各自的好处在某U条件下Q也都会转变为弊处。所以不妨综合用,相当于一?#8220;W三方用?#8221;Q只讲一下思\Q否则太q繁琐,涉及到的相关技术点请参考有x术资料)Q?
request不说了,重点说说session和servletContextQ?
--session的可控应?/strong>
session的最大问题是资源回收Q两cd收方?
d回收Q浏览器被关闭,而ؓ提交触发清理动作的请求时Q该Ҏ(gu)失效Q而且很常见?
时回收Q设|session的setMaxInactiveInterval属性或在web.xml中配|超时时_然后交给jvm的垃圑֤理器处理?
不过不要报太大希望,jvm的垃圾收集器q不灵光?
可以用另一U替代方法缓解该问题Q比如限制session的数量,可以用HttpSessionListener实现Q这样可以缓解session带来的吃内存问题Q当然这U做法每ơ都需要判断session数量Q当session辑ֈ限定数量时还必须用其他方法处理了Q这些细节繁琐,而且要}慎处理?
--servletContext
如果说session是一?#8220;局部缓?#8221;Q那servletContext是一?#8220;全局~存”了,不妨把它当作cacheQ这里不讲究用词的严谨性,仅ؓ了更好说明问题)。cache的大是当前应用可用的最大内存。cache的最大问题是提高命中率,命中率高Q内存占用少Q效率高Q命中率低,则内存占用多而且效率低。这U应用的技术实现比“session的可I应?#8221;要简单,适用于相同数据多的地方,q个要事先有所判断Q如果用不好则有弊无利?
如果仅用servlet规范l出?U机ӞM一U都达不到好处兼收的效果Q所以要发挥3U方法的好处、摒弃弊处,必须l合q用Q做一些技术框架的构徏工作Q而且有些地方q比较繁琐(q好框架是可重用的)?/span>
有时候寻求或实现“q”Q或者说取其利而摒其害Q,要付出很大代PҎ(gu)不同的情况,q些代h(hun)或是值得Q或是不值得。也可以“两害相权取其?#8221;Q或许是最便捷的方法?/span>
%p 输出优先U,即DEBUGQINFOQWARNQERRORQFATAL
%r 输出自应用启动到输出该log信息耗费的毫U数
%c 输出所属的cȝQ通常是所在类的全?
%t 输出产生该日志事件的U程?
%n 输出一个回车换行符QWindowsq_?#8220;\r\n”QUnixq_?#8220;\n”
%d 输出日志旉点的日期或时_默认格式为ISO8601Q也可以在其后指定格式,比如Q?d{yyy MMM dd HH:mm:ss,SSS}Q输出类|
%l 输出日志事g的发生位|,包括cȝ名、发生的U程Q以及在代码中的行数。D例:Testlog4.main(TestLog4.java:10)
也可参考这网?br />
昨天Q配|了一整天EclipseQ终于搞定。不q在配置好Tomcat的连接池之后Q测试与SQL Server2000的连接的时候出CCannot create JDBC driver of class '' for connect URL 'null'的错误。下面把我的解决Ҏ(gu)写出Q?font face="宋体" color="#ff0000">注意Q我使用的是JTDS驱动Q?/font>
1.请保证你的SQL Server 2000已经打过SP4的补丁了?/font>之前我出现Cannot create JDBC driver of class '' for connect URL 'null'的问题,原因是没打SP4的补丁!
2.正确配置q接池!
常用的配|?/span>Tomcatq接池有两种Ҏ(gu)Q一是利?/span>Tomcat的管理界面。二是修?/span>Tomcat的配|文件?/span>q里单介l通过修改Tomcat的配|文仉|连接池的方法?/span>配置Tomcatq接池需?/span>修改两个个地方,一?/span>$Tomcat_HOME/conf/server.xmlQ?/span>$Tomcat_HOME是指Tomcat的安装目录,?/span>server.xml <Host>?/span></Host>之间配置下面代码?/span>
例程 1-3 配置server.xml文g
<Context path="/Blog" docBase="Blog" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/blog" auth="Container"
type="javax.sql.DataSource" driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1305;DatabaseName=blog"
username="sa" password="" maxActive="20" maxIdle="10" maxWait="-1"/>
另外一个需要修改的地方?/span>$Tomcat_HOME/webapps/bookshop/WEB-INF/web.xmlQ在?/span>web.xml文g里增加下面代码:
例程1-4 ?/span>web.xml文g里要增加的内?/span>
<resource-ref>
<description>blog DB connect pool</description>
<res-ref-name>jdbc/blog</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
下面是测试代码:
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Context ctx=null;
Connection cnn=null;
Statement stmt=null;
ResultSet rs=null;
try {
ctx=new InitialContext();
if(ctx==null) throw new Exception("没有匚w的环?/span>");
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
if(ds==null) throw new Exception("没有匚w数据?/span>");
cnn=ds.getConnection(); stmt=cnn.createStatemen(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql="select * from blog_user";
rs=stmt.executeQuery(sql);
<%out.print("数据库操作成功,恭喜?/span>");%>
<%
}catch(Exception ee){
System.out.println("connect db error:"+ee.getMessage());
return false;
}finally
{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(cnn!=null)cnn.close();
if(ctx!=null)ctx.close();
}
%>
</body>
</html>