2012-08-02 20 views
6

मैं mvc:resources (किसी अन्य विधि के लिए खुला) के साथ अपवाद करते समय वसंत एमवीसी नियंत्रक रूट (/**) पथ (और उप-फ़ोल्डर जैसे "/ कुछ") को मानचित्र करना चाहता हूं। ।रूट पर वसंत एमवीसी वेबसाइट ("/")

यह उस ढांचे का एबीसी होना चाहिए लेकिन स्पष्ट रूप से यह पूछने के लिए एक बहुत ही जटिल चीज है।

मेरे app-servlet.xml है इन स्पष्ट मानचित्रण अपवाद:

<mvc:resources mapping="/favicon.ico" location="/favicon.ico" /> 
<mvc:resources mapping="/robots.txt" location="/robots.txt" /> 

और मैं इस नियंत्रक है: जब मैं "/" या "/ परीक्षण" या "/ परीक्षण/पेज मारा अब

import java.util.Date; 

import javax.servlet.http.HttpServletRequest; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping("/**") 
public class MainController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String service(final HttpServletRequest request) { 
     final String servlet_path = request.getServletPath(); 
     System.out.println(String.format("%s %s", new Date().toString(), servlet_path)); 
     return "test"; 
    } 
} 

"मुझे आउटपुट मिलता है:

Fri Aug 03 00:22:12 IDT 2012/
Fri Aug 03 00:22:13 IDT 2012 /favicon.ico 

.. देखें? service() को /favicon.ico के लिए बुलाया जा रहा है, भले ही इसे स्पष्ट रूप से बाहर रखा गया हो!

अब मुझे लगता है कि XML पर @Controller पर कुछ "प्राथमिकता" है, फिर भी, मैं बहिष्करण कार्य कैसे कर सकता हूं?

एक साधारण आवश्यकता - वेबसाइट "/" पर है।

पीएस This answer एक बहुत ही समान प्रश्न के उत्तर।

एक और नोट: यह प्रश्न टोमकैट संदर्भ के बारे में नहीं है।

उत्तर

7

यहां मुद्दा यह है कि <mvc:resources के साथ पंजीकृत <mvc:annotation-driven/> के साथ पंजीकृत एक की तुलना में बहुत कम प्राथमिकता है। आप आवश्यकता बस कुछ प्रतिक्रिया के लिए करने के लिए "/" एक बेहतर तरीका शायद /** तुलना में एक अलग @RequestMapping के लिए बजाय कहते हैं कि हो जाएगा है /home के रूप में यह है और इन पंक्तियों के साथ कुछ निर्धारित करें:

<mvc:view-controller path="/" view-name="home" />

हैं यह काम नहीं करेगा, एकमात्र अन्य विकल्प <mvc:resources के अंतर्निहित हैंडलर मैपिंग की प्राथमिकता को कम करना होगा, जिसे हैंडलर मैपिंग को स्पष्ट रूप से परिभाषित करके किया जा सकता है - थोड़ा जटिल लेकिन किया जा सकता है।

साथ सिर्फ इस पहले प्रयास करें:: यदि यह अकेले काम नहीं करता,

<mvc:resources mapping="/favicon.ico" location="/favicon.ico" order="0"/> 
<mvc:resources mapping="/robots.txt" location="/robots.txt" order="0"/> 

स्प्रिंग 3.1.x के लिए इन पंक्तियों के साथ कुछ करने के लिए <mvc:annotation-driven/> बदलने

अपडेट किया गया यहाँ एक संभव विन्यास है :

<bean name="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="conversionService" ref="conversionService"></property> 
      <property name="validator"> 
       <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property> 
       </bean> 
      </property> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> 
     </list> 
    </property> 
</bean> 

<bean name="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="order" value="2"></property> 
</bean> 
+0

आपका समाधान एक ही URL में संदर्भित करता है:एक हैंडलर निर्देशों की घोषणा के क्रम बदल सकते हैं। मुझे इसे जंगली कार्ड होने की ज़रूरत है। यदि आप उदारता से 'mvc: संसाधनों की प्राथमिकता' @ requestMapping' पर बढ़ाने के लिए उदारतापूर्वक विस्तृत कर सकते हैं, तो मैं अनुमान लगा रहा हूं, इसे हल करूँगा। धन्यवाद! – Poni

+0

एक अद्यतन जोड़ा गया –

+0

कार्य - धन्यवाद बिजू! – Poni

8

मैं यह स्पष्ट करना चाहता हूं कि 01 को फिर से लिखने के बजाय (-> "घर" "/")

<mvc:resources mapping="/favicon.ico" location="/favicon.ico" order="0"/> 
<mvc:resources mapping="/robots.txt" location="/robots.txt" order="0"/> 
<mvc:annotation-driven/> 
संबंधित मुद्दे