【问题标题】:GWT Guice + RPC Service getting 404 Not FoundGWT Guice + RPC 服务得到 404 Not Found
【发布时间】:2023-03-18 16:25:02
【问题描述】:

我在访问我的服务时收到 404 Not found 异常...我正在向 GWT Guice webapp 添加一个非常简单的 servlet...我正在使用 RPC 来实现我的 servlet。

**更新(我的更改仍然遇到以下相同的问题):我意识到我可能需要在 ServletModule 类中进行绑定,所以我添加了这个:

protected void configureServlets() {
    bind(BCDWebImpl.class).in(Singleton.class);
    serve("/a-bcd/abcd/bcdWebUtil").with(BCDWebImpl.class);

我还在我的代码中添加了一个 Window.alert(GWT.getModuleBaseURL()),这个输出:

http://xx.xx.xx.xx:8080/a-bcd/abcd/

这是我从 firebug 得到的输出:

Request Headersview source
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Authorization   Basic YWxsVXNlcjpwYXNzd29yZA==
Cache-Control   no-cache
Connection  keep-alive
Content-Length  148
Content-Type    text/x-gwt-rpc; charset=utf-8
Cookie  JSESSIONID=97FA0BE47F77E170C18B105C509F980D
Host    xx.xx.xx.xx:8080
Pragma  no-cache
Referer http://xx.xx.xx.xx:8080/a-bcd/
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
X-GWT-Module-Base   http://xx.xx.xx.xx:8080/a-bcd/abcd/
X-GWT-Permutation   35D972F27B5773A4C5ACAFE8EA5C1F36

这是我的 web.xml:

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
    <servlet-name>BCDWebImpl</servlet-name>
    <servlet-class>com.pz.abcd.server.rest.BCDWebImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>BCDWebImpl</servlet-name>
    <url-pattern>/a-bcd/abcd/BCDWeb</url-pattern>
</servlet-mapping>

BCDWeb 类:

@RemoteServiceRelativePath("bcdWeb")
public interface BCDWeb extends RemoteService
{
  public String getName ();
}

gwt.xml:

<module rename-to='abcd'>
    <servlet class="com.pz.abcd.server.rest.BCDWebImpl" path="/bcdWeb" />

BCDEntryPoint.java:

public void onModuleLoad() {
    // This is required for Gwt-Platform proxy's generator
    DelayedBindRegistry.bind(ginjector);        

    ginjector.getPlaceManager().revealCurrentPlace();
    setUpEnv();

}

private void setUpEnv(){
    BCDWebAsync web = GWT.create(BCDWeb.class);
    ServiceDefTarget endpoint = (ServiceDefTarget)web;
    endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "bcdWeb");
    web.getName(new AsyncCallback<String>() {

        @Override
        public void onFailure(Throwable caught) {
            GWT.log(caught.getMessage());
        }

        @Override
        public void onSuccess(final String name) {
            // do something here;  
        }
    });
}

同样,这个 webapp 正在使用 guice,但我正在尝试添加一个非常简单的 RPC servlet...任何想法可能是什么问题?

提前致谢。

【问题讨论】:

  • 您是否使用Guice Servlets 和/或您是否在web.xml 中设置了GuiceFilter
  • 是的,webapp 确实使用了 Guice Servlets,并且 GuiceFilter 是在 web.xml 中设置的。虽然我只是想添加一个简单的 RPC servlet...我想知道这是否因为 Guice 设置而无法实现...
  • 在 guice 设置中添加 RPC servlet 时我是否还有其他特殊配置?我尝试向 ServletModule 类添加绑定,但这并没有改变我的错误。我还在我的 BCDWebImpl 类中添加了一个 @Singleton 注释......仍然没有工作。
  • 1) 如果你使用 Guice Servlet,你不需要在你的 web.xml 中声明任何东西(除了 guicy 的东西);只需在configureServlets() 中使用您的映射。 2)你不需要在你的模块中声明servlet。 3)您不需要在您的setUpEnv() 中使用ServiceDefTarget,只需依赖已经与您的abcd 模块相关的on @RemoteServiceRelativePath("bcdWeb")。 4)错字:bcdWebUtil(在serve())与bcdWeb(在@RemoteServiceRelativePath)。不能多说。

标签: java gwt firebug guice rpc


【解决方案1】:

网址格式区分大小写

你给了web.xml

<url-pattern>/a-bcd/abcd/BCDWeb</url-pattern>
                            ^____
                                 |
 @RemoteServiceRelativePath("bcdWeb");   //and using the path in small letters.

尝试将模式更改为

<url-pattern>/a-bcd/abcd/bcdWeb</url-pattern>  

【讨论】:

  • 尝试给出完整路径@RemoteServiceRelativePath(a-bcd/abcd/bcdWeb)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多