【发布时间】:2015-04-26 19:49:59
【问题描述】:
我希望能够在不重新启动服务器的情况下更改 urlrewrite.xml 中的规则。
我正在运行 Tomcat 7。在 web.xml 我有...
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>120</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>INFO</param-value>
</init-param>
</filter>
当我更改 urlrewrite.xml 中 <to> 元素的值时,尝试执行该规则会导致异常。
java.lang.ClassNotFoundException: org.apache.jsp.s1.content.about_002dus_jsp 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:145) 在 org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.tukey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 在 org.tukey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 在 org.tukey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 在 org.tukey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) 在 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) 在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) 在 org.tukey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213) 在 org.tukey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171) 在 org.tukey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 在 org.tukey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 在 org.tukey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 au.com.pawsforlife.vizsla.controller.UserFilter.doFilter(UserFilter.java:81) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
有谁知道为什么会发生这种情况,或者至少如何解决?
谢谢!
【问题讨论】:
-
tomcat 中的一部分保留了对已编译 JSP 的引用,但清除了编译器输出目录。您对
urlrewrite.xml所做的更改很可能导致了这种行为。看看tomcat.apache.org/tomcat-7.0-doc/config/…(调整context.xml,特别是reloadable)是否能帮到你。 -
你也可以添加你的 urlrewrite.xml 吗?
标签: java tomcat tomcat7 tuckey-urlrewrite-filter urlrewriter