Таки UrlRewrite: ClassNotFoundException после изменения 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>

Когда я изменяю значение элемента <to> в urlrewrite.xml, попытка выполнить это правило вызывает исключение.

Кто-нибудь знает, почему так происходит, или хотя бы как исправить?

Спасибо!

Я думаю, что это неправильный способ динамически изменять правила. Проверьте раздел Расширение UrlRewriteFilter в разделе руководство по эксплуатации.


person WoodenKitty    schedule 24.02.2015    source источник
comment
Можете ли вы также добавить свой urlrewrite.xml?   -  person mp911de    schedule 05.06.2015
comment
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.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:354) в org.apache.jasper.servlet.JasperLoader.loadClass (JasperLoader.java:132) в org. jasper.servlet.JasperLoader.loadClass (JasperLoader.java:63) в org.apache.catalina.core.DefaultInstanceManager.newInstance (DefaultInstanceManager.java:145) в org.apache.jasper.servlet.JspServletServletWrapper ( 172) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:369) в org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:390) в org.apachelet.jas .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.catser.apache.t .WsFilter.doFilter (WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) в org.apache.catalina.core.ApplicationFilterChain.doFilter.hain.dojava8ha (Приложение) org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite (RuleChain.java:176) на org.tuckey.web.filters.urlrewrite.RuleChain.doRules (RuleChain.java:145) на org.filters. urlrewrite.UrlRewriter.processRequest (UrlRewriter.java:92) в org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter (UrlRewriteFilter.java:389) в org.apache.catalina.core.Java: 389 241) в org.apache.catalina.core.Applica tionFilterChain.doFilter (ApplicationFilterChain.java:208) в org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:748) в org.apache.catalina.core.ApplicationDispatcher.processRequest (javaDispatcher.processRequest (javaDispatcher) или в ApplicationDispatcher.processRequest (javaDispatcher) .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.RuleChale 145) по адресу org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest (UrlRewriter.java:92) по адресу org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter (UrlRewriteFilter.catalgain:389) .core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в au.com.pawsforlife.vizsla.controller.controller.doFilter : 81) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.core.apache. StandardWrapperValve.invoke (StandardWrapperValve.java:2 20) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:122) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:501) на org.apache.catalina.core.Stal .invoke (StandardHostValve.java:171) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java. org:950) apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) в org.apache.coyote.http11.Abstractor.process11.Abstractor.process 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)   -  person melis    schedule 11.06.2015


Ответы (2)


Вместо тега rule следует использовать class-rule. Вы указываете класс, который будет динамически загружать правила из ресурса.

У них есть пример простое правило.

Таким образом, вы не можете просто изменить XML-файл, вам нужно загрузить среду выполнения правил, таким образом вы можете загрузить любые правила перед перезаписью.

У меня было подобное исключение в прошлом, но я не помню подробностей. Вот почему я делюсь своими примерами urlrewrite.xml и web.xml из простого проекта. Я надеюсь, что это помогает. urlrewrite.xml:

person gaRos    schedule 05.06.2015

web.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>

Я также помню, что у меня было еще одно исключение. Я исправил удаление лишней строки перед первой строкой

 <?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>

из моего web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?> 

Часть в tomcat сохраняет ссылку на скомпилированный JSP, но очищает выходной каталог компилятора. Скорее всего, такое поведение вызвало изменение, которое вы сделали в

  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>
. Проверьте, действительно ли tomcat.apache.org/tomcat-7.0- doc / config / (настройка context.xml, в частности reloadable) может вам помочь.

person melis    schedule 11.06.2015