2011-10-21 11 views
13

Po emisji zgłoszonych w tej question, znaleziono rozwiązanie:Jak uniknąć żądania ustawić ASYNC_SUPPORTED = true, aby włączyć przetwarzanie asynchroniczne serwlet 3.0 na Tomcat 7?

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); 

To wydaje się nieco dziwne i nie jest naprawdę „przenośne” kod (to nie zaszkodzi, ale ...). Wydaje się to być specyficzne dla Tomcat 7. Używam Tomcat 7.0.14 dostarczonego przez NetBeans 7.0.1.

Nie można znaleźć dokumentacji wskazującej, że konieczne jest włączenie przetwarzania żądań asynchronicznych w apletach 3.0 z atrybutem catalina. Nie mogłem znaleźć dokumentacji wskazującej, że coś specjalnego było konieczne na poziomie konfiguracji serwera Tomcat.

Czy istnieje sposób uniknięcia konieczności ustawiania ASYNC_SUPPORTED=true w każdym żądaniu, aby umożliwić przetwarzanie asynchronicznego serwletu 3.0 w Tomcat 7?

+0

w Tomcat 7.0.27 'req.startAsync()' lub 'req.startAsync (req, res)' działa bez błędów i dodatkowych ustawień. – user1516873

Odpowiedz

7

Kilka rzeczy najpierw sprawdzić:

Upewnij żadnych filtrów, które działają na życzenie również wspierać asynchronicznie (jak omówione w one of the answers na pytanie ty odwołanie).

Upewnij się, że używasz Servlet 3.0 web.xml - na przykład:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0" 
     metadata-complete="true"> 
4

spróbuj uaktualnić.

  • Bug 53623 ustalona w 7.0.30.
  • "Włącz pozostałe zawory dla asynchronicznego przetwarzania przetwarzania w Servletie 3". (naprawiono w wersji 7.0.16)

Aby uzyskać szczegółowe informacje, sprawdź numer Tomcat 7 ChangeLog.

Ponadto, jeśli chcesz używać asynchronizacji, musisz upewnić się, że wszystkie filtry i zawory w łańcuchu (jak również serwlet, oczywiście) obsługują asynchroniczne. Jest to prawdopodobnie problem zarówno w pierwotnym pytaniu, jak i w twoim przypadku, tutaj.

+0

Downvote bez wyjaśnienia? :/ –

+0

Używam Tomcat 7.0.34, wersja serwletu w web.xml jest rzeczywiście 3.0 i wszystko powinno być włączone asynchronicznie (ponieważ pracuje z Jetty) – Eugen

+0

@Eugen Jetty może interpretować specyfikację nieco inaczej. "Działa na Jetty" nie jest solidnym argumentem, że Tomcat ma błąd. –

1

Znalazłem, że org.apache.catalina.ASYNC_SUPPORTED=true jest potrzebne tylko wtedy, gdy od jednego normalnego serwletu/jsp (wewnętrznie) do przodu do asynchronizmu-serwletu! Przykład: W moim pliku index.jsp umieszczam <jsp:forward page="/path/AsyncServlet" /> Obiecuję, że AsyncServlet działa poprawnie zarówno na Tomcat7, jak i Glassfish3, gdy bezpośrednio uruchomię go z przeglądarki! Jednak kiedy go wywołać przez index.jsp: Tomcat7 donosi 500 dla „not supported” Glassfish3 donosi 500 dla „Wniosek jest zakresem stosowania filtra lub serwletu, który nie obsługuje operacje asynchroniczne” Gdybym osadzić <% request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); %> przed <jsp:forward> w index.jsp, Tomcat7 idzie dobrze, ale Glassfish3 nadal jest ZŁY! Więc znalazłem rozwiązanie zarówno dla Tomcat7 i Glassfish3 (bez SYNC_SUPPORTED!): Wystarczy dokładnie przymocować poniższych w web.xml:

<servlet> 
    <servlet-name>indexPage</servlet-name> 
    <jsp-file>/index.jsp</jsp-file> 
    <async-supported>true</async-supported> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>indexPage</servlet-name> 
    <url-pattern>/index.jsp</url-pattern> 
    </servlet-mapping> 

Wnioski (dla mnie): nie można do przodu z normalnym serwletu/jsp/filter do async-one! Ponieważ funkcja żądania asynchronizacji MUSI być wstępnie ustawiona! Więc wspólnym rozwiązaniem dla serwletu/jsp/filtra, który musi przekazać do asynchronizmu-serwletu jest: Użyj <servlet>/<async-supported>true lub dla wstępnie przetworzonego serwletu; Użyj <servlet>/<async-supported>true dla wstępnie przetworzonego jsp Użyj <filter>/<async-supported>true lub dla wstępnie przetworzonego filtra; Mam nadzieję, że to może trochę pomóc!

Powiązane problemy