在项目中,有一些经常使用的代码,我们需要保存到配置文件里,在Web.xml中提供了良好的方法进行参数的读取
一、Web.xml中参数的设定
(1)设置全局参数,该参数所有的Servlet都可以访问
<!-- 设置全局参数 --> <context-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </context-param>
(2)设置局部参数,该参数只有相应的Servlet能够访问
<!-- 设置局部参数 --> <servlet> <servlet-name>InitServlet</servlet-name> <servlet-class>servlets.InitServlet</servlet-class> <init-param> <param-name>driverClassName</param-name> <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value> </init-param> </servlet>
此时设置的参数仅在该Servlet中有效,其他Servlet不能访问
二、获取参数
获取全局参数的方法如下所示:
ServletContext application=this.getServletContext();
application.getInitParameter("参数名称");
获取局部参数的方法如下所示:
this.getInitParameter("参数名称");//此处的this指Servlet本身
用下面的Servlet来接受Web.xml中设置的参数:代码如下所示:
package servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class InitServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext application = this.getServletContext(); String encoding = application.getInitParameter("encoding"); System.out.println("encoding参数是:" + encoding); String driverClassName = this.getInitParameter("driverClassName"); System.out.println("driverClassName参数是:" + driverClassName); PrintWriter out = response.getWriter(); out.println("driverClassName:"+driverClassName); //在这儿测试使用获取全局变量的方式获取局部参数 String driverClassName_test=application.getInitParameter("driverClassName"); out.println("driverClassName_test:"+driverClassName_test); System.out.println("driverClassName_test参数是:" + driverClassName_test); } }
下面就是web.xml配置的全部代码:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 设置全局参数 --> <context-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </context-param> <!-- 设置局部参数 --> <servlet> <servlet-name>InitServlet</servlet-name> <servlet-class>servlets.InitServlet</servlet-class> <init-param> <param-name>driverClassName</param-name> <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>InitServlet</servlet-name> <url-pattern>/InitServlet</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
由于全局代码设置的encoding为utf-8,故显示结果为utf-8,而局部代码设置的是sun.jdbc.odbc.JdbcOdbcDriver,照样显示,而当使用全局代码的方式去查看局部代码是,取到的值为null,具体如下图所示: