JSP&Servlet 學習筆記(五)

16,使用ServletConfig

ServletConfig相當於個別Servlet的設置信息代表對象,這意味着可以從ServletConfig中取得Servlet設置信息。

ServletConfig定義了getInitParameter(),getInitParameterNames()方法,可以取得設置Servlet時的初始參數。

使用註解設置個別Servlet的初始參數,可以在@WebServlet中使用@WebInitParam設置initParams屬性。

@WebServlet(name="ServletConfigDemo",urlPatterns={"/conf"},
initParams={
@WebInitParam(name="PARAM1",value="VALUE1"),
@WebInitParam(name="PARAM2",value="VALUE2")

}
)
public class ServletConfigDemo extends HttpServlet{
private String PARAM1;
private String PARAM2;
public void init() throws ServletException{
PARAM1=getServletConfig().getInitParameter("PARAM1");
PARAM2=getServletConfig().getINitParameter("PARAM2");
}
}

由於ServletConfig必須在Web容器將Servlet實例化後,調用有參數的init()方法再將之傳入,是與Web應用程序資源相關的對象,所以在繼承HttpServlet後,

通常會重新定義無參數的init方法以進行Servlet初始參數的取得。

Servlet初始參數通常作爲常數設置,可以將一些Servlet程序默認值使用註解設置爲初始參數,之後若想變更那些信息,可以創建web.xml進行設置,

以覆蓋註解設置,而不用修改源代碼,重新編譯,部署的操作。

17,使用ServletContext

ServletContext接口定義了運行Servlet的應用程序環境的一些行爲與觀點,可以使用ServletContext實現對象來取得所請求資源的URL,設置與存儲屬性,

應用程序初始參數,甚至動態設置Servlet實例。通過ServletConfig的getServletContext()方法可以取得ServletContext對象。以下爲需要注意的幾個方法:

(1)getRequestDispatcher()

取得RequestDispatcher實例。使用時路徑的指定必須以"/"作爲開頭,這個斜槓代表應用程序環境根目錄。

context.getRequestDispatcher("/pages/some.jsp").forward(request,response);

以"/"作爲開頭有時稱爲環境相對路徑,沒有"/"作爲開頭則稱爲請求相對路徑。實際上HttpServletREquest的getRequestDispatcher()方法在實現時,

若是環境相對路徑,則直接委託給ServetContext的getRequestDispatcher();若是請求相對路徑,則轉換爲環境相對路徑,在委託給ServletContext的getRequestDispatcher()來取得RequestDispatcher。

(2) getResourcePaths()

如果想要知道Web應用程序的某個目錄中有哪些文件,則可以使用getResourcePath()方法;

such as: for(String avatar:getServletContext().getResourcePaths("/")){}

(3)getResourceAsStream()

如過想在Web應用程序中讀取某個文件的內容,則可以使用getResourceAsStream()方法,使用時指定路徑必須以"/"作爲開頭,表示相對於應用程序環境根目錄,

運行結果返回InputStream實例,接着運用其讀取文件內容。

當使用java.io下的與文件讀取相關的類時,必須注意,使用相對路徑指定時,此時路徑不是相對於Web應用程序根目錄,而是相對於啓動Web容器時的命令執行

目錄,這是許多初學者都會由的誤解。以Tomcat爲例,若在Servlet中執行以下語句:

out.println(new File("filename").getAbsolutePath());

其會顯示filename是位於Tomcat目錄下的bin目錄中。

每個Web容器都會由一個相對應的ServletContext,由於ServletContext以Servlet名稱作爲開頭,容易被誤認爲僅是單一Servlet的代表對象。

In fact,當整個Web應用程序加載Web容器之後,容器會生成一個ServletContext作爲整個應用程序的代表,並設置給ServletConfig。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章