当我将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>
答案 0 :(得分:4)
问题在于,单个Tomcat服务器可以部署多个应用程序,每个应用程序都在其所谓的上下文中。应用程序部署在webapps
文件夹中,每个文件夹都映射到一个上下文,而ROOT
文件夹是默认的(无上下文)。
要在Tomcat上访问应用程序,请在URL后指定上下文。例如,如果您在Test
文件夹中有一个应用程序(上下文)webapps/Test
,则可以像这样访问它:
http://localhost:8080/Test
但ROOT
文件夹中的应用程序没有上下文,只需转到localhost:8080
即可访问。这是你的情况。 Tomcat直接在ROOT
文件夹中查找您的应用程序,但您的应用程序位于ROOT/war
文件夹中。换句话说,RPC调用期望myproject
文件夹位于ROOT
文件夹下,而不是ROOT/war
文件夹下。这就是它无法正常工作的原因。
如果您仍希望将war
文件夹放在ROOT
文件夹中,则必须将url-pattern
更改为/war/myProject/call
。
答案 1 :(得分:1)
我找到了解决方案,它与Tomcat的操作方式有关。
错误是:我只将war目录(不是内容)压缩到project.war。
答案 2 :(得分:0)
看起来,servlet没有为你初始化war尝试将SERVLET标记更改为 即添加标签
<load-on-startup>1</load-on-startup>
此标记确保应加载servlet
<servlet>
<servlet-name>callServlet</servlet-name>
<servlet-class>com.myproject.server.dao.Call</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
希望这会起作用