在过去的一周里,我不得不参加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?有没有人知道我在哪里可以找到这种方法的例子?
答案 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意味着可以实现不同功能的多个类。