2013-04-16 20 views
5

Bunun bir noob sorusu olduğundan eminim, ve bir saatin daha iyi bir kısmını, bir yanıt için trol atma traktını harcadım ama kimse benim durumum gibi görünmüyor. go ...Spring MVC'de REST ve JSP'yi karıştırma, JSP'yi bulamıyorsunuz

Bahar MVC kullanan yeni bir webapp var. Uygulamanın çoğu (% 99) saf REST'tir, bu nedenle "view" gibi bir şey yoktur, ancak JSON'u tele geri gönderir veya hatalar için alternatif bir HTTP Durumu gönderir.

Özel durum gerçek bir JSP olması gereken giriş sayfasıdır, ancak bir şekilde REST denetleyicileri eşleştirmek için kullandığım yapılandırma normal JSP eşlemelerinin başarısız olduğu bir durumda beni bırakıyor. İşte

bende ne var:

benim memuru servlet yapılandırma, ilgili bölümleri şunlardır: çabalarımda

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/pages/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

Çalıştırmak için, ben de bir eşleme eklemiş " Şu anda sadece benim giriş JSP yönlendirir HomeController": web.xml''deki,

<bean name="/" class="com.somepackage.HomeController"/> 

Şimdi var:

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

<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-dispatcher-servlet.xml 
    </param-value> 
</context-param> 

Bu şuna benzer benim RESTful denetleyicileri için çalışıyor: sadece bu gibi görünüyor

@Controller 
@RequestMapping(value = "/api/user") 
public class BlahBlahController {... 

Benim "HomeController",: ı "vurduğunda

@Controller 
@RequestMapping(value = "/") 
public class HomeController extends AbstractController { 
    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     return new ModelAndView("login"); 
    } 
} 

tetiklenir IS/"url, ancak bu hatayı günlüklerde aldım:

Şimdi söylediklerimi anlıyorum, /WEB-INF/pages/login.jsp'u nasıl çözeceğini bilmez (bu sayfa var btw), ancak bunu işe almak için işleri değiştirmem gerektiğine dair takılıyorum.

Çalışması gereken şey hakkında biraz kafam karışık. Herhangi bir ipucu olan var mı?

Teşekkürler.

+0

Ben bu konularda emin değilim, ama neden iki kez görünümü çözümleyicinizi tanımladık? Ediyorum Ayrıca, 'HomeController', '@ Controller' yerine' @ Component' ile açıklamalıdır. – NilsH

+0

Oh .. lol .. evet yinelenen bir hatadır .. dediğin gibi önemli değil. @ Bileşen/@ Denetleyici ayrımı iyi tespit edildi, ben şimdi değiştireceğim ve tekrar deneyin. (Bu sorun, sorun devam ederse bu hataları düzeltmek üzere düzenlenmiştir) –

+0

Yani .. Aşağıdaki hatayı alıyorum: HTTP için eşleşme bulunamadı URI ile istek [/] in ... Eşleme ile aynı hatayı alıyorum: URI [/WEB-INF/pages/login.jsp] ile HTTP isteği için hiçbir eşleşme bulunamadı ... Oradaki xml konfigürasyonuna sahip olmaktan nefret ediyorum. Herşeyi ek açıklama amaçlı kullanmayı tercih ediyorum ama yine de benim için çalışmıyor –

cevap

6

Tamam .. Cevabını buldum, dağıtıcı yapılandırmasında URL modeli var.

yerine:

<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Ben aslında çalışma değildi "düşünce" başka yerde bu cevabı buldum ve çalıştı ama etmişti

<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

olmalıdır sonra düşündüm sebebini anladım Bu kök nedeni ile ilgisizdi.

Fikrim yok neden bu işe ve diğer olmaz .. ama her seferinde bir sorun ...

-1

RequestMapping'i yöntem düzeyinde koy, koduma çalıştım ve işe yaradı. Sadece herkes için bir oturum açma görünümü yönlendirmek istiyorsanız da kodunun altına kullanabilirsiniz

@Override 
@RequestMapping(value = "/") 
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return new ModelAndView("login"); 
} 

: "bileşeni-tarama bağlamı" Sen @Controller kullanarak ve uygun yaşıyorsanız HomeController fasulye tanımlamak gerekmez "/" erişim.

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

Ödeme yararlı bir referans için github gelen mvc show case projesi.

+0

Önceki yorumlarda belirttiğim gibi, sorun kontrolörün bulunmadığı, işte olduğu ve yangın olduğu değil. Sorun şu ki, yolladığı JSP bulunamıyor. DispatcherServlet –

+0

'da URI [/WEB-INF/pages/login.jsp] ile HTTP isteği için eşleşme bulunamadı. Peki, kaçırdığım URL modelini doğru şekilde değiştirdiniz. baharın kullanım kolaylığını sadece ekleyerek kullanabilirsiniz.> – apurvc

+0

Herhangi bir kumanda yazmanıza gerek yoktur. Gönderideki kontrolör sadece bir örnekti. Oraya giden daha fazla kod var ama sorunun meydana geldiği kesin koşulları göstermek önemli olabileceğini düşündüm. Görünüm denetleyici elemanını başka bir yerde kullanıyorum ve gerçekten çok faydalı olduğuna inanıyorum. –

İlgili konular