Servlet在部署到Tomcat时无法工作,尽管它在IntelliJ IDEA中工作

时间:2018-06-15 17:07:24

标签: maven tomcat intellij-idea jersey jax-rs

两个简单的POSTGET网址 localhost:8080 / mdht-restlet ,从IntelliJ IDEA运行时都可以正常运行。另外, mdht-restlet.war 进入 / opt / tomcat / webapp 部署,在Tomcat应用程序管理器中显示为正在运行, catalina中没有错误或警告。出。 GET和POST都产生404.无论我是从命令行mvn package生成WAR文件,还是从IDEA Build-> Build Artifacts...生成WAR文件,结果都是相同的。

如上所述,它可以从IDEA Run / Debug中完美运行。我不确定要看什么。以下是一些相关细节:

web.xml 内容:

  <servlet>
    <servlet-name>mdht-restlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.windofkeltia.servlet</param-value>
    </init-param>    
  </servlet>

  <servlet-mapping>
    <servlet-name>mdht-restlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
WAR的

pom.xml 构建插件:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>${maven-war-plugin.version}</version>
    <configuration>
      <webResources>
        <resource>
          <!-- this is relative to the project parent directory -->
          <directory>web</directory>
        </resource>
      </webResources>
    </configuration>
  </plugin>

MdhtRestlet.java

package com.windofkeltia.servlet;
...
@Path( "/mdht-restlet" )
public class MdhtRestlet
{
  @POST
  @Consumes( MediaType.TEXT_PLAIN )
  @Produces( MediaType.TEXT_XML )
  public Response postPatientData( @Context HttpServletRequest request, @Context HttpHeaders header )
  {
    ...
  }

  @GET
  @Produces( MediaType.TEXT_PLAIN )
  public String getStatusInPlainText()
  {
    return "The MDHT restlet is up.";
  }
}

1 个答案:

答案 0 :(得分:0)

答案是Tomcat将WAR文件的名称(在本例中为 mdht-restlet.war )视为根(除非您将WAR文件重命名为 Tomcat部署到 ROOT 的ROOT.war ,因此URL将以 http://localhost:8080/mdht-restlet 开头。除此之外,servlet Java代码使用类级别的@PATH注释添加到URL。这会将其扩展为 http://localhost:8080/mdht-restlet/mdht-restlet ,因此较短的网址永远不会超过404。

为什么IntelliJ IDEA会这样做?可能是因为Run/Debug Configuration选项卡(对于Tomcat)和Server选项卡中的设置之间的Deployment设置方式。这些没有遵循(我的第一段中的观点),因此给人一种成功的错误印象(因为他们被嘲笑)。