2

我是 Restlets 的新手。尝试配置 web.xml(在 JBoss 上)。我有 2 个条目,一个用于 servlet(与 Web 服务无关),另一个用于 Web 服务,使用 Restlet。这是条目..

 <servlet>
  <servlet-name>AuthenticationServlet</servlet-name>
  <servlet-class>com.safeid.web.server.api.servlet.AuthenticationServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>AuthenticationServlet</servlet-name>
  <url-pattern>/authenticate/*</url-pattern>
 </servlet-mapping>


<!--  Start of Entries for the REST Web Services. -->

  <context-param>
   <param-name>org.restlet.application</param-name>
   <param-value>com.safeid.web.server.SafeIDRouterApplication</param-value>
  </context-param>

 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>com.noelios.restlet.ext.servlet.ServerServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>


 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>
<!-- END of Entries for the REST Web Services.-->

两者不能一起工作。在上述设置中,Restlet 工作。但是,当我更改

RestletServlet /*

类似于

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/credential/*</url-pattern>
 </servlet-mapping>

Restlet 停止工作并且 AuthenticationServlet 工作正常。我在这里想念什么?

4

2 回答 2

3

我也有类似的挫败感。也许我发现的可能会有所帮助。

我的 Application 类中有 Router 条目,如下所示:

router.attach("/users", UsersResource.class);

当我的 servlet 映射如下时,一切正常:

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

当我把它改成这样的时候:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/users/*</url-pattern>
</servlet-mapping>

它停止工作。

问题在于 servlet 容器“消耗”或删除了它匹配的 URL 部分。在这种情况下,它会删除“/users”。因此,如果您使用这样的网址:

http://www.mywebsite.com/users

您必须将其更改为:

http://www.mywebsite.com/users/users

当然,您可以使 url-pattern 成为您想要的任何内容:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

然后你会像这样访问它:

http://www.mywebsite.com/rest/users

url-pattern 被剥离,你得到 Application 类中剩余的任何东西,用于你自己的路由目的。

高温高压

于 2011-09-09T21:29:25.627 回答
1

看起来您缺少 init-params ,如下例所示。

<servlet>
    <servlet-name>MyApplication</servlet-name> 
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>my.class.that.extends.Application.MyApplication</param-value>
    </init-param> 
</servlet>

您需要一个扩展 org.restlet.Application 的类(至少在 Restlet 2.0 中)。

于 2010-06-15T19:07:03.710 回答