2012-10-16 40 views
1

當使用註釋而不是web.xml文件時,如何處理通常可從ServletConfig對象讀取的Servlet init/config參數?即在Servlet規範3.0下傳遞servlet配置參數

@WebFilter("/sample") 
public class MyServlet { 

    public void init() throws ServletException { 
     String value = getServletConfig().getInitParameter("key"); 
     // or 
     value = getServletContext().getInitParameter("key"); 
    } 
} 

或在濾波器的情況下:

public class MyFilter implements Filter { 

    public void init (FilterConfig filterConfig) throws ServletException { 
     filterConfig.getInitParameter("key"); 
    } 

} 

更新:我知道你可以在註釋硬編碼的配置參數,但我不想硬編碼的配置設置到代碼。例如,這個servlet不能被兩個應用程序之間共享:

@WebFilter("/sample", initParams = {@InitParam(name = "database_host", value = "blah.com")}) 
public class MyServlet { 

    public void init() throws ServletException { 
     String value = getServletConfig().getInitParameter("database_host"); 
    } 
} 
+0

我不認爲這裏有任何中間立場,無論是使用web.xml還是註釋。 – Hiro2k

回答

0

我覺得這是你的意思

@Servlet(urlMappings={"/MyApp"}, initParams ={@InitParam(name="lang", value="english")}) 
public class MyServlet { 

您可以參考這個An Introduction To Servlet 3.0

+0

服務器和/或應用程序相關的配置設置不會硬編碼是不好的做法嗎? – Jacob

+0

@Jacob:那麼你應該使用web.xml,對吧?包括一個web.xml(至少在tomcat中)的 –

+0

會停止註解的工作。 – Jacob

1
@WebServlet(name = "TestServlet", urlPatterns = {"/test"}, 
initParams = {@WebInitParam(name="key", value="value")}) 

public class TestServlet extends HttpServlet { 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {   
     String key= getInitParameter("key"); 
    } 
} 

編輯:

要回答你更新的問題,你有兩個選擇:

  1. 使用使用web.xml基於初始化參數

  2. 剛剛創建的servlet中的其他項目的虛擬擴展(子類),並指定新的初始化參數的舊有格局。

+0

不會硬編碼服務器和應用程序相關的配置設置是不好的做法嗎? – Jacob

+0

只要我明白,註釋正在取代通過'xml'文件完成的配置。同樣在這裏。早些時候這是在'web.xml'文件中進行的,現在它保存在servlet本身中。 **將註釋視爲配置**。使用註釋的好處在於「所有相關信息現在都保存在同一個文件中,而不是瀏覽多個文件」。如果你想用某種特定的原因使用舊的模式,它仍然是好的和有效的。 –