2016-07-28 31 views
0

ich ein Feder Boot einfaches Projekt „Grüße“, neu zu implementieren und wenn ich es auf Server ausführen, es funktioniert und ich bekomme JSON-Daten im Browser wie folgt aus:tomcat7 - Wie Frühjahr Boot-Krieg Datei

localhost: 9090/api/Grüße

und es zeigt:

[{ "id": 1, "text": "Hallo world1"}, { "id": 2, "text": "Hallo world2" }]

und ich erstelle erfolgreich die Kriegsdatei über die Konsole:

... \ Arbeitsplatz-sts-3.8.0.RELEASE \ demo> MVN sauber

installieren und ich habe bereits tomcat7 auf meinem Ubuntu-Server 14.04 tls einrichten,

und werfen die Web-Manager ich wählen sie die wAR-Datei auf dem Server zu implementieren:

aber wenn Hahn die uRL alle Grüße zum Beispiel zu zeigen, es zeigt nichts:

error : the requested resource type is not valid

so prüfe ich den Fehler in der tomcat 7 catalina.out log:

INFO: Bereitstellen von Webanwendungsarchiv /var/lib/tomcat7/webapps/demo-0.0.1-SNAPSHOT.war 28. Juli , 2016 7:38:55 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile (/var/lib/tomcat7/webapps/demo-0.0.1-SNAPSHOT/WEB-INF/lib/javax.el- 3.0.0.jar) - jar nicht geladen. Siehe Servlet Spec 3.0, Abschnitt 10.7.2. Beleidigende Klasse: javax/el/Expression.class 28.07.2016 07:38:55 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile (/var/lib/tomcat7/webapps/demo-0.0.1 -SNAPSHOT/WEB-INF/lib/javax.servlet-api-3.1.0.jar) - jar nicht geladen. Siehe Servlet Spec 3.0, Abschnitt 10.7.2. Beleidigende Klasse: javax/servlet/Servlet.class 28.07.2016 7:38:55 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile (/var/lib/tomcat7/webapps/demo-0.0.1 -SNAPSHOT/WEB-INF/lib/tomcat-embed-el-8.0.36.jar) - jar nicht geladen. Siehe Servlet Spec 3.0, Abschnitt 10.7.2. Beleidigende Klasse: javax/el/Expression.

Klasse

Aber ich did't verstehen, was das Problem ist genau das,

dies meine Projektstruktur ist:

project structure

und dies ist meine Java-Klassen:

1/Klasse DemoApplication

@SpringBootApplication 
public class DemoApplication extends SpringBootServletInitializer{ 

    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 
     @Override 
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
      return application.sources(DemoApplication.class); 
     } 
} 

2/Klasse Gruß

public class Greeting { 

    private BigInteger id; 
    private String text; 

    public BigInteger getId() { 
     return id; 
    } 
    public void setId(BigInteger id) { 
     this.id = id; 
    } 
    public String getText() { 
     return text; 
    } 
    public void setText(String text) { 
     this.text = text; 
    } 

} 

3/Klasse GreetingController

@RestController 
public class GreetingController { 

    private static BigInteger nextId; 
    private static Map<BigInteger, Greeting> greetingMap; 

    private static Greeting save(Greeting greeting){ 
     if(greetingMap == null){ 
      greetingMap = new HashMap<BigInteger, Greeting>(); 
      nextId = BigInteger.ONE; 
     } 


     //if update.... 
     if(greeting.getId() != null){ 
      Greeting oldGreeting = greetingMap.get(greeting.getId()); 
      if(oldGreeting == null){ 
       return null; 
      } 
      greetingMap.remove(greeting.getId()); 
      greetingMap.put(greeting.getId(), greeting); 

      return greeting; 
     } 

     // if create.... 
     greeting.setId(nextId); 
     nextId = nextId.add(BigInteger.ONE); 
     greetingMap.put(greeting.getId(), greeting); 

     return greeting; 
    } 


    static { 
     Greeting g1 = new Greeting(); 
     g1.setText("Hello word"); 
     save(g1); 

     Greeting g2 = new Greeting(); 
     g2.setText("Hello samsa"); 
     save(g2); 
    } 

