2015-02-24 11 views
8

Я хочу, чтобы иметь возможность изменять правила в urlrewrite.xml без перезапуска сервера.Tuckey UrlRewrite: ClassNotFoundException после смены 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, пытаясь выполнить это правило вызывает исключение.

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.Defau ltInstanceManager.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.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.UrlRe writeFilter.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) at org.apache.catalina.core.ApplicationDispatcher.forward (ApplicationDispatcher.java:338) at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite (NormalRewrittenUrl.java:213) at 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) на org.tuckey.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.va lves.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) в орг .apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:314) at 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)

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

Спасибо!

+0

Часть в tomcat хранит ссылку на скомпилированные JSP, но очищает выходной каталог компилятора. Скорее всего, изменение, которое вы сделали для 'urlrewrite.xml', вызвало такое поведение. Проверьте, может ли помочь https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Common_Attributes (настройка context.xml, в частности перезагружаемая). – mp911de

+0

Можете ли вы добавить свой urlrewrite.xml? – melis

ответ

4

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

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

У них есть пример simple rule.

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

3

У меня было подобное исключение в прошлом, но я не помню деталей. Вот почему я делюсь своими примерами 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"?> 

с моего веб-сайта.

 Смежные вопросы

  • Нет связанных вопросов^_^