在 Tomcat 中作为 ROOT 部署时 RPC/Servlet 不起作用

Posted

技术标签:

【中文标题】在 Tomcat 中作为 ROOT 部署时 RPC/Servlet 不起作用【英文标题】:RPC/Servlet not working when deployed in Tomcat as ROOT 【发布时间】:2011-12-08 01:44:03 【问题描述】:

我有一个已在 Tomcat 中部署的 GWT 应用程序。当我像这样将它部署在 webapps 文件夹中时:

webapps/mygwtapp

并从浏览器访问它,http://localhost:8080/mygwtapp 服务器端 RPC/Servlet 工作。

但是,当我将 mygwtapp 文件夹更改为 ROOT 文件夹时,RPC/Servlet 停止工作。

一个 servlet 配置,这在应用未部署为 ROOT 时有效:

  <servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/mygwtapp/greet</url-pattern>
  </servlet-mapping>

但是,当部署为 ROOT 时,它不起作用,即使我以这种方式更改 url 模式:

<url-pattern>/greet</url-pattern>

可能是什么问题?

【问题讨论】:

请解释具体是什么不起作用。如果可能,提供错误消息和/或堆栈跟踪。 RPC 失败,因为我认为 servlet url-pattern 映射不正确。 但是,当我将应用程序从 ROOT 传输到 webapps 文件夹中的 mygwtapp 时,它就可以正常工作(即,如果 url-pattern 是这样的:/mygwtapp/greet 顺便说一句,在客户端服务中有这个注释:@RemoteServiceRelativePath("greet"),这可能是问题吗? 【参考方案1】:

即使使用 ROOT 路径仍然可以是 '/mygwtapp/greet'

模式是[context] / [project name] / [servlet],所以在这种使用ROOT的情况下是/ + mygwtapp + 问候

1)检查页面上java脚本的路径,应该是...

<script type="text/javascript" language="javascript" src="mygwtapp/mygwtapp.nocache.js"></script>

我会使用跟踪工具来查看您在 javascript、Firefox/Firebird、Chrome/Developer Tools 或 IE/HttpWatch 中获得的结果是否良好。你应该得到一个 200,如果不是这个路径就是问题所在。

2)检查你在ROOT文件夹中的文件夹布局,你应该有以下内容

ROOT
 |->mygwtapp (your mygwtapp.nocache.js should be here)
 |->WEB-INF

3) 检查 web.xml 路径,应该是 /mygwtapp/greet 并且你的 @RemoteServiceRelativePath 应该是“greet”

希望对您有所帮助。

【讨论】:

使用您建议的这种方法,当我访问localhost:8080 时,它会自动处理 mygwtapp 吗?我的意思是喜欢将请求转发到 ROOT\mygwtapp? 当您加载页面时,localhost:8080/mygwtapp/mygwtapp.nocache.js 的跟踪结果是否为 200?

以上是关于在 Tomcat 中作为 ROOT 部署时 RPC/Servlet 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将带有 RPC 的 GWT 部署到 tomcat 的问题(可能是 web.xml 问题)

我在 tomcat 上部署了 GWT,现在 RPC 不起作用

怎么把工程部署在tomcat的root路径下

尝试在来自 GWT-RPC 项目的 Tomcat 7 上部署战争

部署 GWT 项目的问题

尝试从GWT-RPC项目获取的Tomcat 7上的部署战争