两个简单的POST
和GET
网址 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.";
}
}
答案 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
设置方式。这些没有遵循(我的第一段中的观点),因此给人一种成功的错误印象(因为他们被嘲笑)。