战争文件没有在tomcat中执行

时间:2015-10-20 07:39:55

标签: rest tomcat

我是网络应用程序开发的新手。

我一直在开发一个休息Web服务,并在apache tomcat服务器上本地部署它。我正在使用sts。

现在,当我从sts执行我的应用程序时(作为java应用程序运行)。 它运行正常。我在localhost:8080点击了网址,一切都很好。

现在,我正在做以下事情:

  1. 为我的应用程序创建了一个名为sample-rest-service.war
  2. 的.war文件
  3. 在另一个系统上,我已经下载并安装了配置为在端口9999上运行的tomcat 8
  4. 我将.war文件复制到apache-tomcat-8.028
  5. 的webapps文件夹中
  6. 我使用startup.sh启动我的tomcat服务器
  7. 我在浏览器中输入localhost:9999并显示主页
  8. 我键入localhost:9999 / sample-rest-service,但是收到代码为404的错误消息
  9. 我键入localhost:9999 / examples,它运行正常,但是。内容出现
  10. 我检查了webapps文件夹,.war文件已被解压缩war文件和提取的文件夹都在那里。
  11. 我错过了什么?

    通常,如果我通过sts运行我的应用程序,我会这样做:

    1. 以Java Application身份运行
    2. 然后它要求我选择,我选择了Application-hello,其中Application是具有main()的类,而hello是包
    3. 之后在控制台中我可以读取Tomcat在端口上启动的消息:8080(http)
    4. 现在在我的浏览器中输入:http://localhost:8080/greeting
    5. 我以JSON
    6. 获得输出

      的web.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
        <display-name>sample-rest-service</display-name>
        <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
      </web-app>
      

      为了产生战争,我做了以下事情:

      1. 在我的项目中添加了maven war插件
      2. 将pom.xml中的包装从jar(默认)更改为war
      3. 导出战争文件
      4. 的pom.xml

        <?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>org.springframework</groupId>
            <artifactId>gs-rest-service</artifactId>
            <version>0.1.0</version>
        
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.2.6.RELEASE</version>
            </parent>
        
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>                            
            </dependencies>
        
            <properties>
                <java.version>1.7</java.version>
            </properties>
        
        
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.6</version>
                    </plugin>
                </plugins>
            </build>
        
            <repositories>
                <repository>
                    <id>spring-releases</id>
                    <url>https://repo.spring.io/libs-release</url>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>spring-releases</id>
                    <url>https://repo.spring.io/libs-release</url>
                </pluginRepository>
            </pluginRepositories>
        
        
            <packaging>war</packaging>
        </project>
        

1 个答案:

答案 0 :(得分:0)

事实证明,整个问题是建立战争文件。

通过sts构建可部署和可运行的war文件的正确方法解释为here

  1. 使用SpringBootServletInitializer扩展Application类,并覆盖configure方法

    @SpringBootApplication public class Application扩展了SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
    
  2. 在pom.xml中,提及包装标签内的战争

  3. 您需要将spring-boot-starter-tomcat依赖项标记为“已提供”