    @RequestMapping(
      value="/api/greetings", 
      method=RequestMethod.GET, 
      produces=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Collection<Greeting>> getGreetings(){ 

     Collection<Greeting> greetings = greetingMap.values();  
     return new ResponseEntity<Collection<Greeting>>(greetings, HttpStatus.OK); 


    } 

    @RequestMapping(
      value="/api/greetings/{id}", 
      method=RequestMethod.GET, 
      produces=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Greeting> getGreeting(@PathVariable("id") BigInteger id){ 
     Greeting greeting = greetingMap.get(id); 
     if(greeting == null){ 
      return new ResponseEntity<Greeting>(greeting, HttpStatus.NOT_FOUND); 
     } 

     return new ResponseEntity<Greeting>(greeting, HttpStatus.OK); 

    } 


    @RequestMapping(
      value="/api/greetings", 
      method=RequestMethod.POST, 
      consumes=MediaType.APPLICATION_JSON_VALUE, 
      produces=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Greeting> createGreeting(@RequestBody Greeting greeting){ 

     Greeting savedGreeting = save(greeting); 
     return new ResponseEntity<Greeting>(savedGreeting, HttpStatus.CREATED); 

    } 



    @RequestMapping(
      value="/api/greetings/{id}", 
      method=RequestMethod.PUT, 
      consumes=MediaType.APPLICATION_JSON_VALUE, 
      produces=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Greeting> updateGreeting(@RequestBody Greeting greeting){ 

     Greeting updatedGreeting = save(greeting); 
     if(updatedGreeting == null){ 
      return new ResponseEntity<Greeting>(HttpStatus.INTERNAL_SERVER_ERROR); 
     } 
     return new ResponseEntity<Greeting>(updatedGreeting, HttpStatus.OK); 

    } 


    private static boolean delete(BigInteger id) { 
      Greeting deletedGreeding = greetingMap.remove(id); 
      if(deletedGreeding == null){ 
       return false; 
      } 
      return true; 
    } 

    @RequestMapping(
      value="/api/greetings/{id}", 
      method=RequestMethod.DELETE, 
      consumes=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Greeting> deletedGreeting(@PathVariable("id") BigInteger id, @RequestBody Greeting greeting){ 

     boolean deleted = delete(id); 
     if(!deleted){ 
      return new ResponseEntity<Greeting>(HttpStatus.INTERNAL_SERVER_ERROR); 
     } 

     return new ResponseEntity<Greeting>(HttpStatus.NO_CONTENT); 
    } 

} 

und dies ist die pom-Datei:

<?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.example</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>demo</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.6.RELEASE</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> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</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>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-undertow</artifactId> 
</dependency> 

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <scope>provided</scope> 
</dependency> 

    </dependencies> 

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


</project> 
+0

Haben Sie ein Projekt .war zu {tomcat-folder}/webapps? – Andrew

+0

ja, ich habe es manuell in/webapps –

+0

Ich denke, Sie müssen Sog wie vorgesehen markieren? – saml

Antwort

0

Es ist möglich, dass Sie nicht Ihren Kontextpfad festgelegt haben auf application.properties und daher verwendet Tomcat den Standardpfad des Anwendungsnamens.

hinzufügen server.contextPath=/ zu dem Eigenschaften-Datei des Kontextpfad für den Embedded-Kater und für den externen Kater zu einem Projekt die context.xml mit der unten hinzufügen, um den Kontextpfad zu setzen.

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/"/> 
+0

was bedeuten genau durch Angabe der ContextPath, haben Sie einen Vorschlag, da ich neu im Frühling Projekte –

+0

SpringBoot verwendet standardmäßig application.properties Datei für die Konfiguration. Wenn Sie einfach die Datei application.properties unter dem Ressourcenverzeichnis hinzufügen, können Sie die Standardkonfiguration überschreiben, indem Sie bekannte Eigenschaften hinzufügen. Der Server.contextPath =/ändert den Kontextpfad des eingebetteten Containers, aber für den externen Tomcat-Server müssen Sie die Datei context.xml zum Ordner main/webapp/META-INF/hinzufügen. Innerhalb der Datei fügen Sie die folgende: KubenT

+0

Ich habe alle Ihre Aussage, aber immer noch die das gleiche, in der tomcat manager ui, wenn ich die Kriegs-Datei bereitstellen, bekomme ich diese Nachricht: "OK - Anwendung am Kontextspfad gestartet /demo-0.0.1-SNAPSHOT" bedeutet es etwas über den Pfad .. –