以下异常可能很多人都会碰到,而网上很多解决办法都说得不尽然。
2008-12-28 22:48:46 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter ssi
java.lang.SecurityException: Filter of class org.apache.catalina.ssi.SSIFilter is privileged and cannot be loaded by this web application
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Tomcat 6.×里默认ssi配置是注释掉的,要使用SSI,必须去掉该注释。SSI有servlet和filter两种配置。用SSI servlet的话,去掉SSI servlet和servlet mapping的注释。若是用SSI Filter,则要修改三个地方:
- 去掉filter ssi的注释,;
- 去掉ssi filter mapping的注释,;
- 去掉filter ssi mime mapping的注释。
最后关键一步:
修改tomcat_home/conf/context.xml文件里的context标签:
原:
<Context>
修改为
<Context privileged="true">
重启tomcat就ok了。这样也就不必为具体的app里配置context去使用SSI功能了。
此配置在Tomcat 6.0.18版本里通过。
简单SSI测试例子:
index.shtml
<html>
<head/>
<body>
welcome to my site!
Now is <!--#echo var="DATE_LOCAL"-->.
</body>
</html>
而象网上说需要将server/lib/servlet-ssi.renametojar改名为servlet-ssi.jar则有点莫明其妙,因为有些版本里(比如最新的6.0.18)catalina.jar里已经包含了原来servlet-ssi.jar里的class文件,因此网上某些配置应该针对某些版本而言。