2017-02-26 82 views
0

我終於完成了一個非常「簡單化」的hello世界項目。
當我從我的IDE運行它時,它工作得很好。
當我在Windows 10上運行jar並轉到localhost(我在80端口上運行)時,我看到網頁,一切正常。
一旦我丟棄已經同MySQL和Java的安裝(而不是其他安裝或配置)作爲我的Windows機器,我嘗試導航到的IP地址我的Debian服務器上的同一個jar我得到在服務器上運行彈簧引導

Whitelabel Error Page 

This application has no explicit mapping for /error, so you are seeing this as a fallback. 

Sun Feb 26 02:54:40 UTC 2017 
There was an unexpected error (type=Not Found, status=404). 
Not Found 

這告訴我,春季啓動正在運行(因爲第二我關閉它,我不能訪問同一頁面了),但我似乎無法導航到我可以在我的Windows機器上的任何頁面。

我完全不知道我在做什麼錯在這裏。

編輯:

感謝奧列克Shpota我看到事情爲什麼不工作。我的jar不包含我的freemarker文件。

我的build.gradle

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'jetty' 
apply plugin: 'war' 
apply plugin: 'org.springframework.boot' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE") { 
     exclude module: "spring-boot-starter-tomcat" 
    } 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.1.RELEASE' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.1.RELEASE' 
    compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.6.RELEASE' 
    compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.6.RELEASE' 
    compile group: 'org.springframework', name: 'spring-orm', version: '4.3.6.RELEASE' 
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' 
    compile group: 'org.freemarker', name: 'freemarker', version: '2.3.23' 
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' 
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.1.4.Final' 
    compile group: 'commons-validator', name: 'commons-validator', version: '1.5.1' 
    compile group: 'junit', name: 'junit', version: '4.12' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.1.RELEASE' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.2' 
} 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE") 
    } 
} 

jar { 
    from { 
     (configurations.runtime).collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
    baseName = 'carefree-cooking' 
    version = '0.1.0' 
    manifest { 
     attributes 'Main-Class': 'carefree.cooking.Application' 
    } 
} 

springBoot { 
    executable = true 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

我的豆子配置FreeMarker的

@Bean(name = "freemarkerConfig") 
public FreeMarkerConfigurer freemarkerConfig() 
{ 
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); 
    configurer.setTemplateLoaderPath("/"); 
    return configurer; 
} 

@Bean(name = "viewResolver") 
public FreeMarkerViewResolver viewResolver() 
{ 
    FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver(); 
    viewResolver.setPrefix("WEB-INF/template/"); 
    viewResolver.setSuffix(".ftl"); 
    return viewResolver; 
} 

我的索引控制器

@RequestMapping() 
public String index(ModelMap model) 
{ 
    log.info("======= We are in index controller going to load page"); 
    return "page"; 
} 

而且page.ftlsrc\main\webapp\WEB-INF\template\page.ftl

所以這裏的問題是,當我建立我的jar時,page.ftl不包括在內,也不是任何webapp目錄。

+0

您可以發佈您在IDE或終端中看到的控制檯日誌嗎? –

+0

所以你正在建造一個罐子,並期望它的行爲完全像'戰爭'?此外,Spring Boot已經具有開箱即用的自由標記支持,您不必爲其配置任何東西(並且它適用於'jar'和'war'佈局)。我也建議清理你的構建文件,因爲你已經有了'spring-boot-starter-web',但是又聲明瞭一個spring版本(以消除版本衝突)。 Spring Boot插件可以處理大部分依賴項,您也可以刪除這些版本。 –

回答

1

您的模板位於錯誤的目錄中。您正在創建一個不是war文件的jar文件。但是,您已將文件放在該位置,因爲它是war文件。

另外Spring Boot有開箱即用的Freemarker支持,所以我建議你使用它,而不是自己手動配置它。所以要解決。

  1. 刪除您的Freemarker配置
  2. 移動模板src/main/resources/templates

然後重新啓動應用程序。

作爲獎勵,我建議清理你的build.gradle。刪除初學者的顯式版本並刪除一些額外的依賴項,因爲它們已經包含在初學者中。您不需要Spring Boot涵蓋的jettywar插件。

而你的jar插件打破了默認的Spring Boot功能,Spring Boot插件已經完成了。

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'org.springframework.boot' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") { 
     exclude module: "spring-boot-starter-tomcat" 
    } 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty'' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-freemarker' 

    compile group: 'org.springframework', name: 'spring-orm' 

    compile group: 'mysql', name: 'mysql-connector-java' 
    compile group: 'org.hibernate', name: 'hibernate-core' 
    compile group: 'commons-validator', name: 'commons-validator', version: '1.5.1' 
    compileTest group: 'org.springframework.boot', name: 'spring-boot-starter-test' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.3' 
} 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE") 
    } 
} 

springBoot { 
    executable = true 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 
+0

謝謝,我將'page.ftl'移動到'src/main/resources/templates',它在我從IDE運行時起作用。之所以我甚至做了jar的功能,是因爲當我運行gradle clean jar時,生成的jar不是一個胖的jar,因此不包含spring boot jar,並且它總是說沒有主要的manifest屬性。我試圖修改我的gradle,並刪除了jar函數以外的所有內容。仍然不工作:(當我從我的IDE運行它,但它的工作 – Quillion

+0

謝謝!它的工作。只需要重新編譯一切 – Quillion

-1

首先,JavaEE無法運行在簡單的服務器上,它需要一個應用服務器,如Tomcat,Glasfish,Wildly等。 因此,請給出更多信息,比如如何部署jar文件?您使用了哪個應用程序服務器?你已經完成了什麼樣的配置?

+0

我使用彈簧引導。它部署了自己的碼頭,我不需要做任何事情。不是tomcat或glassfish的粉絲,也不是瘋狂的或其他的粉絲。而對於應用服務器,我使用的是簡單的'SpringBootApplication' – Quillion