[英]Tuckey UrlRewrite: ClassNotFoundException after changing urlrewrite.xml
我希望能夠在不重新啟動服務器的情況下更改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.net.URLClassLoader.findClass(URLClassLoader.java:354)在org.apache java.security.AccessController.doPrivileged(本機方法)在org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132)。 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:145)中的jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)位於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)位於org.apache.catalina.core.ApplicationFilterChain.internalD的javax.servlet.http.HttpServlet.service(HttpServlet.java:727) oFilter(ApplicationFilterChain.java:303)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)在組織.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite (RuleChain.java:176)在org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)在org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)在org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389)位於org.apache.catalina.core.ApplicationFilterChain的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)。 doFilter(ApplicationFilterChain.java:208)在org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa) tcher.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.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)在org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain的.java:171)在org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)在org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)在有機tgkey.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)at au.com.pawsforlife.vizsla.controller.UserFilter.doFilter(UserFilter.java:81)at或 g.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。進程(AbstractHttp11Processor.java:1070)org.apache.coyote.AbstractProtocol $ AbstractCon nectionHandler.process(AbstractProtocol.java:611)在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:314)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run (Thread.java:745)
有誰知道為什么會這樣,或至少如何解決它?
謝謝!
我認為這不是動態修改規則的正確方法。 檢查手冊中的Extending UrlRewriteFilter部分。
您應該使用class-rule
而不是rule
標記。 您指定一個類,它將從資源動態加載規則。
他們有一個簡單規則的例子。
所以基本上你不能簡單地修改XML文件,你必須加載規則運行時,這樣你就可以在重寫之前加載任何規則。
我過去也有類似的例外,但我不記得細節。 這就是我從一個簡單的項目中分享我的urlrewrite.xml和web.xml示例的原因。 我希望它有所幫助。 urlrewrite.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
3 "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
4
5 <!--
6
7 Configuration file for UrlRewriteFilter
8 http://www.tuckey.org/urlrewrite/
9
10 -->
11 <urlrewrite>
12
13 <rule>
14 <from>^/OA_HTML/(.*)$</from>
15 <to type="redirect">/tuckeyUrl/$1</to>
16 </rule>
17
78 </urlrewrite>
web.xml中:
<?xml version="1.0" encoding="ISO-8859-1"?>
2
3 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
6 version="2.4">
7
8 <filter>
9 <filter-name>UrlRewriteFilter</filter-name>
10 <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
11 </filter>
12 <filter-mapping>
13 <filter-name>UrlRewriteFilter</filter-name>
14 <url-pattern>/*</url-pattern>
15 <dispatcher>REQUEST</dispatcher>
16 <dispatcher>FORWARD</dispatcher>
17 </filter-mapping>
39 </web-app>
我還記得我有另一個例外。 我修復了在第一行之前刪除額外的行
<?xml version="1.0" encoding="ISO-8859-1"?>
來自我的web.xml。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.