java - 在 Azure Tomcat 上部署 Java Web 应用程序和 Web 服务的差异

标签 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

key 文件是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 使用 /*

当我使用<url-pattern>/</url-pattern>时在 myWebService 上,则它无法在本地主机上运行。感谢帮助。如果需要,请随时询问更多信息(希望问题尽可能简短)。

最佳答案

根据您的描述和代码,我尝试成功重现您的myWebService问题。访问myWebServicehttp://myWebService.azurewebsites.net/myWebService问题404是由url-pattern<引起的Sample 类的 Method url 不匹配,请参阅下面的说明。

  1. 在类Sample中,类注解@Path("Sample")和方法注解@Path("/") for method Method 表示 myWebService 项目中类 Sample 的方法 Method 的可访问 url 为 http://myWebService.azurewebsites.net/myWebService/Sample/
  2. url-pattern/ 表示仅匹配 url http://myWebService.azurewebsites.net/myWebService/。<

针对您的情况有两种解决方案。

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

  2. 仅将类注释 @Path("Sample") 更改为 @Path("")@Path("/") 如果不更改 url-pattern,则其他类的任何路径注释都不会匹配。

关于java - 在 Azure Tomcat 上部署 Java Web 应用程序和 Web 服务的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860440/

相关文章:

java - 关于 BlueJ 中按钮的几个问题

java - openjdk : How to avoid fully recompilation of jdk after I modify jdk's code?

java - 从浏览器访问 java web 服务

java - Spring hibernate "You cannot commit during a managed transaction!"

c# - 如何与 Azure 解决方案分开部署静态内容?

java - 如果树集对象更改其值怎么办(树集的最佳实践?)?

java - 我可以在 mvn 中指定自定义生命周期方法吗

java - 在单元测试中有一个 spring 上下文

wcf - Azure 上 WCF REST/HTML 服务的联合身份验证(单点登录)

java - Azure构建错误: "Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8"