2010-06-17 72 views
3

我正在嘗試編寫一個Web應用程序,需要公開一些我將與ajax一起使用的方法。我可以讓一個servlet路由所有傳入的請求,或者我可以創建多個servlet,每個請求類型一個。喜歡的東西:基本rest API的Servlet映射?

public class ServletMain extends HttpServlet { 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException 
    { 
     // parse the path and figure out which service call was made. 
    } 
} 

// web.xml 
<servlet-mapping> 
    <servlet-name>SerlvetMain</servlet-name> 
    <url-pattern>/foo/a</url-pattern> 
    <url-pattern>/foo/b</url-pattern> 
    <url-pattern>/foo/c</url-pattern> 
</servlet-mapping> 

或:

public class ServletA extends HttpServlet; 
public class ServletB extends HttpServlet; 
public class ServletC extends HttpServlet; 

// web.xml 
<servlet-mapping> 
    <servlet-name>SerlvetA</servlet-name> 
    <url-pattern>/foo/a</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>SerlvetB</servlet-name> 
    <url-pattern>/foo/b</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>SerlvetC</servlet-name> 
    <url-pattern>/foo/c</url-pattern> 
</servlet-mapping> 

只是想知道,如果我們可以做任何我們想要的,或者,如果有一些規則,如何構建這種東西?

感謝

+0

如果您有靈活性,那麼使用像[RESTlet](http://www.restlet.org/)這樣的庫會更好一些不得不重新發明輪子。 – 2010-06-17 19:35:24

回答

3

如果你真的打算用「純香草」的Servlet API,而不是一個更適合REST API來做到這一點像JAX-RS(即JSR311Jersey作爲參考實現),那麼我建議去的前面的控制器模式,如第一個例子所示。這是比web.xml污染與所有可能url-pattern條目更好地抽象。

基本上,只有一個Servlet攔截所有請求,抓取HttpServletRequest#getPathInfo()的pathinfo,並根據請求方法和pathinfo的組合確定相應的操作。

至少,看看他們他們如何與澤西(與神聖的註釋!)並嘗試做同樣的事情。或者,更好的是,不要重新發明輪子並使用它;)