【问题标题】:GWT + Glassfish 4 : Error 404 for RPC servletGWT + Glassfish 4:RPC servlet 的错误 404
【发布时间】:2015-05-07 17:42:24
【问题描述】:

我为使用 eclipse 制作的 GWT 应用程序创建了一个 servlet。当我在 TOMCAT 中部署它时,它运行良好,但在 Glassfish 中我有一个 404 错误。

我没有部署错误,主 html 页面加载良好。但是任何使用 RPC servlet 的东西都会给我这个错误:

com.google.gwt.user.client.rpc.StatusCodeException: 404 Not Found
HTTP Status 404 - Not Found

type Status report

messageNot Found

descriptionThe requested resource is not available.

GlassFish Server Open Source Edition 4.1

我的 web.xml 是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">

    <!-- Servlets -->
    <servlet>
        <servlet-name>testServlet</servlet-name>
        <servlet-class>com.test.server.testServiceImpl</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/webclient/test</url-pattern>
    </servlet-mapping>

    <!-- Default page to serve -->
    <welcome-file-list>
        <welcome-file>Webclient.html</welcome-file>
    </welcome-file-list>

</web-app>

在 RPC 的存根中,我有这个 com.test.client.testService

@RemoteServiceRelativePath("test")
public interface testService extends RemoteService {

还有 servlet:

public class testServiceImpl extends RemoteServiceServlet implements testService 

注意事项:

当应用程序在 tomcat 中运行时,如果我在 URL 中写入 servlet 名称,则会显示此错误:

localhost:8080/webclient/webclient/test

状态 HTTP 405 - 此 URL 不支持方法 HTTP GET

看来,其实已经加载好了。但是什么时候在 Glassfish:

HTTP 状态 404 - 未找到

我错过了什么?谢谢!

【问题讨论】:

  • 我猜问题是你在 web.xml 中定义了/webclient/test,但在RemoteServiceRelativePath 中只定义了test。您可以尝试将两者都设置为test 并打开localhost:8080/webclient/test 吗?另外,Tomcat 和 Glassfish 上的上下文路径 webclient 是吗?

标签: java tomcat servlets gwt glassfish


【解决方案1】:

在 TOMCAT 中使用 GET 的行为是正确的 (405)..但是 404 很奇怪。您的 Glassfish 日志中有更多信息吗? .检查此项目...

0)。检查 URL 的模式。 URL 应该是http://hostname/nameOfWAR/{urlPatter_into_web.xml}

1). 进行测试以在 Web 应用程序的根目录上部署一个 HelloWord jsp..并检查应用程序是否部署良好并显示一些结果..

2)。假设“webclient”是您的 WAR 应用程序,您是否在部署到 Glassfish 时在您的应用程序中导出或包含了 gwt-user jar:gwt-user-xxx.jar?如果您使用 Eclipse,您可以使用部署程序集或将 jar 定位到战争的 lib 位置。

3.) 检查已编译的 gwt 类上的序列化策略文件是否有问题。它是一个 .gwt.rpc 文件...这必须在 classpath 上。如果这是问题,它应该是通过异常获得更多信息,等等... [也可以覆盖此文件的位置,覆盖 SerializationPolicy]

【讨论】:

    【解决方案2】:

    尝试将@RemoteServiceRelativePath("test")改为@RemoteServiceRelativePath("/webclient/test")

    一般来说,&lt;servlet-mapping&gt; 元素应该是你的应用程序的绝对目录路径的形式。你可以阅读这篇有用的文章http://www.gwtproject.org/doc/latest/tutorial/RPC.html

    请注意,类名应使用大写。我知道这可能是一个测试项目,但很快就习惯了。

    【讨论】:

      【解决方案3】:

      解决了!我没有检查 glassfish 的 server.log。 RPC servlet 的转换出错:

      rpc servlet 无法转换为 javax.servlet.Servlet

      问题是我弄乱了库并在类路径中添加了 javax*,而 Glassfish 不需要这个。我删除了我留在 domain/lib/ext 中的所有其他库,并且运行良好。

      感谢您的支持!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        相关资源
        最近更新 更多