我最近正在开始一个新的Java Web项目,并正在尝试广受好评的Spring MVC框架。我使用Java servlet的编码经验大约是在6年前,所以我有点生疏了。经过2天的研究和测试,我未能将简单的Hello World应用程序(使用Gradle构建)部署到测试云(使用Linux和Tomcat 8的AWS Elastic Beanstalk)。更重要的是,根据我在网上找到的所有文件,我无法理解事情的真实联系。
以下是一些我无法找到明确答案的问题:
如何确定我应该在build.gradle中包含哪些Spring框架依赖项?在线示例提出了不同的建议。目前我的依赖项设置是
dependencies {
compile 'org.springframework:spring-context:4.2.4.RELEASE'
compile 'org.aspectj:aspectjrt:1.7.4'
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'javax.servlet:jstl:1.2'
}
我的源文件只有两个简单的Java文件:
{project_root} /src/main/java/test/Greeter.java
package test;
public class Greeter {
public String sayHello() {
return "Hello world!";
}
}
{project_root} /src/main/java/test/HelloWorld.java
package test;
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}
到目前为止,gradle build是成功的。 我应该在哪里存储我的JSP文件(视图)?
我应该如何配置web.xml
以及告诉Tomcat文件所在位置所需的任何其他XML?我应该在哪里存储这些XML?
我应该如何配置build.gradle
来编译一个.war文件,该文件具有在Tomcat上运行我的Spring Web应用程序所需的所有资源?我目前的build.gradle
如下:
apply plugin: 'java'
apply plugin: 'war'
repositories {
mavenLocal()
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
war {
version = '0.4'
baseName = 'collaborative-system'
}
project.webAppDirName = 'webapp'
dependencies {
compile 'org.springframework:spring-context:4.2.4.RELEASE'
compile 'org.aspectj:aspectjrt:1.7.4'
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'javax.servlet:jstl:1.2'
}
sourceSets {
main {
java {
srcDir 'src'
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
服务器现在显示404页面,其中构建了.war文件。
答案 0 :(得分:1)
对Spring Framework和Spring Boot必须有一些理解:
Spring Boot是一个可以轻松创建基于Spring的应用程序的工具。它可以帮助您包含所需的所有依赖项,自动配置项目,嵌入一个servlet容器,如Tomcat,Jetty等。简而言之,它可以帮助您启动而无需配置所有内容。对于初学者来说,这几乎是必须的。 (感谢@chrylis的建议。)
.jar
文件是一个独立的可执行版本。 Spring Boot使您可以轻松运行应用程序,而无需在计算机上配置servlet。 Spring文档声明:
这个jar很方便,因为它包含所有其他依赖项和诸如归档中的Web服务器之类的东西。你可以给任何人这个.jar,他们可以毫不费力地运行你的整个Spring应用程序:不需要构建工具,没有设置,没有web服务器配置等:只是java -jar ... your.jar。
如果您需要像我一样将应用程序部署到外部servlet(例如,用于AWS),则必须构建.war
文件。 .war
和.jar
之间的区别在于.war
不包含嵌入式容器依赖项,因此允许您自己的servlet容器执行应用程序。要将.jar
转换为.war
,请按照以下指南操作:https://spring.io/guides/gs/convert-jar-to-war/
通过构建.war
文件,您还需要配置以告诉您自己的servlet容器在startUp上运行哪个类。传统上,我们使用web.xml
但是对于servlet 3.0+,Spring已将其替换为SpringBootServletInitializer
。它是一个方便的类,将您的应用程序绑定到servlet。只需执行以下操作:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootAwsApplication.class);
}
}
SpringBootAwsApplication是包含public static void main(String[] args)
方法的主类。
我建议任何遇到Spring Boot问题的人 SOLELY 参考官方文档:http://docs.spring.io/spring-boot/docs/1.3.2.BUILD-SNAPSHOT/reference/html/。仅当您无法在文档中找到相关信息时,请在线参考其他示例。
希望这有助于某人。
答案 1 :(得分:0)
您没有提供足够的信息。我猜想,一旦你部署了.war文件,你就试图访问它:
http://localhost:8080/collaborative-system/viewname
假设这是正确的,您必须记住,您需要一个正确注释的Controller类,并返回一个与您在WEB-INF/jsp/
文件夹中的视图名称相匹配的字符串。如果你不这样做,那么它根本就不是一个Spring项目。