﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-PariScamper的java天空-随笔分类-Struts+Spring+Hibernate</title><link>http://www.blogjava.net/PariScamper/category/26370.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 19 Nov 2007 05:24:22 GMT</lastBuildDate><pubDate>Mon, 19 Nov 2007 05:24:22 GMT</pubDate><ttl>60</ttl><item><title>java web开发，bean数据放在request、response还是servletcontext中？(zz)</title><link>http://www.blogjava.net/PariScamper/archive/2007/11/19/161582.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Mon, 19 Nov 2007 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/11/19/161582.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/161582.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/11/19/161582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/161582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/161582.html</trackback:ping><description><![CDATA[<p><span class="postbody">就servlet规范本身，数据可以放在3个地方：request、session、servletContext. <br />
<br />
<strong>request：</strong> <br />
好处：用完就仍，不会导致资源占用的无限增长。 <br />
弊处：每次要用都从数据库中抓，多做操作，自然会对性能有一些影响。 <br />
<br />
<strong>session：</strong> <br />
好处：不用每次都去数据库抓，少做操作。 <br />
弊处：每个客户都有一个session，只能自己使用，不同session可能保存大量重复数据； <br />
可能耗费大量服务器内存； <br />
另外session构建在cookie和url重写的基础上，所以用session实现会话跟踪，会用掉一点点服务器带宽和客户端保持联络， <br />
当然session越多，耗费的带宽越多，理论上也会对性能造成影响。 <br />
集群的session同步会是个问题。 <br />
<br />
<strong>servletContext：</strong> <br />
好处：不用每次都去数据库抓，少做操作。 <br />
存储的数据所有客户都可以用。 <br />
可减少重复在内存中存储数据造成的开销。 <br />
弊处：很多时候相同的数据可能不多(相当于cache的命中率很低）。 <br />
<br />
<br />
其实以上3中方法都有利有弊，各自的好处在某种条件下，也都会转变为弊处。所以不妨综合使用，相当于一个&#8220;第三方用法&#8221;（只讲一下思路，否则太过繁琐，涉及到的相关技术点请参考有关技术资料）： <br />
<br />
request不说了，重点说说session和servletContext： <br />
<br />
<strong>--session的可控应用</strong> <br />
session的最大问题是资源回收，两类回收方法: <br />
主动回收：浏览器被关闭，而为提交触发清理动作的请求时，该方法失效，而且很常见。 <br />
超时回收：设置session的setMaxInactiveInterval属性或在web.xml中配置超时时间，然后交给jvm的垃圾处理器处理。 <br />
不过不要报太大希望，jvm的垃圾收集器并不灵光。 <br />
可以用另一种替代方法缓解该问题，比如限制session的数量，可以用HttpSessionListener实现，这样可以缓解session带来的吃内存问题，当然这种做法每次都需要判断session数量，当session达到限定数量时还必须用其他方法处理了，这些细节繁琐，而且要谨慎处理。 <br />
<br />
<strong>--servletContext <br />
</strong>如果说session是一个&#8220;局部缓存&#8221;，那servletContext就是一个&#8220;全局缓存&#8221;了，不妨把它当作cache（这里不讲究用词的严谨性，仅为了更好说明问题）。cache的大小是当前应用可使用的最大内存。cache的最大问题是提高命中率，命中率高，内存占用少，效率高，命中率低，则内存占用多而且效率低。这种应用的技术实现比&#8220;session的可空应用&#8221;要简单，适用于相同数据多的地方，这个要事先有所判断，如果用不好则有弊无利。 <br />
<br />
如果仅使用servlet规范给出的3种机制，任何一种都达不到好处兼收的效果，所以要发挥3种方法的好处、摒弃弊处，必须综合运用，做一些技术框架的构建工作，而且有些地方还比较繁琐（还好框架是可重用的）。</span>&nbsp;</p>
<p><span class="postbody">有时候寻求或实现&#8220;平衡&#8221;（或者说尽取其利而摒其害），要付出很大代价，根据不同的情况，这些代价或是值得，或是不值得。也可以&#8220;两害相权取其轻&#8221;，或许是最便捷的方法。</span></p>
<img src ="http://www.blogjava.net/PariScamper/aggbug/161582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-11-19 13:18 <a href="http://www.blogjava.net/PariScamper/archive/2007/11/19/161582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用hibernate像oracle插入数据出现java.sql.BatchUpdateException: ORA-01400: 无法将 NULL 插入 的解决办法</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/23/155306.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Tue, 23 Oct 2007 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/23/155306.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/155306.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/23/155306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/155306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/155306.html</trackback:ping><description><![CDATA[<p>注意如果该字段在Oracle中设定非空性为YES，则即使是插入String a=""或者String a=new String()也是相对于空值。</p>
<img src ="http://www.blogjava.net/PariScamper/aggbug/155306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-23 15:29 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/23/155306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Hibernate像Oracle插入数据出现ORA-01747: invalid user.table.column, table.column, or column specification的解决方法</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/12/152478.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Fri, 12 Oct 2007 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/12/152478.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/152478.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/12/152478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/152478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/152478.html</trackback:ping><description><![CDATA[<p>网上说是数据库的列名与oracle的保留字重名，的确如此。<br />
比如我的有一列叫user就是，另外我验证叫level也是。<br />
网上有的说叫start和end也不行，但经我试验，是可以的，也就是start和end不是保留字。<br />
另外，这个错误只在使用hibernate才出现（使用jdbc也可能出现，没试过）。<br />
直接用oracle的客户端Enterprise Manager Console却没有这个问题，就是列名叫user和level，照样可以插入数据。</p>
<img src ="http://www.blogjava.net/PariScamper/aggbug/152478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-12 23:05 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/12/152478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Log4j？</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/11/152147.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Thu, 11 Oct 2007 13:06:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/11/152147.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/152147.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/11/152147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/152147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/152147.html</trackback:ping><description><![CDATA[<font size="2"><strong>1、 Log4j是什么？<br />
</strong>&nbsp; Log4j可以帮助调试（有时候debug是发挥不了作 用的）和分析，要下载和了解更详细的内容，还是访问其官方网站吧：</font> <a href="http://jakarta.apache.org/log4j"><font size="2">http://jakarta.apache.org/log4j</font> </a><font size="2">。<br />
<br />
<strong>2、Log4j的概念</strong><br />
&nbsp;&nbsp;<!--startfragment --> Log4j中有三个主要的组件，它们分别是</font> <font size="2">Logger、Appender和Layout，L<!--startfragment -->og4j 允许开发人员定义多个Logger，每个Logger拥有自己的名字，Logger之间通过名字来表明隶属关系。有一个Logger称为Root，它永远存在，且不能通过名字检索或引用，可以通过Logger.getRootLogger()方法获得，其它Logger通过 Logger.getLogger(String name)方法。<br />
&nbsp;&nbsp; Appender则是用来指明将所有的log信息存放到什么地方，Log4j中支持多种appender，如<!--startfragment --></font> <font size="3"></font><font size="2">console、files、GUI components、NT Event Loggers等，一个Logger可以拥有多个Appender，也就是你既可以将Log信息输出到屏幕，同时存储到一个文件中。<br />
&nbsp;&nbsp; Layout的作用是控制Log信息的输出方式，也就是格式化输出的信息。<br />
&nbsp;&nbsp; Log4j中将要输出的Log信息定义了5种级别，依次为DEBUG、INFO、WARN、ERROR和FATAL，当输出时，只有级别高过配置中规定的级别的信息才能真正的输出，这样就很方便的来配置不同情况下要输出的内容，而不需要更改代码，这点实在是方便啊。<br />
<br />
<strong>3、Log4j的配置文件</strong><br />
&nbsp; 虽然可以不用配置文件，而在程序中实现配置，但这种方法在如今的系统开发中显然是不可取的，能采用配置文件的地方一定一定要用配置文件。Log4j支持两种格式的配置文件：XML格式和Java的property格式，本人更喜欢后者，首先看一个简单的例子吧，如下：<br />
<br />
</font><font color="#614db3"><font size="2">&nbsp; log4j.rootLogger=debug, <strong>stdout, R</strong><br />
&nbsp; log4j.appender.<strong>stdout</strong>=org.apache.log4j.ConsoleAppender<br />
&nbsp; log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
<br />
&nbsp; # Pattern to output the caller's file name and line number.<br />
&nbsp; log4j.appender.stdout.layout.ConversionPattern=%5p [%t] <strong>(%F:%L)</strong> - %m%n<br />
<br />
&nbsp; log4j.appender.<strong>R</strong>=org.apache.log4j.RollingFileAppender<br />
&nbsp; log4j.appender.R.File=example.log<br />
&nbsp; log4j.appender.R.MaxFileSize=</font> <font size="2"><strong>100KB<br />
</strong><br />
&nbsp; # Keep one backup file<br />
&nbsp; log4j.appender.R.MaxBackupIndex=1<br />
<br />
&nbsp; log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />
&nbsp; log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
</font><font color="#000000"><font size="2">&nbsp; 首先，是设置root，格式为<!--startfragment --> log4j.rootLogger=[level],appenderName,&nbsp;...，其中level就是设置需要输出信息的级别，后面是appender的输出的目的地，<!--startfragment -->appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。</font> <font size="2">配置日志信息输出目的地Appender，其语法为<br />
</font><font size="2">&nbsp; log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
&nbsp; log4j.appender.appenderName.option1 = value1<br />
&nbsp; ...<br />
&nbsp; log4j.appender.appenderName.option = valueN</font> <br />
<font size="2">Log4j提供的appender有以下几种：<br />
&nbsp; org.apache.log4j.ConsoleAppender（控制台）<br />
&nbsp; org.apache.log4j.FileAppender（文件）<br />
&nbsp; org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />
&nbsp; org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生新文件）<br />
&nbsp; org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br />
</font></font></font><font color="#614db3"><font color="#000000"><font size="2">配置日志信息的格式（布局），其语法为：<br />
</font><font size="2">&nbsp; log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />
&nbsp; log4j.appender.appenderName.layout.option1 = value1<br />
&nbsp; ....<br />
&nbsp; log4j.appender.appenderName.layout.option = valueN</font> <br />
<font size="2">Log4j提供的layout有以下几种：<br />
&nbsp; org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />
&nbsp; org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />
&nbsp; org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />
&nbsp; org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） <br />
<br />
</font></font></font><font color="#000000"><span style="font-size: 10.5pt"><font size="2"><span lang="EN-US">Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m 输出代码中指定的消息<O:P></O:P></span> </font></span></font>
<p><font color="#000000"><span style="font-size: 10.5pt"><font size="2">　　</font> <span lang="EN-US"><font size="2">%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL <br />
　　%r 输出自应用启动到输出该log信息耗费的毫秒数 <br />
　　%c 输出所属的类目，通常就是所在类的全名 <br />
　　%t 输出产生该日志事件的线程名 <br />
　　%n 输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221; <br />
　　%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：</font> </span></span><ST1:CHSDATE isrocdate="False" islunardate="False" day="18" month="10" year="2002"><span lang="EN-US" style="font-size: 10.5pt"><font size="2">2002年10月18日</font> </span></ST1:CHSDATE><span lang="EN-US" style="font-size: 10.5pt"><font size="2">22：10：28，921 <br />
　　%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)</font> </span></font></p>
<br />
<font color="#614db3"><font color="#000000"><font size="2"><br />
<strong>4、Log4j在程序中的使用</strong> </font></font></font><font color="#614db3"><font color="#000000"><br />
</font><font color="#a0a0a0"><font color="#090909" size="2">&nbsp; 要在自己的程序中使用Log4j，首先需要将commons-logging.jar和logging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样就可以在程序中使用log4j了。在类中使用log4j，</font> </font></font><font color="#614db3"><font color="#a0a0a0"><font color="#090909" size="2">首先声明一个静态变量</font> </font></font><font color="#614db3"><font color="#a0a0a0"><font color="#090909" size="2">Logger logger=Logger.getLog("classname")；现在就可以使用了，用法如下：logger.debug("debug message")或者logger.info("info message")，看下面一个小例子：</font> </font></font><font color="#614db3"><font color="#a0a0a0"><br />
</font><br />
<font size="2">&nbsp; import com.foo.Bar;<br />
&nbsp; import org.apache.log4j.Logger;<br />
&nbsp;&nbsp;import org.apache.log4j.PropertyConfigurator;<br />
&nbsp;&nbsp;public class MyApp {<br />
&nbsp; &nbsp; static Logger logger = Logger.getLogger(MyApp.class.getName());<br />
&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp; // BasicConfigurator replaced with PropertyConfigurator.<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;PropertyConfigurator.configure(args[0]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Entering application.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bar bar = new Bar();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bar.doIt();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Exiting application.");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;}<br />
</font></font>
<img src ="http://www.blogjava.net/PariScamper/aggbug/152147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-11 21:06 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/11/152147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat启动出现Cannot create JDBC driver of class '' for connect URL 'null'的解决方法</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/09/151574.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Tue, 09 Oct 2007 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/09/151574.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/151574.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/09/151574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/151574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/151574.html</trackback:ping><description><![CDATA[<p>肯定是tomcat的数据库连接池没配置对，给tomcat配置mysql数据库连接池方法如下<br />
1，用<span>Tomcat</span><span>的管理界面</span>建立Data Source，此时会在conf/server.xml生成如下片段：<br />
&nbsp;&nbsp;&nbsp; &lt;Resource<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/game"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="4"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxIdle="2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="root"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxWait="5000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password="3306"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:mysql://localhost:3306/game"/&gt;<br />
2，在<span><span>server.xml</span><span> &lt;Host&gt;</span><span>和</span><span>&lt;/Host&gt;</span><span>之间配置下面代码：<br />
</span></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="/game" debug="5" reloadable="true" crossContext="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;ResourceLink name="jdbc/game" global="jdbc/game" type="javax.sql.DataSource"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Context&gt;<br />
</span></span><span><span>其中path="/game"是部署供访问的url<br />
</span></span><span><span><br />
</span></span><span><span>其中1，2步也可以合为一步在server.xml添加如下代码，但我没验证。<br />
</span></span><span><span>&nbsp; &lt;Context path="/game" debug="5" reloadable="true" crossContext="true"&gt;<br />
</span></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/game" auth="Container" type="javax.sql.DataSource" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/game" username="root" password="3306" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="20" maxIdle="10" maxWait="10000"/&gt;<br />
&nbsp;&nbsp;&lt;/Context&gt;<br />
</span></span><span><span>3，在project的web.xml的&lt;/web-app&gt;前加入&nbsp;<br />
</span></span><span><span>&nbsp;&lt;resource-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;res-ref-name&gt;jdbc/game&lt;/res-ref-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />
&nbsp; &lt;/resource-ref&gt;<br />
<br />
</span></span><span><span>另外，如果tomcat启动出现java.lang.NoClassDefFoundError: **********错误，有可能是因为不断的用myeclipse添加library比如Hibernate 3.2 Core Librarys，Spring 2.0 AOP Librarys，Spring 2.0 Core Librarys，Spring 2.0 Persistence Core Librarys等之后，deploy时myeclipse将所有这些包都拷到WEB-INF的lib下但其中有一些jar包重复或不兼容造成的。</p>
</span></span>
<p><span><span>也可参考这篇网文<br />
</span></span><span><span></p>
<div>
<p>昨天，配置了一整天Eclipse，终于搞定。不过在配置好Tomcat的连接池之后，测试与SQL Server2000的连接的时候出现了Cannot create JDBC driver of class '' for connect URL 'null'的错误。下面把我的解决方案写出：<font face="宋体" color="#ff0000">注意：我使用的是JTDS驱动！</font></p>
<p>1.<font color="#ff6600">请保证你的SQL Server 2000已经打过SP4的补丁了。</font>之前我出现Cannot create JDBC driver of class '' for connect URL 'null'的问题，原因就是没打SP4的补丁！</p>
<p>2.正确配置连接池！</p>
<p><span>常用的配置</span><span>Tomcat</span><span>连接池有两种方法：一是利用</span><span>Tomcat</span><span>的管理界面。二是修改</span><span>Tomcat</span><span>的配置文件。</span><span>这里简单介绍通过修改</span><span>Tomcat</span><span>的配置文件配置连接池的方法。</span><span>配置</span><span>Tomcat</span><span>连接<span>池需要</span>修改两个个地方，一是</span><span>$<span>Tomcat_HOME/conf/server.xml</span><span>，</span><span>$<span>Tomcat_HOME</span><span>是指</span><span>Tomcat</span><span>的安装目录，在</span><span><span>server.xml</span><span> &lt;Host&gt;</span><span>和</span><span>&lt;/Host&gt;</span><span>之间配置下面代码。</span></p>
<p><span>例程</span> <span>1-3 </span><span>配置</span><span><span>server.xml</span><span>文件</span></p>
<div>
<p><span>&lt;Context path="/<span>Blog</span>" <span>docBase</span>="<span>Blog</span>" debug="5" <span>reloadable</span>="true" <span>crossContext</span>="true"&gt;</span></p>
</div>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;Resource name="<span>jdbc/blog</span>" auth="Container"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>type</span>="<span>javax.sql.DataSource</span>" <span>driverClassName</span>="<span>net.sourceforge.jtds.jdbc.Driver</span>"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span><span>url</span>="jdbc:jtds:sqlserver://localhost:1305;DatabaseName=<span>blog</span>"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>username="<span>sa</span>" password="" <span>maxActive</span>="20" <span>maxIdle</span>="10" <span>maxWait</span>="-1"/&gt;</span></p>
<div><span>&nbsp;</span>&lt;/Context&gt;</span></div>
<p><span>另外一个需要修改的地方是</span><span>$<span>Tomcat_HOME/webapps/bookshop/WEB-INF/web.xml</span><span>，在里</span><span><span>web.xml</span><span>文件里增加下面代码：</span></p>
<p><span>例程</span><span>1-4 </span><span>在</span><span><span>web.xml</span><span>文件里要增加的内容</span></p>
<div>
<p><span>&lt;<span>resource-ref</span>&gt;</span></p>
</div>
<div>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;<span>description&gt;</span><span>blog</span> DB connect pool&lt;/description&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;<span>res</span>-ref-name&gt;<span>jdbc/blog</span>&lt;/<span>res</span>-ref-name&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;<span>res</span>-type&gt;<span>javax.sql.DataSource</span>&lt;/<span>res</span>-type&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;<span>res</span>-auth&gt;Container&lt;/<span>res</span>-auth&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/resource-ref&gt;</span></p>
</div>
<div>
<p><span>下面是测试代码：<br />
&lt;%@ page <span>contentType</span>="text/<span>html<span>;charset</span>=GBK"%&gt; <br />
</span><span>&lt;%@ page import="<span>java.sql</span>.*"%&gt; <br />
</span><span>&lt;<span>html</span>&gt; <br />
</span><span>&lt;<span>body</span>&gt; <br />
</span><span>&lt;%<br />
&nbsp;&nbsp; </span><span>Context <span>ctx</span>=null;<br />
</span><span>&nbsp;&nbsp; </span>Connection <span>cnn</span>=null;<br />
</span><span>&nbsp;&nbsp;</span><span>&nbsp;</span>Statement stmt=null;<br />
</span><span>&nbsp;&nbsp; </span><span>ResultSet</span> <span>rs</span>=null;<br />
</span><span>&nbsp;&nbsp; </span><span>try</span><span>&nbsp;&nbsp; </span>{<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span><span>ctx</span><span>=</span>new <span>InitialContext</span>();<br />
</span><span>&nbsp;&nbsp;&nbsp; </span>if(<span>ctx</span>==null) throw new Exception("</span><span>没有匹配的环境</span><span>");<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span>DataSource</span> <span>ds</span><span>=(</span><span>DataSource</span>)<span>ctx.lookup</span>("<span>java:comp/env/jdbc/connectDB</span>");<br />
</span><span>&nbsp;&nbsp;&nbsp; </span>if(<span>ds</span>==null) throw new Exception("</span><span>没有匹配数据库</span><span>");<span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span>&nbsp;&nbsp; </span><span><span>cnn</span><span>=</span><span>ds.getConnection</span>();<span>&nbsp;&nbsp;&nbsp; </span>stmt=<span>cnn.createStatemen</span>(<span>ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY</span>); <br />
</span><span>String <span>sql</span>="select * from <span>blog_user</span>"; <br />
</span><span><span><span>rs</span></span><span><span>=</span><span><span>stmt.executeQuery</span><span>(<span>sql</span>); <br />
</span><span>&lt;%<span>out.print</span>("</span><span>数据库操作成功，恭喜你</span><span>");%&gt; <br />
</span><span>&lt;%<br />
</span><span><span>}catch</span><span>(Exception <span>ee</span>){<br />
</span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span><span>System.out.println</span><span>(</span>"connect db <span>error:"+ee.getMessage</span>());<br />
</span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span> false;<br />
</span><span>}</span><span><span>finally<br />
</span><span>&nbsp;&nbsp; </span>{<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span>if(</span><span>rs</span>!=null)<span>rs.close</span>();<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span>if(</span>stmt!=null)<span>stmt.close</span>();<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span>if(</span><span>cnn</span>!=null)<span>cnn.close</span>();<br />
</span><span>&nbsp;&nbsp;&nbsp; </span><span>if(</span><span>ctx</span>!=null)<span>ctx.close</span>();<br />
</span><span>&nbsp;&nbsp; </span>} <br />
</span><span>%&gt; <br />
</span><span>&lt;/body&gt; <br />
</span><span>&lt;/html&gt;</span></p>
</div>
</div>
<p><br />
&nbsp;</p>
</span></span><span></span>
<img src ="http://www.blogjava.net/PariScamper/aggbug/151574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-09 23:10 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/09/151574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat启动时出现java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor的解决方法</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/09/151557.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Tue, 09 Oct 2007 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/09/151557.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/151557.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/09/151557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/151557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/151557.html</trackback:ping><description><![CDATA[<div>在使用Spring的AOP编程时，会用到这几个lib：<br />
asm-2.2.2.jar<br />
asm-commons-2.2.2.jar<br />
asm-util-2.2.2.jar</div>
<div>Hibernate使用如下lib：</div>
<div>asm.jar<br />
asm-attrs.jar</div>
<div>其中asm-2.2.2.jar与asm.jar存在类上的冲突！！！<br />
使用其中之一或两者都使用，可能会出现如下错误：<br />
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor<br />
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor<br />
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。<br />
解决办法是：<br />
1.去掉类路径上的关于Hibernate的3个lib<br />
asm.jar<br />
asm-attrs.jar<br />
cglib-2.1.3.jar<br />
2.加入Spring中的以下4个lib<br />
asm-2.2.2.jar<br />
asm-commons-2.2.2.jar<br />
asm-util-2.2.2.jar<br />
cglib-nodep-2.1_3.jar<br />
</div>
<img src ="http://www.blogjava.net/PariScamper/aggbug/151557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-09 22:22 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/09/151557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web应用下文件路径问题</title><link>http://www.blogjava.net/PariScamper/archive/2007/10/09/151524.html</link><dc:creator>PariScamper</dc:creator><author>PariScamper</author><pubDate>Tue, 09 Oct 2007 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/PariScamper/archive/2007/10/09/151524.html</guid><wfw:comment>http://www.blogjava.net/PariScamper/comments/151524.html</wfw:comment><comments>http://www.blogjava.net/PariScamper/archive/2007/10/09/151524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/PariScamper/comments/commentRss/151524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/PariScamper/services/trackbacks/151524.html</trackback:ping><description><![CDATA[<p>一般我们把文件比如名叫proxool.xml放在src目录下，这样deploy的时候myeclipse会自动拷贝到WEB-INF\classes\目录下，如果代码中需要对文件进行访问，那么如何在web应用中得到该文件路径呢?<br />
可以<br />
String path=HibernateException.class.getClassLoader().getResource("/proxool.xml").getPath();<br />
但没有部署直接在myeclipse下debug时，这样得到的path会出现错误，此时可以将path设为绝对路径进行。</p>
<img src ="http://www.blogjava.net/PariScamper/aggbug/151524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/PariScamper/" target="_blank">PariScamper</a> 2007-10-09 20:14 <a href="http://www.blogjava.net/PariScamper/archive/2007/10/09/151524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>