我正在尝试编写一个需要公开一些我将与 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)
只是想知道我们是否可以做任何我们想做的事情,或者是否有一些规则来构建这种东西?
谢谢
如果您真的打算使用“普通的”Servlet API 而不是像JAX-RS这样更合适的 REST API (即,JSR311和Jersey作为参考实现)来做到这一点,那么我建议您使用 Front Controller 模式,如您的第一个例子。这比被web.xml所有可能url-pattern条目污染的更抽象。
基本上,只有一个 Servlet 拦截所有请求,获取路径信息HttpServletRequest#getPathInfo()并根据请求方法和路径信息的组合相应地确定所需的操作。
至少,尝试看看他们是如何使用 Jersey(带有神圣的注释!)并尝试做同样的事情。或者,更好的是,不要重新发明轮子并使用它;)
| 归档时间: |
|
| 查看次数: |
3960 次 |
| 最近记录: |