2017-09-18 31 views
6

पर तैनात किए जाने पर स्प्रिंग बूट आरईएसटी कंट्रोलर 404 लौटाता है मेरे पास एक वसंत बूट आराम वेब एप्लिकेशन है जो एम्बेडेड सर्वर पर पूरी तरह से काम करता है। हालांकि ब्लॉग https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file में उल्लिखित चरणों का पालन करने के बाद, मुझे 404 त्रुटि संदेश मिला है जब मैं सर्वर पर संसाधन के लिए एक अनुरोध भेजता हूं। मैंने जावा 1.8.0_212 स्थानीय रूप से उपयोग किया है और जावा 1.8.0_131 का उपयोग किया है और मेरे ऐप को टोमकैट पर तैनात किया है सर्वर पर 9। एक चीज जो मुझे परेशान कर रही है वह यह है कि क्रूड रिपोजिटरी को विस्तारित करने वाले भंडारों तक पहुंचा जा सकता है। नीचे मेरे आवेदन का प्रवेश बिंदु है।बाहरी टॉमकैट 9 सर्वर

@SpringBootApplication 
@ComponentScan(basePackages = "com.dbe.ref") 
public class RefmsApplication extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(RefmsApplication.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(RefmsApplication.class, args); 
    } 

और यह भी मेरी pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.dbe.ref</groupId> 
    <artifactId>refms</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>refms</name> 
    <description>project for Rural electrification fund</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>LATEST</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <start-class>com.RefmsApplication</start-class> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.webjars</groupId> 
      <artifactId>jquery</artifactId> 
      <version>2.2.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.webjars</groupId> 
      <artifactId>angularjs</artifactId> 
      <version>1.4.10</version> 
     </dependency> 

     <dependency> 
      <groupId>org.webjars</groupId> 
      <artifactId>bootstrap</artifactId> 
      <version>3.3.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.webjars</groupId> 
      <artifactId>font-awesome</artifactId> 
      <version>4.7.0</version> 
     </dependency> 
     <dependency> 
      <groupId>eu.michael-simons</groupId> 
      <artifactId>wro4j-spring-boot-starter</artifactId> 
      <version>0.3.4</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports</artifactId> 
      <version>6.4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.14</version> 
     </dependency> 

     <dependency> 
      <groupId>net.sourceforge.dynamicreports</groupId> 
      <artifactId>dynamicreports-core</artifactId> 
      <version>5.0.0</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <finalName>refms</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

यहाँ लॉग का हिस्सा है:

