我在Azure的Tomcat Servlet容器上进行部署时遇到麻烦。我通过FTP连接到创建的Web应用程序空间,并将war
文件复制到正确的文件夹。
myWebApp
我已经在Azure上成功部署了Spring MVC简单的Web应用程序。 URL模式在下面,并且两者都能按预期工作:http://myWebApp.azurewebsites.net/myWebApp
部署在Azure Tomcat上http://localhost:8080/myWebApp
部署在本地Tomcat上
密钥文件为以下web.xml
:
<web-app ... xsd schemas ... >
<display-name>myWebApp</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>... not important ...</context-param>
<listener>... not important ...</listener>
</web-app>
myWebService
好吧,当我想以相同的方式部署简单的Web服务并查看其内容时,就会出现问题。
我决定使用
jersey
库。这是唯一的示例类:@Path("Sample")
public class Sample {
@GET
@Path("/")
@Produces(MediaType.TEXT_XML)
public String Method() {
return "<tag>" + 123 + "</tag>";
}
}
clean install
并在URL http://localhost:8080/myWebService/Sample
上的本地Tomcat服务器上运行后,它正确地提供了XML <tag>123</tag>"
。我希望以与以前的myWebApp相同的方式部署在Azure上,并尝试在URL
http://myWebService.azurewebsites.net/myWebService
上运行。相反,它给了我404
错误,说请求的资源不可用。这肯定是
web.xml
:<web-app ... xsd schemas ... >
<display-name>myWebService</display-name>
<servlet>
<servlet-name>Jersey REST Service</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>nch.webservices</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
我缺少什么,我做错了?我注意到
web.xml
中两个url-pattern
文件之间的区别:myWebApp使用
/
myWebService使用
/*
当我在myWebService上使用
<url-pattern>/</url-pattern>
时,它要么在localhost上都不起作用。感谢帮助。如有需要,请随时询问更多信息(希望使问题尽可能简短)。 最佳答案
根据您的描述和代码,我尝试成功复制您的myWebService
问题。访问404
的http://myWebService.azurewebsites.net/myWebService
的问题myWebService
是由于url-pattern
与类Method
的Sample
网址不匹配引起的,请参见以下说明。
在类Sample
中,类注释@Path("Sample")
和方法@Path("/")
的方法注释Method
表示Method
项目中类Sample
的方法myWebService
的可访问URL是。http://myWebService.azurewebsites.net/myWebService/Sample/
值url-pattern
表示仅匹配URL /
。
针对您的情况有两种解决方案。
推荐的。对http://myWebService.azurewebsites.net/myWebService/
使用通配符/*
代替/
并访问URL url-pattern
。并建议将类注释http://myWebService.azurewebsites.net/myWebService/Sample/
更改为@Path("Sample")
以供阅读和理解。
如果不更改@Path("/Sample")
,仅将类注释@Path("Sample")
更改为@Path("")
或@Path("/")
,但其他类的任何路径注释都将不匹配。