我正在尝试编写一个需要公开一些我将与 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>
或者:
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>
只是想知道我们是否可以做任何我们想做的事情,或者是否有一些规则来构建这种东西?
谢谢
最佳答案
如果您真的打算使用“普通的”Servlet API 而不是更适合的 REST API,例如 JAX-RS (即,JSR311 和 Jersey 作为引用实现),然后我建议使用您的第一个示例中描述的 Front Controller 模式。这比 web.xml
更抽象被所有可能的污染 url-pattern
条目。
基本上,只有一个拦截所有请求的 Servlet,通过 HttpServletRequest#getPathInfo()
获取路径信息并根据请求方法和路径信息的组合相应地确定所需的操作。
至少,尝试看看他们是如何使用 Jersey(带有神圣的注释!)并尝试做同样的事情。或者,更好的是,不要重新发明轮子并使用它;)
关于servlets - 基本休息 api 的 Servlet 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064996/