<servlet> <servlet-name>BeerParamTests</servlet-name> <servlet-class>TestInitParams</servlet-class> <init-param> <param-name>addEmail</param-name> <param-value>lik@qq.com</param-name> </init-param> </servlet> 在servlet代码中能够通过 getServletConfig().getInitParameter("addEmail"): 调用getServletConfig() 不能在初始化參数之前调用 不能在init中调用 必须等servlet载入完才干够调用. ********容器初始化一个servlet时,会为这个Servlet创建一个唯一的ServletConfig******** 创建servletConfig步骤: 1.容器读取Servlet部署文件,包含servlet的初始化參数(init-param) 2.容器为这个servlet创建一个新的servletConfig实例 3.容器为每一个servlet初始化參数创建一个键值对。 4.容器向ServletConfig提供键值对初始化參数的引用. 5.容器创建servlet类的一个新实例 6.容器调用servlet的init方法 传入servletCOnfig的引用. 容器仅仅会读一次Servlet初始化參赛,在Servlet生命周期中无法改变这个值。除非又一次部署servlet. 上下文初始化參数。不不过针对一个Servlet可用,它是针对整个web应用,应用中全部Servlet和jsp都自己主动的能訪问 上下文初始化參数。
能够在web.xml中配置。
<servlet> </servlet> <context-param> <param-name>add</param-name> <param-value></param-value> </context-param> 在代码中,getServletContext().getInitParameter("add"); 或者ServletContext context = getServletContext(); context.getInitParameter("add"); 每一个servlet一个ServletConfig 每一个web应用一个ServletContext 假设web应用是分布的,那么每一个jvm就会有一个servletcontext。假设应用分布在多个server上 那么web应用实际上能够有多个servletContext。一个ServletContext确实仅仅相应一个应用,可是前提是应用 在一个jvm中. servletContext和ServletConfig仅仅有获取的方法,没有设置的值的方法。都是常量。 两种方法获取ServletContext对象 getServletConfig().getServletContext().getInitParameter(); 或者 this.getServletConfig().getServletContext(); ServletContextListener 监听ServletContext一生中关键两个事件。初始化和撤销. ServletContextListener能够做的工作: 1.上下文初始化时候的能够做:从servletContext得到上下文初始化參赛。 使用初始化參数查找名建立一个数据库连接 把数据库连接存储为一个属性,使得web应用各个部分都能訪问 上下文撤销时: 关闭数据库连接 public class MyServletContextListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){ //数据库连接代码 } public void contextDestroyed(ServletContextEvent event){ //关闭数据库连接代码 } } 以下是一个应用实例对与监听器的使用 public class MyServletContextListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){ //数据库连接代码 ServletContext sc = event.getServletContext(); String dogBreed = sc.getInitParameter("breed"); Dog d = new Dog(dogBreed); sc.setAttribute("dog",d);//利用上下文设置属性。在其它地方就能够获得属性 } public void contextDestroyed(ServletContextEvent event){ //关闭数据库连接代码 } } public class Dog{ private String breed; public Dog(String breed){ this.breed = breed; } public String getBreed(){ return breed; } } public class ListenerTester extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response)throws Excepton{ response.setContentType("text/html");\ PrintWriter out = response.getWriter(); Dog dog = (Dog)getServletContext().getAttribute("dog"); out.println(dog.getBreed()); } } web.xml部署文件 <servlet> </servlet> <servlet-mapping> </servlet-mapping> <context-param> <param-name>breed</param-name> <param-value>Great Dane</param-value> </context-param> <listener> <listener-class> com.gac.MyServletContextListener </listener-class> </listener>