2010-02-15 38 views
4

我正在學習Servlets和JSP。我想知道「doGet」和其他可能會被過度使用的方法。 「doGet」需要2個參數 - HTTPServletRequest請求和HTTPServletResponse響應。這是我的問題:請求和響應對象在方法體內使用,但我沒有看到任何對象創建,例如request =新的HTTPServletRequest。這些對象是否在別處創建在超類中?這只是一個Java問題,因爲我經常對Applets也有所疑問,即Graphics g對象被傳遞給「paint」方法,但是我沒有看到它在任何地方創建?是否將參數傳遞給與創建對象相同的方法?

GF

+0

刪除servlet相關的標籤,因爲這是比一個更基本的問題。 – skaffman 2010-02-15 22:20:14

回答

2

在您給出的兩個示例中,servlet和applet中,代碼在容器中運行。 Tomcat是servlet的容器​​,這意味着容器提供了某些功能。在這種情況下,容器將創建請求和響應對象,並將它傳遞給您的servlet。

如果您編寫一個自行運行的普通Java程序,那麼您有責任創建所有對象。

+0

是的,這解釋了它的好處。有趣的是,大多數Java書並沒有真正解釋這一點。當然有人在過去對此有所懷疑。不管怎麼說,多謝拉。 – Grungefreak 2010-02-15 22:31:51

+0

@Grungefreak我認爲書中的解釋是存在的,但它可能沒有完全按照你需要的方式表述。這是關於stackoverflow的偉大之處......你可以問一個非常具體的問題,並按照你需要的方式來理解事情。 – 2010-02-15 22:35:14

+0

是的,我完全同意。這個簡短的線程爲我解決了很多困惑。我假定術語「呼叫站點」是調用(方法調用者)的代碼段的實際方法? – Grungefreak 2010-02-15 22:38:36

2

一般地,在任何編程語言中,當一個方法被調用的對象(或就此而言的任何參數)的情況下,是的,創建這些對象某處

在大多數情況下,你不必擔心哪裏,只是他們跟他們打交道是你的函數內部時。

雖然可能會出現某些情況,即通過非傳統方式(取決於技術堆棧)創建對象,但您可以放心,如果您有參考到一個在你寫的方法中傳遞給你的對象,然後它是在調用堆棧中的某個地方使用傳統的方式創建的(或者如果你有多個線程的話)。

在Java的情況下,這意味着有人在某個時候調用了new ...,並將它提供給方法的調用站點,以便將其作爲參數傳遞給它。

+0

好的,我接受我可能在這裏深入挖掘,但我正試圖深入瞭解發生了什麼。對於小程序中的「paint()」方法,將傳入一個Graphics對象。當小程序在瀏覽器內運行時,Java插件是否以某種方式創建圖形對象,因爲我無法看到它在哪裏創建? GF – Grungefreak 2010-02-15 22:28:53

+0

@GrungeFreak:是的,這正是它所做的。 JVM將與其創建Graphics對象的任何平臺進行交互,然後在適當時調用您的paint方法,並將實例傳入。 – casperOne 2010-02-15 23:17:02

1

它是由Web服務器創建(Tomcat的,例如),並調用你的servlet這個參數

0

在調用點創建對象。即調用該方法的人負責創建他/她作爲參數傳遞給方法的對象(當然,除非他傳遞已存在的對象,但以前也在某處創建了這些對象)。

+0

作爲一般性聲明,這不是事實。對象創建可以發生在許多不同的地方。它不*有*在呼叫站點。這只是呼叫站點必須有權訪問它想要作爲參數傳遞的創建對象。 – casperOne 2010-02-15 22:24:33

+0

@casperOne:這就是爲什麼我寫道「除非他傳遞已經存在的對象」。 – sepp2k 2010-02-15 22:29:07

0

在Servlet中的所有方法由servlet容器調用,如Tomcat

相關問題