2017-01-25 2 views
1

ich auf Azure ein problemloses bin mit Servlet-Container Tomcat mit der Bereitstellung. Ich stelle eine Verbindung zum erstellten Web-App-Bereich mit FTP her und kopiere die Datei war in den richtigen Ordner.Unterschied bei der Bereitstellung von Java-Web-Anwendung und Web-Service auf Azure Tomcat

myWebApp

ich erfolgreich ein Spring MVC einfache Web-Anwendung auf Azure bereitgestellt haben. Das URL-Muster ist unten und die beide wie erwartet:

  • http://myWebApp.azurewebsites.net/myWebApp Eingesetzt auf Azure Tomcat
  • http://localhost:8080/myWebApp auf lokales Tomcat Eingesetzte

Die Schlüsseldatei ist web.xml unter:

<web-app ... xsd schemas ... > 

    <display-name>myWebApp</display-name> 

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

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

    <context-param>... not important ...</context-param> 
    <listener>... not important ...</listener> 
</web-app> 

myWebService

Nun, das Problem kommt, wenn ich einen einfachen Web-Service auf die gleiche Weise bereitstellen und seinen Inhalt sehen möchte.

Ich habe beschlossen, jersey Bibliothek zu verwenden. Hier ist die einzige Probe Klasse:

@Path("Sample") 
public class Sample { 
    @GET 
    @Path("/") 
    @Produces(MediaType.TEXT_XML) 
    public String Method() { 
     return "<tag>" + 123 + "</tag>"; 
    } 
} 

Nach clean install und läuft auf lokalen Tomcat-Server auf URL http://localhost:8080/myWebService/Sample, es gibt mir richtig die XML-<tag>123</tag>".

Ich hoffentlich auf Azure auf die gleiche Weise wie die vorherige myWebApp bereitgestellt und versucht, auf der URL http://myWebService.azurewebsites.net/myWebService laufen. Es gab mir stattdessen den 404 Fehler und sagte, dass die angeforderte Ressource nicht verfügbar ist.

Hier ist die web.xml sicher:

<web-app ... xsd schemas ... > 
    <display-name>myWebService</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>nch.webservices</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Was bin ich fehlt und ich falsch gemacht? Ich habe den Unterschied zwischen den beiden web.xml Dateien in url-pattern bemerkt, dass:

  • myWebApp verwendet /
  • MyWebService verwendet /*

Als ich <url-pattern>/</url-pattern> auf MyWebService verwenden, dann ist es entweder funktioniert nicht auf localhost. Danke für die Hilfe. Fühlen Sie sich frei, nach mehr Informationen zu fragen (wollte die Frage so kurz wie möglich machen).

+0

Dies ist ein Problem über path.1.Please zeigen mir die Zeile "", die in Ihrem Azure-Tomcat/conf/server.xml.2 gefunden werden kann. Lassen Sie mich Ihr Projekt kennen Kontextwurzel, die in Ihrer IDE gefunden werden kann.Right Klicken Sie auf Ihr Projekt --- Eigenschaften --- Web Project Settings.3. Wie viele Ordner befinden sich in Ihrem Azure Tomcat/Webapps Verzeichnis? Sind sie ROOT und myWebApp? – Romeo

Antwort

1

Nach Ihrer Beschreibung & Codes, habe ich versucht, Ihre Ausgabe der myWebService erfolgreich zu reproduzieren.Die Ausgabe 404 des Zugriffs auf http://myWebService.azurewebsites.net/myWebService von myWebService wurde durch die url-pattern nicht übereinstimmte die Method URL der Klasse Sample, bitte beachten Sie die Erläuterungen unten.

  1. In der Klasse Sample die Klasse Annotation @Path("Sample") und die Methode für Annotation @Path("/")Method Verfahren bedeutet, dass die URL zugänglich für die Methode Method der Klasse Sample in myWebService Projekt http://myWebService.azurewebsites.net/myWebService/Sample/ ist.
  2. Der url-pattern Wert / bedeutet nur die URL http://myWebService.azurewebsites.net/myWebService/ übereinstimmen.

Es gibt zwei Lösungen für Ihren Fall.

  1. Empfohlen. Verwenden Sie den Platzhalter /* anstelle von / für url-pattern und greifen Sie auf die URL http://myWebService.azurewebsites.net/myWebService/Sample/ zu. Und Vorschlag, dass die Klasse Annotation @Path("Sample") zu @Path("/Sample") zum Lesen und Verstehen ändern.

  2. Nur die Klasse Anmerkung ändern @Path("Sample")-@Path("") oder @Path("/") wenn nicht url-pattern ändern, aber jeder Pfad Anmerkungen für andere Klassen werden nicht angepasst werden.

+0

Du hast meinen Tag gemacht! Ich schätze Ihren Versuch, es für mich zu reproduzieren und danke für Ihre Hinweise .. die beiden Lösung funktioniert wie ein Charme! Danke vielmals ;)) –

Verwandte Themen