2011-08-09 36 views
5

benim Bahar Kontrolörü URL'ler için haritaya yapılandırarak devam eden sorunları yaşıyorum ve ben Bence, oldukça basit bir senaryoya aşağı var kullanan URL'ler Haritalama Kontrolör çalışma edilmelidir:Bahar MVC - Ek Açıklamalar

I ek açıklamaları kullanarak benim controller sınıfından yapılandırılması duyuyorum ve aşağıdaki gibi görünüyor:

@Controller 
@RequestMapping(value = "/question/**") 
public class QuestionController 
{ 

    /** 
    * Method to build users questions list 
    * 
    * @param request 
    * @param response 
    * @return 
    * @throws Exception 
    */ 
    @RequestMapping("/list") 
    public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception{ 
     //Display Questions List 
    } 
} 

kontrolör başka yapılandırma yoktur ben sadece <mvc:annotation-driven/> yapılandırma ve benim webmvc config <context:component-scan>.. yapılandırmasına sahip, bu yüzden denetleyici otomatik olarak algılandı.

Şimdi, /question/list'a gittiğimde, uygulamalar kaynağı bulamıyor ve bir ResourceNotFound hatası alıyorum. Ancak, /question/question/list'a gidersem, uygulama, doğru bir şekilde beklediğim sayfayı yükler.

Bunun neden /question/question/list kullanarak yönteme yönlendirildiği hakkında herhangi bir fikriniz var mı?

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="3"> 
     <property name="alwaysUseFullPath" value="true" /> 
    </bean> 

Bu sefer gittiğinizde:


Bunu takiben ben şöyle Bunu yapan, alwaysUseFullPath = true parametreleri kullanmak için tüm RequestMappings zorlamak için benim webmvc config yapılandırmayı ekleyerek çalıştı/question/list hala doğru sayfayı yüklemek için başarısız, ancak günlükleri en azından doğru Controller tanımlayan, ancak sadece bu yöntemi bulmak için başarısız olduğunu gösteriyor (daha önce Kontrolörün URL'ye dayalı kontrolörü bulamadı):

2011-08-09 18:02:27,885 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Matching patterns for request [/question/list] are [/question/**/list/, /question/**/list, /question/**/, /question/**] 
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - Mapping [/question/list] to handler '[email protected]23' 
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Last-Modified value for [/microblog/question/list] is: -1 
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'microblog' processing GET request for [/microblog/question/list] 
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving exception from handler [[email protected]23]: org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/list', method 'GET', parameters map[[empty]] 
2011-08-09 18:02:27,886 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Resolving to view 'resourceNotFound' for exception of type [org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException], based on exception mapping [.NoSuchRequestHandlingMethodException] 
2011-08-09 18:02:27,887 [http-8080-3] DEBUG org.springframework.web.servlet.handler.SimpleMappingExceptionResolver - Exposing Exception as model attribute 'exception' 

Anlatımları kullanarak bir URL'ye bir Denetleyici kablolamada elde etmeye çalıştığım göreceli olarak basit bir şeymiş gibi görünüyor, ancak doğru çalışmıyor - bunlardan herhangi birine rastlıyor veya herhangi bir göz kamaştırıcı hata görüyor benim üzerimde mi?


GÜNCELLEME

benim araştırmalarda bazı ilerlemeler yaptık.

<servlet-mapping> 
     <servlet-name>microblog</servlet-name> 
     <url-pattern>/question/*</url-pattern> 
    </servlet-mapping> 

bu servlet eşleme kaldırırsanız, ve değişimi (Hala aynı servlet'dir tüm .html eşleyen servlet-eşleme) şu şekildedir: Benim web.xml olarak

Ben servlet eşlemesi tanımlamak Ben /question/list.html için kullanıyorum URL çalışır (aynı zamanda soru denetleyicisindeyönteminin @RequestMapping ek açıklama yöntemini eşleme yöntemini /list.html olarak değiştirir) çalışır.Özetle

:

  1. Ben web bağlamında servlet eşlemesi /question sahip

  2. ben bir yöntem düzeyi eşleme QuestionController

  3. için /question başka eşleme benim /list

listesi yöntemi

Şimdi URL'lerim bu durumlar için .html bitmesini istemiyorum - Herkes ben bu sorunu aşmak nasıl biliyor? servlet-haritalama URL'den eşleşti /question dize çıkarır belki sanki

+2

set / html içermeyen url'ler için – Gengzu

+0

Bunu kullanırsam, tüm resmimi, css kaynaklarını vb. Denetleyiciye yeniden yönlendirir ve bu nedenle onları bulmakta başarısız olur (tüm resimlerim/resimlerde/.. vb) - yani sayfayı yüklediğimde hiçbir resim veya css şekillendirmesi yok. URL'deki yolu çoğaltmaya gerek kalmadan sadece URL'leri denetleyiciye nasıl aktarabilirim? – rhinds

+1

Dosyalarınızı WEB-INF klasöründe değil, yukarıdaki klasöre taşıyın. – Gengzu

cevap

4

html olmadan

URL'ler için
<url-pattern>/</url-pattern> 

kurmak ve .css gibi kaynaklar için

<mvc:resources mapping="/resources/**" location="/resources/" /> 

kullanın .jpg vs.

Ben de bu sorunu karşılamak, ama sadece gelişmemiş
2

Sen/** Denetleyiciniz eşlemenizde gerekmez (dolayısıyla /question/list çalışmıyor ama /question/question/list çalışma) görünüyor. @RequestMapping(value = "/question") için

Haritalama bu denetleyiciye alırsınız.

/list/question eklenecektir.

/**'u eklediğinizde, ona bir şey izleyen bir temel yol aramasını ve sonra da sonuna kadar /list'u eklemesini söylüyorsunuz.

Bu yardımcı olur umarım.

+0

Teşekkürler, bunu zaten yapıyordum, ama çaresizlik içinde "/ **" yi eski XML yapılandırmasında yapılandırılma şeklini yansıtmayı denemeye çalıştım. Her iki durumda da her iki şekilde de aynı sonuçları elde ediyorum. – rhinds

+0

Ayrıca, orijinal soruyu web.xml servlet eşlemesine yaptığım bazı keşifler ile ilgili diğer güncellemelerle de güncelledim – rhinds

0

Dinlenme apı'sini sonra hata: "org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: servlet istek için eşleşen işleyicisi yöntemi ....."

Ben eklenti bu sorunu çözmek "Kabul: application/json" istirahat istemci aracında isteği Üstbilgi içine. Umarım size yardımcı olabilir.

İlgili konular