2010-11-05 18 views
22

काम नहीं करता है वर्ग मेरी web.xmlसर्वलेट 3.0 Async समर्थित यहाँ

<filter> 
    <filter-name>pollingTest</filter-name> 
    <filter-class> 
     webapp.controller.core.servlet.PollingService 
      </filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter-mapping> 
    <filter-name>pollingTest</filter-name> 
    <url-pattern>/app/poll</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>ASYNC</dispatcher> 
</filter-mapping> 

यहाँ है 7, अपवाद मिला:

java.lang.IllegalStateException: Request is within the scope of a filter or servlet that does not support asynchronous operations 
at org.apache.catalina.connector.Request.startAsync(Request.java:3657) 
at org.apache.catalina.connector.Request.startAsync(Request.java:3633) 
at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1053) 
at javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:450) 

कौन मेरी मदद कर सकता है इस? बहुत बहुत धन्यवाद।

+0

तरह का मिलान अतुल्यकालिक सर्वलेट के लिए एनोटेशन का उपयोग कर सकते संपूर्ण वेब.एक्सएमएल दिखाएं (नामस्थानों के साथ कम से कम ' 'टैग परिभाषा) – Bozho

उत्तर

45

क्योंकि आपकी सर्वलेट और श्रृंखला में किसी भी अन्य फ़िल्टर में वेब.एक्सएमएल में <async-supported>true</async-supported> होना चाहिए।

+0

एनोटेशन के साथ ऐसा कैसे करें? – necromancer

+6

@WebFilter (urlPatterns = "/ *", asyncSupported = true) – necromancer

4

आप रिकर्सली this.doFilter(req, res, chain); पर कॉल कर रहे हैं।

यदि आप श्रृंखला जारी रखना चाहते हैं, तो आपको this.doFilter(req, res, chain); के बजाय chain.doFilter(httpRequest, httpResponse); का आह्वान करना होगा।

4

मुझे एक ही समस्या थी, लेकिन मेरे मामले में, यह पर्याप्त नहीं था। यदि आप टैग कॉन्टेक्स्ट और वाल्व (tomcat7 - service.xml में) का उपयोग करते हैं, तो आपको टैग मान में पैरामीटर asyncSupported = "true" जोड़ना होगा। फिर यह काम किया था।

<Context docBase="aaa" path="/aaa" reloadable="true" source="org.eclipse.jst.jee.server:aaa"><Valve className="cz.tomcatUtil.ForceUserValve" user="DZC0GRP" asyncSupported="true"/></Context> 
0

मुझे यह एक पुरानी पोस्ट पता है लेकिन मैं अपना समाधान साझा करना चाहता हूं। इस कारण को खोजने में मुझे 1 सप्ताह लग गए क्योंकि मैंने लगभग हर संभव समाधान की कोशिश की थी।

मेरे लिए सर्वलेट यूआरएल-पैटर्न सही नहीं था।

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

आशा है कि यह कुछ उपयोग होगा।

2

पीटर करबिनोविच, आप उत्तर सही नहीं है।

2.3.3.3 अतुल्यकालिक प्रसंस्करण
...
एक सर्वलेट कि = एक जहां asyncSupported गलत पर सेट है अनुमति दी है को सच asyncSupported है से भेजने: सर्वलेट 3.0 कल्पना से। इस मामले में, प्रतिक्रिया प्रतिबद्ध किया जाएगा जब सर्वलेट कि async का समर्थन नहीं करता सेवा विधि से बाहर निकल गया है ...

3

आप इस

@WebServlet(urlPatterns = {"/yourServlet"}, **asyncSupported=true**) 

public class YourServlet extends HttpServlet { } 
संबंधित मुद्दे