2009-02-11 40 views
1

這裏就是我想要做的事:如何在另一個servlet的init()方法內使用一個servlet的輸出?

public void init(ServletConfig config) { 
    // ... 
    URL url = new URL("http://myhost:port/path/to/otherservlet"); 
    // ... do stuff with contents of url 
} 

這工作得很好,但爲myhost和端口進行硬編碼,我想避免這種情況。我想

URL url = new URL("/path/to/otherservlet"); 

但這是無效的。我也試過

config.getServletContext().getResource("/path/to/otherservlet"); 

但這隻適用於靜態文件。

如何使用獲取一個servlet來初始化另一個servlet的結果?我不想使用RequestDispatcher的forward()或include()方法 - 其他的servlet的結果是用於init()方法的,而不是在響應中發送的。

回答

1

我不會驚訝地發現它無法完成。我認爲toby的答案(將代碼分成普通類)是最好的方法,但如果實在不可能,請嘗試編碼用於本地請求的主機和端口作爲服務器的web.xml文件中的上下文參數:

<context-param> 
    <param-name>localhost</param-name> 
    <param-value>localhost</param-value> 
</context-param> 
<context-param> 
    <param-name>localport</param-name> 
    <param-value>8080</param-value> 
</context-param> 

並獲取值爲context.getInitParameter("localhost")等您也可以嘗試動態確定值,但您可能必須等待請求進來,因此您可以使用像HttpUtils.getRequestURL(req)之類的東西 - 我不知道任何其他方式去做吧。

+0

這也是我得到的結論,但我希望它不會如此。 – 2009-02-12 02:53:35

2

如果可能的話,我認爲更好的方法是將另一個servlet的代碼重構爲某個可以直接調用所需輸出的某個類。

+0

讓我們說這是不可能的。 – 2009-02-12 00:33:27

0

也許它會工作,如果你預先在servlet上下文的URL。

我同意重構聽起來像是一個更好的主意。如果它是一個初始化操作,並且兩個servlet都處於相同的上下文中,那麼參數可以外部化爲文件或數據庫,這樣兩者都可以將它們提取出來。

我不希望init太廣泛。

相關問題