2013-05-30 115 views
0

在過去的一週中,我不得不在servlet和jsp上進行面試。無論如何,我完全鬆了面試。儘管在一個班級中有多個servlet,但真正讓我失望的是什麼。我練習過的所有東西都只有一個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

你是什麼意思_idea多個servlets在class_中。 'Servlet'是一個接口。你的意思是許多內部類實現該接口? –

+0

請原諒我不是那種知識淵博的人,它可能是內部類實現界面 – Calgar99

+2

您需要緊急閱讀[Servlet如何工作?實例化,會話變量和多線程](http://stackoverflow.com/q/3106452/1065197) –

回答

1

Java支持內部類。內部類可以擴展HttpServlet,因此可以作爲servlet在web.xml中編寫。

但是,沒有真正原因創建內部類(使servlet成爲內部類)是極端不好的做法。

還有一種想法是在相同的web.xml中多次部署同一個servlet,並使用不同的init參數來影響其行爲。這是有用的和良好的做法,有助於重用現有的代碼。

4

我覺得你有些困惑。 doDelete()HttpServlet類的可覆蓋方法,就像doPut()doGet()一樣。所有這些都被service()方法調用(它是Servlet接口的一部分,並且是由Servlet容器直接調用的唯一方法)來處理不同的methods of the HTTP protocol,即doGet()處理GET請求,doDelete()處理DELETE請求等。但它仍然一個單一的Servlet。您可能只熟悉doGet()doPost(),因爲其他人很少使用,但由於REST concept的日益流行,這種情況正在發生變化。

doSearch()doNew()HttpServlet中不存在,並且沒有包含這些名稱的HTTP方法。如果你真的在代碼中看到了這樣的方法,那麼它們只是用於將代碼分成更易管理的部分的常規方法 - 或者,您是否可能基於對所見的不正確概括來構建示例代碼?

+0

這很有可能。所以在一個index.jsp會像這樣的形式?

與\ product.doSearch相對。每種方法都會包含doGet/doPost方法,反之亦然? – Calgar99

+0

優秀的答案,很好的曝光和格式化,+1 –

+0

@ Calgar99在你的''你可以設置'method =「GET」'和'method =「POST」''觸發執行'doGet'或'doPost '方法。默認情況下,HTML使用'',除非你改變它。 –

2

如何註冊這些servlets?」

那些不是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); 
    } 
} 

當你做一個GET您可以在URL像這樣指定參數:

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

如果你在做一個POST,你通常用一個表單指定請求參數。

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


doDelete()方法實際上已經是HttpServlet類的一部分(如其他人指出的)。

0

我想你誤解了術語「servlet」。這實際上意味着一堂課。多個servlet意味着可以實現不同功能的多個類。

相關問題