簡體   English   中英

Tuckey UrlRewrite:更改urlrewrite.xml后的ClassNotFoundException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM