2016-07-28 85 views
0

我重新彈簧引導簡單的項目「問候」,而當我運行在服務器上,它的工作,我在瀏覽器中像這樣得到的JSON數據:tomcat7 - 如何部署春季啓動war文件

本地主機: 9090/API /問候

和它顯示:

[{ 「ID」:1, 「文本」: 「你好world1」},{ 「ID」:2 「文本」: 「你好world2」 }]

和我通過控制檯成功生成戰爭文件:

... \ workspace下,STS-3.8.0.RELEASE \演示> MVN全新安裝

,我已經建立了tomcat7我的Ubuntu服務器14.04 TLS,

和扔網絡經理,我選擇了戰爭文件到服務器上部署:

但是當輕敲的URL顯示例如所有問候語,它不會顯示任何東西:

error : the requested resource type is not valid

,所以我檢查錯誤在Tomcat 7 catalina.out的日誌:

INFO:部署Web應用程序歸檔/var/lib/tomcat7/webapps/demo-0.0.1-SNAPSHOT.war 年07月28 ,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沒有加載。請參閱Servlet規範3.0,第10.7.2節。 Offending類:javax/el/Expression.class Jul 28,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.servlet-api-3.1.0.jar) - jar沒有加載。請參閱Servlet規範3.0,第10.7.2節。 Offending類:javax/servlet/Servlet.class Jul 28,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沒有加載。請參閱Servlet規範3.0,第10.7.2節。違規類:javax/el/Expression。類

但我我以前不明白有什麼問題正是,

這是我的項目結構:

project structure

,這是我的java類:

1/class 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 /類賀卡

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 /類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); 
    } 

} 

,這是POM文件:

<?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

您是否將項目.war添加到{tomcat-folder}/webapps? – Andrew

+0

是的,我已經把它手動在/ webapps –

+0

我認爲你需要標記承諾作爲提供? – saml

回答

0

這可能是你沒有上設置您的上下文路徑application.properties,因此Tomcat正在使用應用程序名稱的默認路徑。

添加server.contextPath=/的屬性文件設置爲嵌入式Tomcat的上下文路徑和外部的tomcat添加context.xml與以下到您的項目設置上下文路徑。

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

什麼意思是指定contextPath,你有提議,因爲我在春季項目中是新的 –

+0

SpringBoot默認使用application.properties文件進行配置。只需在資源目錄下添加application.properties,就可以通過添加彈簧已知屬性來覆蓋默認配置。 server.contextPath = /將更改嵌入容器的上下文路徑,但對於外部tomcat服務器,您需要將context.xml添加到main/webapp/META-INF /文件夾。在文件內部添加以下內容: <?xml version =「1.0」encoding =「UTF-8」?> KubenT

+0

我提出了所有的建議,同樣, 在tomcat管理器ui中,當我部署war文件時,我收到以下消息: 「OK - 啓動應用程序在上下文路徑/demo-0.0.1-SNAPSHOT」 這是否意味着有關路徑.. –