什么是ServletConfig?
当web容器在创建servlet实例对象时,可以给每一个servlet设置初始化信息,而这些初始化信息会被自动封装到ServletConfig中。
当在调用servlet的init方法时,会将ServletConfig对象传递给servlet。因此通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
为什么要设置初始化信息?
在实际开发中,有一些东西不适合在servlet程序中写死,这类数据就可以通过配置方式配给servlet,如:
servlet采用哪个编码表,连接什么数据库等
原DemoServlet.java在web.xml中的相关配置为:
<servlet></servlet>
<servlet-mapping></servlet-mapping>
上边两个是一组,不能缺少!
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>cn.flying.servlet.DemoServelt</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
如何设置初始化信息?(写在某个Sevlet的web.xml中对应的配置中)
直接在web.xml中的servlet标签中进行配置(设置初始化信息),(带注释的,方便理解)如下:
<servlet> <servlet-name>demo</servlet-name> <servlet-class>cn.flying.servlet.DemoServelt</servlet-class> <!-- 为该servlet设置初始化信息:以key和value的形式存储数据 --> <init-param> <!-- 设置初始化信息的key --> <param-name>name</param-name> <!-- 设置初始化信息的value --> <param-value>张三</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping>
不要注释(注意与原来的对比一下):
<servlet> <servlet-name>demo</servlet-name> <servlet-class>cn.flying.servlet.DemoServelt</servlet-class> <init-param> <param-name>name</param-name> <param-value>张三</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping>
如何获取初始化信息?
获取初始化信息的常用方法:
1、getInitParameter(String name):通过key获取value值(适合单个key和value,如有n个,需要重复n遍部分代码)
DemoServlet.java完整代码如下:
package com.flying.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DemoServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig servletConfig = this.getServletConfig(); String name = servletConfig.getInitParameter("name"); System.out.println("name的值是:"+name); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
1 把项目/工程(servlet)发布到到tomcat中启动2 在地址栏中输入:http://localhost:8080/servlet/hello 回车确认
控制台显示:
name的值是:张三
2、getInitParameterNames():获取所有初始化信息的key,返回的是一个枚举,然后可以通过遍历枚举获取所有的key,在通过key来获取value。
DemoServlet.java完整代码如下:
package com.flying.servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DemoServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig servletConfig = this.getServletConfig(); Enumeration<String> names = this.getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement();//此时name(就相当于key)的值是web.xml中的name字符串,不是:张三 System.out.println(name+"的值是:"+servletConfig.getInitParameter(name)); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
1 把项目/工程(servlet)重新启动
2 在地址栏中输入:http://localhost:8080/servlet/hello 回车确认
【结果和上面的一样】
控制台显示:
name的值是:张三
【注意】
若web.xml中配置了多个初始化信息,采用2、getInitParameterNames()方法
如下:
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.flying.servlet.DemoServlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>张三</param-value> </init-param> <init-param> <param-name>name2</param-name> <param-value>李四 </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
1 把项目/工程(servlet)重新启动
2 在地址栏中输入:http://localhost:8080/servlet/hello 回车确认
控制台显示:
name的值是:张三
name2的值是:李四