tomcat开启CG
1.context.xml配置
<Context privileged="true"><!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
2.web.xml配置
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
3.tomcat6.conf 配置
tomcat启动报错No UserDatabase component found under key UserDatabase
tomcat启动后,发现网页无法打开,查看tomcat进程发现进程在,又查看tomcat启动日志显示正常启动,各种可能情况排查一遍后,发现tomcat-users.xml文件大小为零-----tomcat启动后tomcat-users.xml内容丢失了。把tomcat-users.xml重新拷贝过来,重启tomcat,问题解决了。但是tomcat-users.xml为什么会内容丢失那?
这个问题很久之前就出现过,之前感觉就是tomcat 的bug,偶尔遇到并不是常态,所以也没太关注,但最近一周连续出现了两次,领导开催了必须得有个解决办法,看来是得深入研究下啦!
网络上搜索了一下相关内容,发现这篇博客http://blog.youkuaiyun.com/spy2000/article/details/3891059 说的也是内容丢失的问题,他的结论是:将Tomcat6解压缩后,要将tomcat-users.xml文件<tomcat-users>标签内容里的注释符号删除,否则一旦运行,该标签内被注释的内容将被清空。这篇博客讲的是常态问题,丢失的内容只是<tomcat-users>标签里面的内容,而不是整个tomcat-users.xml里面的内容,作者没有深入研究为什么标签内有注释标签中内容就会丢失。
搜索了小半天发现网络上没有我这个情况,没办法只能先自已思考一下了。
先来个测试,在tomcat-users.xml里面加入一些空行,重启tomcat后发现tomcat-users.xml文件里面的空行没了,说明tomcat重启时重写了tomcat-users.xml文件,于是想了一个办法,把tomcat-users.xml文件的权限改成只读文件不就行了,于是chmod 444 (Linux下)权限设成-r--r--r--,满怀希望的重启tomcat,结果发现我想多了,tomcat-users.xml文件权限又恢复成了-rw-r--r--,tomcat-users.xml文件还是被重写了。
看来得搞清楚tomcat加载tomcat-users.xml文件逻辑才行,搜索了一下发现是这样的:
tomcat启动的时候:
1、首先读取conf/tomcat-users.xml
2、然后将tomcat-users.xml文件中的内容写到一个新的文件tomcat-users.xml.new 中
3、最后将tomcat-users.xml.new 文件重命名为tomcat-users.xml
看来我这里遇到的问题应该是tomcat在写tomcat-users.xml.new里出错,内容没有写入,这个是非常态问题,偶尔遇到一次也是没有办法的(那个仁兄如果知道问题所在烦请告知一下,不胜感激!)
当然这样是没法跟领导交差的!
只能去想想tomcat加载tomcat-users.xml为什么要这么做?可不可以不这么做?带着这个问题无奈之下查看了tomcat的官方文档,终于查到了端倪所在:
http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html#UserDatabase_Resources
在讲解UserDatabase Resources一节中讲到:
tomcat-users.xml这个文件默认是非只读的,这种情况下这个文件在tomcat启动时会被重写,这种设置只要是在安全方面考虑的。如果不想tomcat这样做可以设置readonly为true。
赶紧测试一下,发现readonly为true后,tomcat果然不重写tomcat-users.xml文件,不重写当然也不会出意外造成内容丢失啦!问题解决!
具体修改位置,在conf/server.xml文件中找到GlobalNamingResources容器配置,在Resource中加入readonly="true",如下: