2012-05-08 15 views
5

काम नहीं कर रहा है एक बार जब मैं अपने टेस्ट एप्लिकेशन को उत्पादक (?) एप्लिकेशन में ले गया और टॉमकैट पर परीक्षण करना शुरू किया, तो मेरी स्प्रिंग 3.1 आधारित आरईएसटी सेवाओं ने काम करना बंद कर दिया है। हालांकि डिफ़ॉल्ट index.jsp प्रदर्शित होता है, मेरा आवेदन (http: // myhost: myport/test-webapp/myrestservice) तक पहुंचा नहीं जा सकता है और मुझे अनुरोध किया गया संसाधन (/ test-webapp/myrestservice) उपलब्ध नहीं है।जेएसओएन के साथ स्प्रिंग 3.1 आरईएसटी:

यहाँ मैं क्या किया है:

नियंत्रक:

package com.test.webapp.controller; 

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

import com.test.webap.entity.Account; 

@Controller 
@RequestMapping("/myrestservice") 
public class AccountController{ 

@RequestMapping(method = RequestMethod.GET, produces="application/json") 
@ResponseBody 
public Account getEntity() { 
      // ... <simplified> 
    return new Account(//...); 
} 
} 

डिस्पैच सर्वलेट विन्यास:

package com.test.webapp.web; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 
import com.test.webapp.config.AppConfig; 

public class AppInit implements WebApplicationInitializer { 

    private static final String DISPATCHER_SERVLET_NAME = "dispatcher"; 

    public void onStartup(ServletContext container) throws ServletException { 
     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.register(AppConfig.class); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(dispatcherContext)); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = container.addServlet(
       DISPATCHER_SERVLET_NAME, new DispatcherServlet(dispatcherContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

    } 
} 

विन्यास वर्ग:

package com.test.webapp.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan(basePackages = {"com.test.webapp.controller"}) 
public class AppConfig{ 
    // Nothing here. Once I start using the beans, I will put them here 
} 

और, web.xml है ज्यादा नहीं यह:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Test Web App</display-name> 
</web-app> 

मेरी परियोजना में इससे कुछ भी अलग नहीं है। क्या मैं कुछ भूल रहा हूँ? पुरानी परियोजना जो आने वाले JSON अनुरोधों आदि को लॉगिंग करने की तरह कुछ और कर रही थी (जो अब हटा दी गई है) काम कर रही थी, लेकिन मेरे पास अब यह नहीं है :(तो, बहुत से नौसिखिया ब्लूज़। कृपया मेरी मदद करें। बहुत बहुत धन्यवाद! !

अद्यतन समस्या हल हो गई है। जवाब की जाँच करें

उत्तर

2

समस्या हल हो गई। मुझे लगा कि यह एक सर्वलेट कंटेनर 3.0 मुद्दा है और मेरे टॉमकैट 7 कॉन्फ़िगरेशन में कुछ हो सकता है। लेकिन, मुझे web.xml करने के लिए कुछ मामूली परिवर्तन किया था और यह अब ठीक काम करता है:

<web-app version="3.0" 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" 
    metadata-complete="false"> 

    <display-name>Test Web App</display-name> 
</web-app> 

जाहिर है, मैं स्पष्ट रूप से बताने के लिए बिलाव ServletContainerInitializer के कार्यान्वयन के लिए स्कैन करने के लिए किया था और नहीं सब कुछ विशेषता मेटाडाटा के माध्यम से web.xml में है -complete = "false"

+1

DOCTYPE को हटाएं, यह अमान्य है - आप ऐप को बता रहे हैं कि यह एक सर्वलेट 2.3 और 3.0 संस्करण वाला ऐप है। – Pidster

+0

मैंने उत्तर पोस्ट करने के तुरंत बाद इसे महसूस किया :-) टिप्पणी के लिए धन्यवाद। – user1323865

0

आप बिलाव प्रबंधक पर जाकर की कोशिश की और यह देखना कि तैनात है है? यह तैनात ऐप्स की सूची दिखाना चाहिए। मैं रास्ते में सोच रहा हूँ बदल गया है

+0

मैंने पहले ही यह किया है, और मैं वहां सूचीबद्ध/test-webapp देखता हूं। http: // myhost: myport/test-webapp/डिफ़ॉल्ट index.jsp प्रदर्शित करता है, लेकिन http: // myhost: myport/test-webapp/myrestservice परिणाम "अनुरोधित संसाधन (/ test-webapp/myrestservice) नहीं मिला है "Tomcat7 पर त्रुटि। – user1323865

2

आप अपने उत्पादन वातावरण में टॉमकैट का किस संस्करण का उपयोग कर रहे हैं? ऐसा लगता है कि आपको सर्वलेट 3.0 spec applyati प्राप्त करने के लिए टोमकैट 7 की आवश्यकता होगी अपने WebAplicationInitializer का समर्थन करने के लिए आवश्यक है।

+0

मैं टॉमकैट 7.0.17 पर हूं। और हाँ, मेरे पिछले ऐप संस्करण में, मैंने Spring3.0 का पालन किया और web.xml में बूटस्ट्रैपिंग कॉन्फ़िगरेशन प्रविष्टियां हैं। लेकिन, जहां तक ​​मैं समझ गया, स्प्रिंग 3.1 के साथ, मुझे web.xml में यह कॉन्फ़िगरेशन करने की आवश्यकता नहीं है - इसे WebAplicationInitializer मिलना चाहिए था। मुझे बस याद आया कि मेरा web.xml पहले कैसा था, और उस पर स्विच करने से यह ऐप काम करता है। लेकिन वसंत 3.1 के साथ, क्या यह web.xml में इतनी अधिक कॉन्फ़िगरेशन के बिना काम नहीं करना चाहिए? धन्यवाद! – user1323865

+0

धन्यवाद जोएल, मैंने आपके Servlet3.0 spec संकेत का उपयोग किया और सामान काम करने के लिए एक रास्ता मिला। – user1323865

0

जब से तुम वसंत के लिए नए हैं मैं तुम्हें अपने पिछले जवाब पर एक नज़र डालें की सलाह देते हैं:

The requested resource (/) is not available

+0

धन्यवाद।मेरी जांच के जवाब के लिए स्टैक ओवरफ्लो खोजते समय मैंने पहले ही आपके उत्तर पर टक्कर लगी है। जबकि मैंने ग्रहण बाजार से स्प्रिंग आईडीई जोड़ा, फिर भी मैं अपनी समस्या का समाधान नहीं कर सका। – user1323865

संबंधित मुद्दे