From Gossip@caterpillar

JSP/Servlet: config

 

 


config隱含物件轉換為Servlet之後,對應於javax.servlet.ServletConfig 型態的物件,ServletConfig 是有關於Servlet設定資訊的物件,要瞭解ServletConfig,不免要牽涉到對web.xml中Servlet的註冊名稱之瞭解。

到目前為止在執行JSP網頁時,並不用在web.xml中設定任何的資訊,對於每一個JSP網頁的執行,它們預設的Servlet註冊名稱是jsp,您可以為每一個JSP網頁註冊一個Servlet名稱,並設定URL-Pattern對應,對每一個擁有註冊名稱的Servlet, Container會為該名稱產生一個實例,這個實例可以擁有自己的初始參數設定。

先來看看如何設定JSP網頁對應的Servlet註冊名稱,並設定一些初始參數,首先我們設定web.xml,在當中加入一些標籤設定:

  • web.xml
 ...
<servlet>
<servlet-name>JSPConfigTest</servlet-name>
<jsp-file>/configtest.jsp</jsp-file>
<init-param>
<param-name>count</param-name>
<param-value>100</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>JSPConfigTest</servlet-name>
<url-pattern>/JSPConfigTest.html</url-pattern>
</servlet-mapping>
...

<servlet>標籤用來設定有關於Servlet的設定,<servlet-name>設定 Servlet註冊名稱,這個註冊名稱產生的實例來自於configtest.jsp轉換後的Servlet類別,也就是<jsp- file>所設定的內容,<init-param>用來設定初始參數,<param-name>是參數名稱,而< param-value>是對應於參數名稱的參數值。

<servlet-mapping>用來設定Servlet註冊名稱的別名,您將JSPConfigTest這個註冊名稱對應至 JSPConfigTest.html,如您所見的,您可以使用別名來隱藏網頁所使用的技術細節,增加網頁的安全性,瀏覽這個網頁的使用者,也許完全不會 知道這個網頁使用了JSP技術。

假設您的Web應用程式是在webapps/myjsp/下,如果使用以下的網址來瀏覽的話:
http://localhost:8080/myjsp/JSPConfigTest.html

那麼實際上會呼叫註冊名稱JSPConfigTest所對應的JSP檔案,也就是configtest.jsp,假設這個網頁的內容如下:

  • configtest.jsp
...
<%
out.println("Servlet Name: " +
config.getServletName() + "<br>");
out.println("Initial count: " +
config.getInitParameter("count"));
%>
...

getServletName()可以取得Servlet的註冊名稱,而getInitParameter()可以取得指定的初始參數設定值,您也可以試著使用getInitParameterNames()來取得所有的初始參數名稱,下面是網頁的執行結果:
Servlet Name: JSPConfigTest
Initial count: 100