我在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问题。访问404http://myWebService.azurewebsites.net/myWebService的问题myWebService是由于url-pattern与类MethodSample网址不匹配引起的,请参见以下说明。


在类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("/"),但其他类的任何路径注释都将不匹配。

10-06 12:36