0

在过去的一周里,我不得不参加 servlet 和 jsp 的速成课程以进行面试。无论如何,我完全搞砸了采访。真正让我失望的是在一个类中有多个 servlet 的想法。我所实践的一切都只有一个 servlet 执行一个功能。例如:

产品类

protected void doSearch(HttpServletRequest request, HttpServletResponse response)
//Complete method
protected void doNew(HttpServletRequest request, HttpServletResponse response)
//Complete method
protected void doDelete(HttpServletRequest request, HttpServletResponse response)
//Complete method

如何在 web.xml 中注册这些 servlet 并执行 doGet/doPost ?有谁知道我在哪里可以找到这种方法的例子?

4

4 回答 4

4

我觉得你有些困惑。doDelete()HttpServlet类的可重写方法,就像doPut()and一样doGet()。所有这些都是由service()方法(它是Servlet接口的一部分,也是Servlet容器直接调用的唯一方法)调用来处理HTTP协议的不同方法,即doGet()处理GET请求,doDelete()处理DELETE请求等。但它仍然单个 Servlet。您可能只熟悉doGet()anddoPost()因为其他很少使用,但是由于REST 概念的日益流行,这种情况正在发生变化。

但是不存在,doSearch()也没有具有这些名称的 HTTP 方法。如果您真的在代码中看到了这样的方法,那么它们只是用于将代码划分为更易于管理的部分的常规方法 - 或者您是否根据对所见内容的错误概括来编写示例代码?doNew()HttpServlet

于 2013-05-30T21:36:22.060 回答
2

如何注册这些 servlet?”

那些不是servlet。这些是方法(可能是 Servlet的一部分)。

您可以轻松地从和/或调用doSearch()or 。doNew()doGet()doPost()

例如,可以使用一个参数来指定 Servlet 调用的方法。

最简单的 ServletdoPost()方法可能如下所示:

protected void doPost(HttpServletRequest req, HttpServletResponse res) {
    String actionValue = req.getParameter("action");
    if ("search".equals(actionValue)) {
        doSearch(req, res);
    }
    else if ("new".equals(actionValue)) {
        doNew(req, res);
    }
}

当你这样做时,GET你可以在 URL 中指定一个参数,如下所示:

http://mysite.com/MyServletUrl?action=search

如果您正在执行此操作,POST您通常会使用表单指定请求参数。

例如,您可以使用下拉菜单或隐藏字段。


doDelete()方法实际上已经是HttpServlet类的一部分(正如其他人所指出的那样)。

于 2013-05-30T21:40:00.163 回答
1

Java 支持内部类。内部类可以扩展HttpServlet,因此可以在 web.xml 中作为 servlet 编写。

然而,在没有真正原因的情况下创建内部类(将 servlet 作为内部类)是非常 糟糕的做法。

另一个想法是在同一个 web.xml 中多次部署同一个 servlet,并使用不同的 init 参数影响其行为。这是有助于重用现有代码的适用且良好的做法。

于 2013-05-30T21:26:53.610 回答
0

我认为您误解了“servlet”一词。它实际上意味着一个类。多个 servlet 意味着可以实现不同功能的多个类。

于 2017-10-06T15:33:16.117 回答