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