2010-06-15 84 views
2

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

<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工作正常。我在这里错过了什么?

+1

最后的映射应该工作。 “停止工作”是什么意思?究竟发生了什么?您是否调用了正确的URL并且是正确位置的资源?请从开发者的角度来阐述,而不是从最终用户的角度来阐述。 – BalusC 2010-06-15 13:04:19

+0

不工作,我的意思是这是一个404错误。 – 2010-06-15 16:13:28

回答

3

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

我在我的应用级路由器条目是这样的:

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”。所以,如果你使用这样的URL:

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类中剩余的任何东西。

HTH

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(至少在2.0的Restlet反正)的一类。

+0

哦..我有它。上面的网页片段。xml是与我正面临的问题相关的问题。 我现在正在考虑将webservice与servlet/war代码的其余部分分开。 – 2010-06-15 20:22:54