Java 一个类中有多个servlet

Java 一个类中有多个servlet,java,jsp,servlets,Java,Jsp,Servlets,在过去的一周里,我不得不为面试做一个servlet和jsp的速成课程。无论如何,我的面试完全失败了。然而真正让我感到不快的是在一个类中有多个servlet的想法。我所练习的每件事都只有一个servlet执行一个函数。例如: 产品类别 protected void doSearch(HttpServletRequest request, HttpServletResponse response) //Complete method protected void doNew(HttpServletR

在过去的一周里,我不得不为面试做一个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?有人知道在哪里可以找到这种方法的示例吗?

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

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


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

我想你有些困惑
doDelete()
HttpServlet
类的可重写方法,就像
doPut()
doGet()
一样。所有这些都由
service()
方法(它是
Servlet
接口的一部分,也是Servlet容器直接调用的唯一方法)调用,以处理不同的请求,即
doGet()
处理GET请求,
dodelite()
处理删除请求等,但它仍然是一个Servlet。您可能只熟悉
doGet()
doPost()
,因为其他的都很少使用,但随着应用程序的日益普及,情况正在发生变化

但是
HttpServlet
中不存在
doSearch()
doNew()
,并且没有具有这些名称的HTTP方法。如果您真的在代码中看到了这样的方法,那么它们只是用于将代码划分为更易于管理的部分的常规方法——或者您可能是基于您所看到的错误概括而编写示例代码的吗?

“如何注册这些servlet?”

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

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

例如,可以使用参数指定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);
    }
}
http://mysite.com/MyServletUrl?action=search
执行
GET
时,可以在URL中指定如下参数:

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);
    }
}
http://mysite.com/MyServletUrl?action=search
如果您正在执行
POST
,通常会使用表单指定请求参数

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



dodelite()
方法实际上已经是类的一部分(正如其他人所指出的)

我想你误解了“servlet”这个词。它实际上意味着一门课。多个servlet意味着可以实现不同功能的多个类

在一个类中使用多个servlet是什么意思<代码>Servlet是一个接口。你是说许多内部类实现了这个接口吗?请原谅我不是那么了解这个接口,它可能是内部类实现了这个接口。你需要紧急阅读你包含的代码,看起来它更像是属于一个Servlet,可以执行多个不同的功能。我没有看到任何暗示多个servlet在一个类中的内容。我对这些方法的解释是:将一个参数传递给servlet,该servlet指定所需的行为。基于参数的值,Servlet调用其中一个方法(通过传递请求和响应对象)。@jahroy其中
doDelete()
继承自
HttpServlet
,其余的是自定义的。这是很有可能的。那么在index.jsp中,表单是否会这样?与\product.doSearch相反。doGet/doPost方法是否包含在每个方法中,反之亦然?@Calgar99在
中,您可以设置
method=“GET”
method=“POST”
来触发执行
doGet
doPost
方法。默认情况下,HTML使用
,除非您更改它。我理解这一点,但在“doSearch”方法中包含“protected void doPost(HttpServletRequest,HttpServletResponse)”或其他方法?。您是通过JSTL发送“doSearch”参数,还是有更直接的执行“doSearch”的方法?
doPost()
mehod将调用
doSearch()
。有许多方法可以将参数传递给servlet。这完全取决于前端的外观。对于
GET
请求,可以在URL中传递如下参数:
http://mysite.com/MyServletUrl?action=search
。然后Servlet将检查名为
action
(在其
doGet()
方法中)的参数值,并根据该值决定调用哪个方法。我将在我的答案中添加一些基本的示例代码。。。