﻿<?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-&lt;b&gt;BeanSoft's Java Blog&lt;/b&gt;-随笔分类-Tomcat</title><link>http://www.blogjava.net/beansoft/category/26856.html</link><description>免费电子书/视频&lt;a href="http://www.blogjava.net/beansoft/archive/2008/08/17/222589.html"&gt;《MyEclipse 6 Java 开发中文教程》&lt;/a&gt;作者刘长炯官方博客  专注于 Java 企业级应用</description><language>zh-cn</language><lastBuildDate>Thu, 26 Nov 2009 00:51:03 GMT</lastBuildDate><pubDate>Thu, 26 Nov 2009 00:51:03 GMT</pubDate><ttl>60</ttl><item><title>tomcat内存溢出总结（转）</title><link>http://www.blogjava.net/beansoft/archive/2009/11/02/300662.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 02 Nov 2009 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2009/11/02/300662.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/300662.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2009/11/02/300662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/300662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/300662.html</trackback:ping><description><![CDATA[<p><a title="http://www.beckdim.cn/?p=110" href="http://www.beckdim.cn/?p=110">http://www.beckdim.cn/?p=110</a></p> <p>&nbsp;</p> <p>在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的，当然处理方式也不一样。<br>这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.OutOfMemoryError: Java heap space<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.OutOfMemoryError: PermGen space<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.OutOfMemoryError: unable to create new native thread.<br>对于前两种情况，在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。（-Xms -Xmx -XX:PermSize&nbsp; -XX:MaxPermSize）<br>最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。<br>第一种：是堆溢出。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在JVM中如果98％的时间是用于GC且可用的 Heap size 不足2％的时候将抛出此异常信息。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有内存泄露的情况下，调整-Xms -Xmx参数可以解决。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xms:初始堆大小 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xmx:最大堆大小 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但堆的大小受下面三方面影响：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.相关操作系统的数据模型（32-bt还是64-bit）限制；（32位系统下，一般限制在1.5G~2G；我在2003 server 系统下（物理内存：4G和6G，jdk：1.6）测试 1612M，64为操作系统对内存无限制。）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.系统的可用虚拟内存限制；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.系统的可用物理内存限制。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 堆的大小可以使用 java -Xmx***M&nbsp; version 命令来测试。支持的话会出现jdk的版本号，不支持会报错。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m <p>第二种：永久保存区域溢出<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域，它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。但目前的hibernate和spring项目中也很容易出现这样的问题。<a href="http://www.javaeye.com/topic/80620?page=1">http://www.javaeye.com/topic/80620?page=1</a> 的帖子有讨论的这个问题。可能是由于这些框架会动态class，而且jvm的gc是不会清理PemGen space的，导致内存溢出。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一个一般是加大-XX:PermSize&nbsp; -XX:MaxPermSize 来解决问题。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -XX:PermSize 永久保存区域初始大小<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -XX:PermSize 永久保存区域初始最大值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一般结合第一条使用，比如 set JAVA_OPTS= -Xms1024m -Xmx1024m&nbsp; -XX:PermSize=128M -XX:PermSize=256M<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有一点需要注意：java -Xmx***M&nbsp; version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G，那&nbsp; -Xmx1024m&nbsp; -XX:PermSize=768M 是无法运行的。<br>第三种：无法创建新的线程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这种现象比较少见，也比较奇怪，主要是和jvm与系统内存的比例有关。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G)，并且它至少要占用可用内存的一半。有人发现，在线程个数很多的情况下，你分配给JVM的内存越多，那么，上述错误发生的可能性就越大。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 产生这种现象的原因如下（<a href="http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html">从这个blog中了解到原因：http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html</a>）： <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每一个32位的进程最多可以使用2G的可用内存，因为另外2G被操作系统保留。这里假设使用1.5G给JVM，那么还余下500M可用内存。这500M内存中的一部分必须用于系统dll的加载，那么真正剩下的也许只有400M，现在关键的地方出现了：当你使用Java创建一个线程，在JVM的内存里也会创建一个Thread对象，但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范)，操作系统会在余下的400兆内存里创建这个物理线程，而不是在JVM的1500M的内存堆里创建。在jdk1.4里头，默认的栈大小是256KB，但是在jdk1.5里头，默认的栈大小为1M每线程，因此，在余下400M的可用内存里边我们最多也只能创建400个可用线程。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样结论就出来了，要想创建更多的线程，你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。 <p>给出一个有关能够创建线程的最大个数的估算公式： <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于jdk1.5而言，假设操作系统保留120M内存：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在2000/XP/2003的boot.ini里头有一个启动选项，好像是：<strong>/PAE /3G</strong> ，可以让用户进程最大内存扩充至3G，这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此这种情况需要结合操作系统进行相关调整。 <p>因此：我们需要结合不同情况对tomcat内存分配进行不同的诊断才能从根本上解决问题。 <p>参考资料（从这些资料中受益良多）：<br><a href="http://www.javaeye.com/topic/80620?page=1">http://www.javaeye.com/topic/80620?page=1</a><br><a href="http://ggmm.blog.sohu.com/117545379.html">http://ggmm.blog.sohu.com/117545379.html</a><br><a href="http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html">http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html</a><br><a href="http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html">http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html</a> <p>from:http://www.blogjava.net/george/archive/2009/08/18/291579.html</p><img src ="http://www.blogjava.net/beansoft/aggbug/300662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2009-11-02 11:56 <a href="http://www.blogjava.net/beansoft/archive/2009/11/02/300662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.net.SocketException: Too many open files 问题的解决办法</title><link>http://www.blogjava.net/beansoft/archive/2009/11/02/300661.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 02 Nov 2009 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2009/11/02/300661.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/300661.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2009/11/02/300661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/300661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/300661.html</trackback:ping><description><![CDATA[<p>Oct 31, 2009 8:14:25 AM org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket<br>WARNING: Reinitializing ServerSocket<br>Oct 31, 2009 8:14:25 AM org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket<br>SEVERE: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080] ignored exception: java.net.SocketException: Too many open files<br>java.net.SocketException: Too many open files<br>&nbsp;&nbsp;&nbsp; at java.net.PlainSocketImpl.socketAccept(Native Method)<br>&nbsp;&nbsp;&nbsp; at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)<br>&nbsp;&nbsp;&nbsp; at java.net.ServerSocket.implAccept(ServerSocket.java:450)<br>&nbsp;&nbsp;&nbsp; at java.net.ServerSocket.accept(ServerSocket.java:421)<br>&nbsp;&nbsp;&nbsp; at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)<br>&nbsp;&nbsp;&nbsp; at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:408)<br>&nbsp;&nbsp;&nbsp; at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:71)<br>&nbsp;&nbsp;&nbsp; at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)<br>&nbsp;&nbsp;&nbsp; at java.lang.Thread.run(Thread.java:595) <p>这是Tomcat报的错误， Google一把，看到如下解释： <p><a title="http://www.cnitblog.com/rd416/archive/2008/08/07/47724.aspx" href="http://www.cnitblog.com/rd416/archive/2008/08/07/47724.aspx">http://www.cnitblog.com/rd416/archive/2008/08/07/47724.aspx</a> <p>linux 上tomcat 服务器抛出socket异常“文件打开太多”的问题 <br>java.net.SocketException: Too many open files<br>at java.net.PlainSocketImpl.socketAccept(Native Method)<br>at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)<br>at java.net.ServerSocket.implAccept(ServerSocket.java:450)<br>at java.net.ServerSocket.accept(ServerSocket.java:421)<br>at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)<br>at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)<br>at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)<br>at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)<br>at java.lang.Thread.run(Thread.java:595) <p>原本以为是tomcat的配置或是应用本身的问题，"谷歌"一把后才发现，该问题的根本原因是由于系统文件资源的限制导致的。 <p>具体可以参考<a href="http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html">http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html</a><br>的说明。具体的解决方式可以参考一下：<br>1。ulimit -a 查看系统目前资源限制的设定。<br>&nbsp;&nbsp; [root@test security]# umlimit -a <br>-bash: umlimit: command not found<br>[root@test security]# ulimit -a<br>core file size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (blocks, -c) 0<br>data seg size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -d) unlimited<br>file size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (blocks, -f) unlimited<br>max locked memory&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -l) unlimited<br>max memory size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -m) unlimited<br>open files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-n) 1024<br>pipe size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (512 bytes, -p) 8<br>stack size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -s) 8192<br>cpu time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (seconds, -t) unlimited<br>max user processes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-u) 7168<br>virtual memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -v) unlimited<br>[root@test security]# <br>通过以上命令，我们可以看到open files 的最大数为1024<br>那么我们可以通过一下命令修改该参数的最大值<br>2. ulimit -n 4096<br>[root@test security]# ulimit -n 4096<br>[root@test security]# ulimit -a<br>core file size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (blocks, -c) 0<br>data seg size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -d) unlimited<br>file size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (blocks, -f) unlimited<br>max locked memory&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -l) unlimited<br>max memory size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -m) unlimited<br>open files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-n) 4096<br>pipe size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (512 bytes, -p) 8<br>stack size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -s) 8192<br>cpu time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (seconds, -t) unlimited<br>max user processes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-u) 7168<br>virtual memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kbytes, -v) unlimited <p>这样我们就修改了系统在同一时间打开文件资源的最大数，基本解决以上问题。 <p>以上部分是查找网络上的解决方法。设置了之后段时间内有作用。 <p>后来仔细想来，问题还是要从根本上解决，于是把以前的代码由认真地看了一遍。终于找到了，罪魁祸首。 <p>在读取文件时，有一些使用的BufferedReader 没有关闭。导致文件一直处于打开状态。造成资源的严重浪费。 <p>修改之后的简单代码如下： <p>public void test(){<br>&nbsp;&nbsp;&nbsp; BufferedReader reader =null;<br>try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader = 读取文件;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = "";<br>while( ( ine=reader.readLine())!=null){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其他操作<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; } catch (IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br>&nbsp;&nbsp;&nbsp; } finally{&nbsp; <br>if(reader !=null){<br>try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>} <p>以上只是我的个人见解，希望对大家有所帮助。</p><img src ="http://www.blogjava.net/beansoft/aggbug/300661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2009-11-02 11:55 <a href="http://www.blogjava.net/beansoft/archive/2009/11/02/300661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 5.5 + 通配符SSL证书详细操作指南(图文)</title><link>http://www.blogjava.net/beansoft/archive/2009/10/16/298544.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 16 Oct 2009 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2009/10/16/298544.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/298544.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2009/10/16/298544.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/298544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/298544.html</trackback:ping><description><![CDATA[<p>Tomcat 5.5 + 通配符 SSL 证书详细操作指南(图文)</p> <p>本文讲述如何生成通配符 SSL 证书, 以及如何在 Tomcat 中进行配置 SSL 并映射单个域名到<br>指定的应用, 以及如何同时启用 HTTPS 和 HTTP 的端口监听.<br>环境: Windows XP / Cent OS 5, Tomcat 5.5, JDK 1.5/1.6<br>刘长炯 beansoft@126.com<br><a href="http://beansoft.blogjava.net/">http://beansoft.blogjava.net/</a><br>2009-10-16 </p> <p> 笔误已更正.</p> <p>在线阅读:</p> <p><a title="http://docs.google.com/fileview?id=0BzyDlAG7SpHqMDIxN2Y5ZWEtNzg1Mi00MDNiLWEyMTEtM2IwNWY4MzU2Yzcz&amp;hl=zh_CN" href="http://docs.google.com/fileview?id=0BzyDlAG7SpHqMDIxN2Y5ZWEtNzg1Mi00MDNiLWEyMTEtM2IwNWY4MzU2Yzcz&amp;hl=zh_CN">http://docs.google.com/fileview?id=0BzyDlAG7SpHqMDIxN2Y5ZWEtNzg1Mi00MDNiLWEyMTEtM2IwNWY4MzU2Yzcz&amp;hl=zh_CN</a></p> <p>下载:</p> <p>地址1 <a title="下载 (491K)" href="http://docs.google.com/uc?export=download&amp;id=0BzyDlAG7SpHqMDIxN2Y5ZWEtNzg1Mi00MDNiLWEyMTEtM2IwNWY4MzU2Yzcz">下载 (491K)</a></p> <p>地址2 <a href="http://tomcatmonitor.googlecode.com/files/Tomcat%205.5%20%2B%20%E9%80%9A%E9%85%8D%E7%AC%A6SSL%E8%AF%81%E4%B9%A6%E8%AF%A6%E7%BB%86%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.pdf"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://www.gstatic.com/codesite/ph/images/dl_arrow.gif"></a> <a href="http://tomcatmonitor.googlecode.com/files/Tomcat%205.5%20%2B%20%E9%80%9A%E9%85%8D%E7%AC%A6SSL%E8%AF%81%E4%B9%A6%E8%AF%A6%E7%BB%86%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.pdf">Tomcat 5.5 + 通配符SSL证书详细操作指南.pdf</a>&nbsp;&nbsp; 491 KB</p> <p>内容预览:</p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5.5SSL_A8CA/gview_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="gview" border="0" alt="gview" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5.5SSL_A8CA/gview_thumb.png" width="800" height="1132"></a></p><img src ="http://www.blogjava.net/beansoft/aggbug/298544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2009-10-16 12:01 <a href="http://www.blogjava.net/beansoft/archive/2009/10/16/298544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 5和WebLogic 8数据源的配置和使用</title><link>http://www.blogjava.net/beansoft/archive/2008/06/04/205944.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 04 Jun 2008 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/06/04/205944.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/205944.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/06/04/205944.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/205944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/205944.html</trackback:ping><description><![CDATA[<p>本文为原创作品，转载请注明作者：BeanSoft（刘长炯）和出处。</p> <p>&nbsp;</p> <h3> <p><a href="#_Toc200384317"></a></p><a name="_Toc200384316">Weblogic</a>数据源配置</h3> <p>启动服务器和数据库. <p>进入控制台,选择左侧组件树的 Services &gt; JDBC &gt; Connection Pools <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image002_2.jpg"><img border="0" alt="clip_image002" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image002_thumb.jpg" width="554" height="130"></a> <p>选择数据库类型 <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image004_2.jpg"><img border="0" alt="clip_image004" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image004_thumb.jpg" width="553" height="331"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image006_2.jpg"><img border="0" alt="clip_image006" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image006_thumb.jpg" width="554" height="273"></a> <p>定义连接属性(URL等) <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image008_2.jpg"><img border="0" alt="clip_image008" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image008_thumb.jpg" width="548" height="567"></a> <p>测试数据库连接 <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image010_2.jpg"><img border="0" alt="clip_image010" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image010_thumb.jpg" width="553" height="529"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image012_2.jpg"><img border="0" alt="clip_image012" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image012_thumb.jpg" width="456" height="364"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image014_2.jpg"><img border="0" alt="clip_image014" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image014_thumb.jpg" width="554" height="131"></a> <p>连接池配置结束. 连接池在JNDI上没有显示信息. <p>配置数据源绑定到JNDI上. <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image016_2.jpg"><img border="0" alt="clip_image016" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image016_thumb.jpg" width="515" height="169"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image018_2.jpg"><img border="0" alt="clip_image018" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image018_thumb.jpg" width="553" height="281"></a> <p>JNDI 路径区分大小写 <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image020_2.jpg"><img border="0" alt="clip_image020" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image020_thumb.jpg" width="553" height="201"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image022_2.jpg"><img border="0" alt="clip_image022" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image022_thumb.jpg" width="554" height="235"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image024_2.jpg"><img border="0" alt="clip_image024" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image024_thumb.jpg" width="554" height="181"></a> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image026_2.jpg"><img border="0" alt="clip_image026" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image026_thumb.jpg" width="554" height="187"></a> <p>发布成功后可以在JSP/Servlet/Web模块中的Java类中访问数据源: <p>&lt;%@ page language="java" import="java.sql.*" pageEncoding="GBK"%&gt; <p>JNDI 数据源测试: <p>&lt;% <p>javax.naming.InitialContext ctx = <b>new</b> javax.naming.InitialContext ();// 打开 JNDI 树 <p>javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/oracle");// 找文件, JNDI 路径区分大小写 <p>Connection conn = ds.getConnection(); <p>out.println(conn.getMetaData().getDatabaseProductName());// 数据库版本 <p>Statement stmt = conn.createStatement(); <p>ResultSet rs = stmt.executeQuery("select * from student"); <p><b>while</b>(rs != <b>null</b> &amp;&amp; rs.next()) { <p>out.println(rs.getString(2) + "&lt;br&gt;"); <p>} <p>rs.close(); <p>stmt.close(); <p>conn.close(); <p>%&gt; <p>连接 SQL Server无法JDBC连接的问题: 安装 Sqlserver SP3, 或者启用TCP/IP. <p>如果Weblogic没带驱动, 需要修改启动脚本: <p>C:\bea\user_projects\domains\mydomain\startWebLogic.cmd <p>et CLASSPATH=%WEBLOGIC_CLASSPATH%;%POINTBASE_CLASSPATH%;%JAVA_HOME%\jre\lib\rt.jar;%WL_HOME%\server\lib\webservices.jar;%CLASSPATH% <p>加入自己的JDBC驱动jar即可到最后即可 <p>&nbsp; <p>而在MyEclipse里启动需要配置Server的属性中的类路径: <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image028_2.jpg"><img border="0" alt="clip_image028" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image028_thumb.jpg" width="554" height="368"></a> <h4><a name="_Toc200384317">Tomcat </a>数据源的配置</h4> <p>1. 将JDBC驱动jar放入 TOMCAT安装目录/common/lib 下面,例如 ojdbc14.jar; <p>2. 在项目的WebRoot/META-INF/创建文件 context.xml, 里面写入 Datasource 配置信息: <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image030_2.jpg"><img border="0" alt="clip_image030" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/Tomcat5WebLogic8_14862/clip_image030_thumb.jpg" width="209" height="272"></a> <p>context.xml文件写法 <p>&lt;Context&gt; <p>&lt;!-- 配置名为 dstest 的数据库连接池 --&gt; <p>&lt;Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource" <p>maxActive="10" maxIdle="30" maxWait="10000" <p>username="scott" password="tiger" driverClassName="oracle.jdbc.OracleDriver" <p>url="jdbc:oracle:thin:@127.0.0.1:1521:ZKTB"/&gt; <p>&lt;/Context&gt; <p>访问代码: <p>&lt;%@ page language="java" import="java.sql.*" pageEncoding="GBK"%&gt; <p>JNDI 数据源测试: <p>&lt;% <p>javax.naming.InitialContext ctx = <b>new</b> javax.naming.InitialContext ();// 打开 JNDI 树 <p>//javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/oracle");// 找文件 <p>javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("<b>java:comp/env/</b>jdbc/oracle");// Tomcat 访问 JNDI java:comp/env/ <p>Connection conn = ds.getConnection(); <p>out.println(conn.getMetaData().getDatabaseProductName());// 数据库版本 <p>Statement stmt = conn.createStatement(); <p>ResultSet rs = stmt.executeQuery("select * from student"); <p><b>while</b>(rs != <b>null</b> &amp;&amp; rs.next()) { <p>out.println(rs.getString(2) + "&lt;br&gt;"); <p>} <p>rs.close(); <p>stmt.close(); <p>conn.close(); <p>%&gt;</p><img src ="http://www.blogjava.net/beansoft/aggbug/205944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-06-04 23:34 <a href="http://www.blogjava.net/beansoft/archive/2008/06/04/205944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置并运行 Tomcat 服务器(入门整理)</title><link>http://www.blogjava.net/beansoft/archive/2007/07/19/131286.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 19 Jul 2007 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/19/131286.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/131286.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/19/131286.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/131286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/131286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/07/19/131286.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/131286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-19 16:24 <a href="http://www.blogjava.net/beansoft/archive/2007/07/19/131286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sysdeo Eclipse Tomcat 3.2.1 插件中文版下载</title><link>http://www.blogjava.net/beansoft/archive/2007/06/18/124894.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 18 Jun 2007 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/06/18/124894.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/124894.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/06/18/124894.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/124894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/124894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简体中文版下载(无需原版): tomcatPluginV321_zh_CN.zip 281KB 此次汉化的是最新版: 3.2.1 tomcatPluginV321.zip  2007.05.10 兼容 Eclipse 3.1, 3.2 and 3.3M7, 修正了一个配合 HTTPS 的问题<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/06/18/124894.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/124894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-06-18 10:31 <a href="http://www.blogjava.net/beansoft/archive/2007/06/18/124894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>