Java GWT Tomcat对RPC调用的问题

Java GWT Tomcat对RPC调用的问题,java,gwt,tomcat,rpc,Java,Gwt,Tomcat,Rpc,当我将war文件部署到TOMCAT(TOMCAT/webapps/ROOT/war)时,GWT RPC调用似乎不起作用 这给了我一个错误: 请求的资源 (/war/myproject/call)不是 可用 如果我更改目录结构,然后直接部署war内容(而不是war目录本身),比如(tomcat/webapps/ROOT/project.html、project.css、project等),那么它就可以工作。 有人能解释一下发生了什么事吗 我认为可能存在以下问题: <servlet> &

当我将war文件部署到TOMCAT(TOMCAT/webapps/ROOT/war)时,GWT RPC调用似乎不起作用

这给了我一个错误:

请求的资源 (/war/myproject/call)不是 可用

如果我更改目录结构,然后直接部署war内容(而不是war目录本身),比如(tomcat/webapps/ROOT/project.html、project.css、project等),那么它就可以工作。

有人能解释一下发生了什么事吗

我认为可能存在以下问题:

<servlet>
<servlet-name>callServlet</servlet-name>
<servlet-class>com.myproject.server.dao.Call</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>callServlet</servlet-name>
<url-pattern>/myproject/call</url-pattern>
</servlet-mapping>

调用servlet
com.myproject.server.dao.Call
调用servlet
/我的项目/电话

看起来,servlet没有为您初始化,请尝试将servlet标记更改为 i、 e.添加标签

<load-on-startup>1</load-on-startup>
1
此标记确保应加载servlet

 <servlet>
 <servlet-name>callServlet</servlet-name>
 <servlet-class>com.myproject.server.dao.Call</servlet-class>
 <load-on-startup>1</load-on-startup>
 </servlet> 

调用servlet
com.myproject.server.dao.Call
1.

希望这能起作用,因为一台Tomcat服务器可以部署多个应用程序,每个应用程序都在其所谓的上下文中。应用程序部署在
webapps
文件夹中,每个文件夹都映射到一个上下文,而
ROOT
文件夹是默认文件夹(无上下文)

要访问Tomcat上的应用程序,请在URL之后指定上下文。例如,如果您在
webapps/Test
文件夹中有一个应用程序(上下文)
Test
,您可以这样访问它:

http://localhost:8080/Test
但是
ROOT
文件夹中的应用程序没有上下文,只需转到
localhost:8080
即可访问。这就是你的情况。Tomcat直接在
ROOT
文件夹中查找您的应用程序,但您的应用程序在
ROOT/war
文件夹中。换句话说,RPC调用期望
myproject
文件夹位于
ROOT
文件夹下,而不是
ROOT/war
文件夹下。这就是它不起作用的原因


如果您仍然希望将
war
文件夹放在
ROOT
文件夹中,则必须将
url模式
更改为
/war/myProject/call
我找到了解决方案,这与Tomcat的操作方式有关

  • 打开项目war目录
  • 选择所有文件(html/jsp、图像、WEB-INF等)
  • 将所有文件压缩到单个project.zip archieve中
  • 将project.zip重命名为project.war
  • 将project.war复制到Tomcat/webapps中/
  • 重新启动Tomcat服务器
  • 现在,您会注意到webapps目录中的project.war已解压缩到一个项目目录中,如果打开它,您将找到所有的.war内容(html/jsp、图像、WEB-INF等)
  • 从这里或index.jsp访问它

  • 错误是:我只是将war目录(而不是其内部内容)压缩到project.war中。

    部署后是否重新启动服务器,请尝试,可能会失败work@Imran是的,我认为这是个小错误。我使用GWT将JAVA编译为Javascript,我没有重新编译…尝试另外一件事不要将war放在根文件夹中直接放在webapp下,即$tomcat\webapps\yourproject.war非常好的答案,请告诉我如何更改@RemoteServiceRelative路径以工作。我想现在您的注释看起来是这样的:@RemoteServiceRelativePath(“myProject”)。我认为您需要将其更改为@RemoteServiceRelativePath(“war/myProject”)因此,它符合
    url模式
    。但我个人会将应用程序直接放入
    根文件夹
    或其他上下文,例如
    webapps/MyProject
    。我将项目部署到cloudbees。我选择了一个简单的.war文件进行上传。它会自动部署,无法访问我将其更改为@RemoteServiceRelativePath(“war/myProject”),它将为我提供404未找到请求的URIOh,然后尝试将url模式更改为
    /war/myProject/call
    ,并将注释更改为
    @RemoteServiceRelativePath(“myProject”)
    和@RemoteServiceRelativePath(“call”),/callI没有更改任何我留下的默认URL。GWT设计了它的文件夹结构,以便与外部服务器部署兼容。很高兴您解决了这个问题。我建议您使用Maven构建应用程序并生成WAR包。它确实值得学习,至少是基础知识,它将为您节省很多麻烦。干杯!