2014-01-12 59 views
0

我正在編寫一個檢索請求參數的Servlet,但需要在init方法中使用它們。由於init方法將在doGet方法之前調用,並且由於init方法沒有將HttpServletRequest對象作爲參數,所以我不知道如何獲取請求參數。如何從servlet初始化方法獲取請求參數

public class OpenIdServlet extends HttpServlet 
{ 
    ... 
    ... 
    private OpenIdManager manager; 

    @Override 
    public void init() throws ServletException 
    { 
     super.init(); 
     manager = new OpenIdManager(); 
     manager.setRealm("http://localhost:8080/OpenIDSample"); 
     manager.setReturnTo("http://localhost:8080/OpenIDSample/openid"); //I need to append the value of a request parameter here... 
    } 
    ... 
    ... 
} 

所以現在的問題是:有什麼辦法可以在一個servlet的init()方法得到HttpServletRequest參數?如果沒有其他更好的方法可以用來解決這個問題?謝謝。

+0

說明庫OpenIdManager來自哪裏。 – McDowell

+0

@McDowell它來自JOpenID-1.08 – Jevison7x

回答

3

init在啓動時調用一次。所以你必須忍受部分returnTo,並根據請求處理(doGet/doPost)完成請求參數。

實際上,管理器似乎是依賴於請求的,因此應該在請求中創建 - 從不作爲字段。因爲可能有幾個請求。也許作爲會話屬性持久。

+1

增加了一個評論,說相同,+1;) – 2014-01-12 20:29:18

+0

@Joop Eggen:但是當我在doGet()方法中聲明它時,管理器拒絕工作。你熟悉這種OpenID技術嗎? – Jevison7x

+0

已知的技術,雖然沒有使用jOpenId庫。如果在init中需要,你可以給一個固定的URL,並在doGet/doPost中調用getAuthentication調用setUserPrincipal或設置一些會話屬性。 returnTo將會重定向。 –

1

你的問題沒有意義。 init()方法被調用時沒有請求。它在容器初始化過程中被調用。

你的意思是初始參數?它們可以通過作爲init()的參數提供的ServletContext來使用。

相關問題