基本休息 api 的 Servlet 映射?

use*_*114 4 servlets

我正在尝试编写一个需要公开一些我将与 ajax 一起使用的方法的 Web 应用程序。我可以创建一个 servlet 来路由所有传入的请求,或者我可以创建多个 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>
Run Code Online (Sandbox Code Playgroud)

或者:

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>
Run Code Online (Sandbox Code Playgroud)

只是想知道我们是否可以做任何我们想做的事情,或者是否有一些规则来构建这种东西?

谢谢

Bal*_*usC 5

如果您真的打算使用“普通的”Servlet API 而不是像JAX-RS这样更合适的 REST API (即,JSR311Jersey作为参考实现)来做到这一点,那么我建议您使用 Front Controller 模式,如您的第一个例子。这比被web.xml所有可能url-pattern条目污染的更抽象。

基本上,只有一个 Servlet 拦截所有请求,获取路径信息HttpServletRequest#getPathInfo()并根据请求方法和路径信息的组合相应地确定所需的操作。

至少,尝试看看他们是如何使用 Jersey(带有神圣的注释!)并尝试做同样的事情。或者,更好的是,不要重新发明轮子并使用它;)