在Azure Tomcat

时间:2017-01-25 19:52:17

标签: java spring azure tomcat azure-webapps

我在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之后并在网址http://localhost:8080/myWebService/Sample上的本地Tomcat服务器上运行时,它正确地为我提供了XML <tag>123</tag>"

我希望以与之前的 myWebApp 相同的方式部署在Azure上,并尝试在网址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.xmlurl-pattern/个文件之间的差异:

  • myWebApp 使用/*
  • myWebService 使用<url-pattern>/</url-pattern>

当我在 myWebService 上使用x="1401081207 32.82" echo "${x// /0}" 时,它要么不在localhost上工作。感谢帮助。如果需要,请随时询问更多信息(希望尽可能缩短问题)。

1 个答案:

答案 0 :(得分:1)

根据你的描述&amp;代码,我试图成功地重现您的myWebService问题。访问404 http://myWebService.azurewebsites.net/myWebService myWebService的问题是由url-patternMethodSample网址Sample不匹配引起的,请参阅解释下方。

  1. 在课程@Path("Sample")中,方法@Path("/")的类注释Method和方法注释Method表示方法Sample的可访问网址myWebService项目中的班级http://myWebService.azurewebsites.net/myWebService/Sample/url-pattern
  2. /http://myWebService.azurewebsites.net/myWebService/表示仅匹配网址/*
  3. 您的案例有两种解决方案。

    1. 推荐。对/使用通配符url-pattern代替http://myWebService.azurewebsites.net/myWebService/Sample/并访问网址@Path("Sample")。并建议将类注释@Path("/Sample")更改为@Path("Sample")以便阅读和理解。

    2. 如果不更改@Path(""),则只将类注释@Path("/")更改为url-patternfoo,但其他类的任何路径注释都不会匹配。< / p>