Как получить фильтры сервлетов, чтобы остановить загрузку при запуске приложения в Tomcat? - PullRequest
1 голос
/ 17 августа 2010

Ниже приведен мой дескриптор развертывания. Я использую Spring MVC, но у меня есть фильтр перезаписи URL, который должен работать, а затем пересылать на соответствующий контроллер. По какой-то причине этот фильтр загружается при запуске, пытается преобразовать путь и генерирует исключение nullpointerexception, потому что пути нет. Я никогда не знал, фильтры загружаются при запуске, но похоже, что происходит.

<!-- SERVLETS -->

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/index.html</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- FILTERS -->

<filter>
    <filter-name>URLRewriteFilter</filter-name>
    <filter-class>com.ecomm.filters.URLRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>URLRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

EDIT:

Aug 17, 2010 11:28:12 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
    at com.ecomm.helpers.TranslateURLHelper.executeController(TranslateURLHelper.java:47)
    at com.ecomm.filters.URLRewriteFilter.doFilter(URLRewriteFilter.java:41)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

Ответы [ 3 ]

5 голосов
/ 17 августа 2010

Похоже, что вы развертываете веб-приложение в контексте ROOT с помощью Eclipse.Плагин Tomcat Eclipse действительно выполняет самопроверку при запуске, вызывая GET-запрос на ROOT.

Просто игнорируйте его или исправьте код, чтобы он не выбрасывал NPE.Это IMO определенно ошибка в com.ecomm.filters.URLRewriteFilter.Пустые пути не должны рассматриваться как исключительные случаи.Конечные пользователи могут уволить их так же хорошо.

1 голос
/ 17 августа 2010

Я никогда не знал, фильтры загружаются при запуске ...

Я думаю, это зависит от того, как вы определяете "загружен". Экземпляр будет создан, и его метод init(FilterConfig) будет вызван до того, как он будет действовать по запросу, поэтому у его кода есть несколько возможностей для выполнения "при запуске". По запросу, пожалуйста, опубликуйте фактическое исключение ...

1 голос
/ 17 августа 2010

Это не имеет особого смысла.Фильтры применяются только к запросам.Вы уверены, что в вашей конфигурации Spring нет ничего, что приводило бы либо к 1) вызываемому классу фильтра или 2) запуску http-запроса?

Что показывает трассировка стека NPE в фильтре?

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

...