ITEEDU

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.php</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.php,如您所见的,您可以使用别名来隐藏网页所使用的技术细节,增加网页的安全性,浏览这个网页的使用者,也许完全不会 知道这个网页使用了JSP技术。

假设您的Web应用程序是在webapps/myjsp/下,如果使用以下的网址来浏览的话:

http://localhost:8080/myjsp/JSPConfigTest.php

那么实际上会呼叫注册名称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