2017-09-19 10:38:20.564 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'errorPageFilter' to: [/*] 
2017-09-19 10:38:20.565 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 
2017-09-19 10:38:20.566 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
2017-09-19 10:38:20.568 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 
2017-09-19 10:38:20.568 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 
2017-09-19 10:38:20.571 INFO 6660 --- [   main] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*] 
2017-09-19 10:38:20.571 INFO 6660 --- [   main] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'configurableWroFilter' to urls: [/wro4j/*] 
2017-09-19 10:38:20.572 INFO 6660 --- [   main] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServletRegistration' to [/refms/*] 
2017-09-19 10:38:20.573 INFO 6660 --- [   main] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 
+1

तुम दोनों बिल्ला और आवेदन (जैसे catalina.log और आवेदन के लिए लॉग पोस्ट कर सकते हैं बाहरी बिल्ला के लिए इस

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> 

द्वारा इस निर्भरता

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 

बदल जाते हैं। लॉग)? यह देखने के लिए अच्छा होगा कि यह ठीक से शुरू हो रहा है और यह देखने के लिए कि किस संदर्भ रूट पर तैनात किया गया है। – PaulNUK

+0

यदि आप किसी भी एप्लिकेशनसेवर की छत के नीचे अपना ऐप तैनात करते हैं तो यह HTTP अनुरोधों को संभालने के लिए वसंत ज़िम्मेदारी नहीं होगी। क्या आप हमें इस बारे में अधिक जानकारी दे सकते हैं कि आप इसे कहां तैनात करते हैं और सेटिंग्स क्या हैं? – AlexGera

+0

किस यूआरएल पर आपको 404 मिलते हैं? –

उत्तर

3

वहाँ एक छोटा सा फर्क है जब आप एम्बेडेड सर्वर और बाहरी सर्वर से पर आवेदन को तैनात है चूक।

एम्बेडेड सर्वर के साथ

आप का उपयोग करके आप आवेदन कर सकते हैं:

http://localhost:<port>/<resourceName> 

यदि आप किसी अन्य कंटेनर में war को तैनात तो आप की तरह संस्करण के साथ आवेदन नामों को जोड़ना होगा जबकि:

http://localhost:<port>/<applicationNameWithVersion>/<resourceName> 

उदाहरण के लिए यदि आप इसे example पर तैनात करते हैं तो एम्बेडेड सर्वर के लिए यूआरएल है:

http://localhost:8080/greeting 

और बाह्य तैनात आवेदन के लिए यूआरएल की तरह अगर:

http://localhost:8999/gs-rest-service-0.1.0/greeting 

नोट: यह यूआरएल अपने आवेदन सर्वर है, इसलिए यह तुम्हारा के लिए कुछ बदलाव हो सकता है।

टिप्पणी अगर आपको सहायता चाहिए तो टिप्पणी करें।

+0

स्प्रिंगबूट में आप server.contextPath = yourExample जैसे ब्राउज़र में एक्सेस करने के लिए application.conopories जैसे प्रॉपर्टी को परिभाषित कर सकते हैं। Http: // localhost: 8080/yourExample/ग्रीटिंग – Hiren

+0

आप सही @HirenPandit हैं, यही कारण है कि मैं "डिफ़ॉल्ट रूप से हवेली" करता हूं। –

0

सुनिश्चित करें कि आपने अपने वसंत बूट एप्लिकेशन में संदर्भ पथ जोड़ा है। आमतौर पर यह src \ main \ संसाधनों के अंदर application.properties फ़ाइल में है। कि गुण फ़ाइल में गुण जोड़ें:

server.contextPath=/refms 

आप अपने आवेदन bellow लिंक का उपयोग कर उपयोग करने में सक्षम होना चाहिए localhost:8080/refms/api/account/authenticate या localhost:8080/refms-xxxx/api/account/authenticate

0
अपनी टिप्पणी आप का उल्लेख में

/(जहां xxxx अपने विरूपण साक्ष्य संस्करण है) प्रमाणीकरण 404 दे रहा है, ऐसा इसलिए है क्योंकि आपने लॉगिन प्रक्रिया यूआरएल को "प्रमाणित" करने के लिए सेट किया है। यह यूआरएल है कि लॉगिन फॉर्म को पोस्ट किया गया है। यदि निर्दिष्ट नहीं है, तो यह डिफ़ॉल्ट/लॉगिन करने के लिए डिफ़ॉल्ट है। वसंत सुरक्षा ढांचा उस यूआरएल को रोकता है और लॉगिन और पासवर्ड पैरामीटर प्राप्त करता है।

0

जब आप अपने आवेदन को टॉमकैट में तैनात करते हैं तो यूआरएल संदर्भ पथ पर निर्भर करता है जिसके अंतर्गत आपका आवेदन तैनात किया जाता है। अधिकांश समय यह युद्ध फ़ाइल के नाम से सटीक मिलान होता है जिसे आपने टॉमकैट 'वेबपैप्स' निर्देशिका में रखा था। आप अपनी 'वेबएप' निर्देशिका को देखकर नाम देख सकते हैं। आपकी युद्ध फ़ाइल शायद अब तक एक निर्देशिका में भी खर्च की गई है।

चूंकि आपने अपने मैवेन बिल्ड सेक्शन में फाइनलनाम डाला है, इसलिए आपकी युद्ध फ़ाइल का नाम होना चाहिए: refms।युद्ध है, तो आपके अनुप्रयोग चलेगा तहत:

http://host:port/refms/

मेरे धारणा है कि तुमने किया था नहीं ROOT.war को युद्ध फ़ाइल का नाम बदलने से पहले उसे एक बिल्ला में नकल है, इसलिए अपने आवेदन करेंगे नहीं पर चलना:

http://host:port/

आप ऐसा अपने आवेदन एम्बेडेड बिलाव उदाहरण के लिए इसी तरह चलेंगे करना चाहते हैं; मूल संदर्भ पर।

अपने लॉग फ़ाइल से मैं

Mapping servlet: 'dispatcherServletRegistration' to [/refms/*] 

यह आपके एप्लिकेशन के संदर्भ जड़ के सापेक्ष है देख सकते हैं कि आपके प्रमाणीकरण endpoint /refms पर मैप किया गया है /। तो मामले में आप अपने युद्ध फ़ाइल का नाम नहीं था, प्रमाणीकरण endpoint आपको प्राप्त है जिस पर 404 शायद के तहत होने जा रहा है: pom.xml में

http://localhost:8080/refms/refms/api/account/authenticate 
0

चेक अगर

<build> 
    <finalName>refms</finalName> 
     ... 
</build> 

server.contextPath=/refms 
application.properties में

साथ मेल खाती है और

जाँच
<Context path="/refms"/> 

context.xml में। तैनाती के बाद शायद टॉमकैट में आपका मूल संदर्भ अलग था।

साथ ही,