2

使用 GWT 时,我们使用以下 URL 形式:

调试:

http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997#hash

编译:

http://127.0.0.1:8888/index.html#hash

我需要能够访问底层的 Rest API。

我需要在“根”中映射

http://127.0.0.1:8888/{contentId}

但是,这肯定会破坏 GWT 应用程序的访问权限,并且将无法再访问它。

考虑到在根目录中拥有 Rest API 的主要要求,我如何才能使这项工作协同工作?

web.xml

<?xml version="1.0" encoding="UTF-8"?>
       <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
       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_3_0.xsd">


    <context-param>
        <param-name>resteasy.guice.modules</param-name>
        <param-value>org.jboss.errai.ui.demo.server.MyModule</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

编辑:

这个想法是我应该能够做到这两点:

http://127.0.0.1:8888/index.html#hash

http://127.0.0.1:8888/abc123

也就是说,与“GWT servlet”共存,因为 GWT servlet 和 Rest API“servlet”都将部署在同一服务器和同一 webapp 路径中。

4

1 回答 1

0

显然,您需要在自己的 servlet 中处理根上下文。基本思想是将 YourRoutingServlet 映射到 /* 路径,然后通过分析请求路径(gwt 或 rest)来处理 get/post 和其他调用,并将处理委托给适当的 servlet。

根据您的应用程序特定,您可以扩展例如 gwt servlet(RemoteServiceServlet) 并检查请求 url,如果这是一个 gwt url(带有#hash),则只需调用 super 方法,如果不是,则将 req/resp 委托给 rest servlet。

这也意味着您必须在您的 servlet 中有 rest servlet 实例,或者您可以使用 servlet 重定向(我不建议这样做)

于 2013-05-30T08:11:10.817 回答