1. ServletConfig对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为Servlet配置一些初始化参数。
当Servlet配置初始化参数后,web容器在创建Servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用Servlet的init()方法时,将ServletConfig对象传递个Servlet。进而程序员通过ServletConfig对象就可以得到当前Servlet的初始化参数信息。
常用API:
String getInitParameter(String name); // 根据初始化参数名获取对应的值 Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数名
1.1 在web.xml中配置初始化参数
<servlet> <servlet-name>ServletConfigDemo</servlet-name> <servlet-class>com.servlet.ServletConfigDemo</servlet-class> <init-param> <param-name>username</param-name> <param-value>schj-bera</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123456</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletConfigDemo</servlet-name> <url-pattern>/ServletConfigDemo</url-pattern> </servlet-mapping>
1.2 Servlet中获取ServletConfig,进而获取初始化参数
1 public class ServletConfigDemo extends HttpServlet { 2 3 // 不用再通过下面这种方式获取,因为HttpServlet的父类GenericServlet已经实现了getServletConfig方法来获取,直接调用即可 4 // private ServletConfig config; 5 // 6 // @Override 7 // public void init(ServletConfig config) throws ServletException { 8 // this.config = config; 9 // } 10 11 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 13 } 14 15 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 ServletConfig config = this.getServletConfig(); 17 // 根据初始化参数名获取对应的值 18 String username = config.getInitParameter("username"); 19 String password = config.getInitParameter("password"); 20 21 OutputStream out = response.getOutputStream(); 22 out.write("Use getInitParameter:\n".getBytes()); 23 out.write(("username = " + username + "\n").getBytes()); 24 out.write(("password = " + password + "\n\n\n").getBytes()); 25 26 out.write("Use getInitParameterNames: \n".getBytes()); 27 // 获取所有的初始化参数名 28 Enumeration<String> dates = config.getInitParameterNames(); 29 while (dates.hasMoreElements()) { 30 String name = dates.nextElement(); 31 String value = config.getInitParameter(name); 32 out.write((name + " = " + value).getBytes()); 33 out.write("\n".getBytes()); 34 } 35 } 36 }
2. ServletContext对象
web服务器在启动时,它会为每个web应用程序都创建一个对应的ServletContext对象,它代表当前的web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写Servlet时,可以通过ServletConfig.getServletContext方法获取到ServletContext对象。
由于一个web应用中的所有Servlet共享一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。