一个类中的多个servlet

时间:2013-05-30 21:21:53

标签: java jsp servlets

在过去的一周里,我不得不参加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 个答案:

答案 0 :(得分:4)

我觉得你有些困惑。 doDelete()HttpServlet类的可覆盖方法,就像doPut()doGet()一样。所有这些都由service()方法调用(它是Servlet接口的一部分,并且是Servlet容器直接调用的唯一方法)来处理不同的methods of the HTTP protocol,即{{1处理GET请求,doGet()处理DELETE请求等。但它仍然是一个Servlet。您可能只熟悉doDelete()doGet(),因为其他人很少使用,但由于REST concept的日益普及,这种情况正在发生变化。

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

答案 1 :(得分:2)

如何注册这些servlet ?”

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

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

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

最简单的形式是,Servlet的doPost()方法可能如下所示:

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类的一部分(正如其他人所指出的那样)。

答案 2 :(得分:1)

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

然而,在没有真正原因的情况下创建内部类(使servlet成为内部类)是非常不好的做法。

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

答案 3 :(得分:0)

我认为你误解了术语" servlet"。它实际上意味着一堂课。多个servlet意味着可以实现不同功能的多个类。