猿教程 Logo

ServletContextEvent和ServletContextListener

当Web应用程序部署在服务器上时,会通知ServletContextEvent。

如果要在部署Web应用程序时执行某些操作,例如创建数据库连接,创建项目的所有表等,则需要实现ServletContextListener接口并提供其方法的实现。


ServletContextEvent类的构造方法

在ServletContextEvent类中只定义了一个构造函数。 Web容器在ServletContext实例之后创建ServletContextEvent的实例。

  1. ServletContextEvent(ServletContext e)


ServletContextEvent类的方法介绍

ServletContextEvent类中只定义了一种方法:

public ServletContext getServletContext():返回ServletContext的实例。


ServletContextListener接口的方法介绍

ServletContextListener接口中声明了两种方法,这些方法必须由servlet程序员实现,以执行一些操作,如创建数据库连接等。

public void contextInitialized(ServletContextEvent e):在应用程序部署在服务器上时被调用。

public void contextDestroyed(ServletContextEvent e):当应用程序从服务器中取消部署时被调用。


ServletContextEvent和ServletContextListener的案例

在这个例子中,我们从emp32表中检索数据。 为了实现这一点,我们在监听器类中创建了连接对象,并在servlet中使用了连接对象。

index.htm

<a href="servlet1">fetch records</a>

MyListener.java

import javax.servlet.*;
import java.sql.*;
public class MyListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent event) {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
//storing connection object as an attribute in ServletContext
ServletContext ctx=event.getServletContext();
ctx.setAttribute("mycon", con);
}catch(Exception e){e.printStackTrace();}
}
public void contextDestroyed(ServletContextEvent arg0) {}
}

MyListener.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class FetchData extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
//Retrieving connection object from ServletContext object
ServletContext ctx=getServletContext();
Connection con=(Connection)ctx.getAttribute("mycon");
//retieving data  from emp32 table
PreparedStatement ps=con.prepareStatement("select * from emp32",
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=ps.executeQuery();
while(rs.next()){
out.print("<br>"+rs.getString(1)+" "+rs.getString(2));
}
con.close();
}catch(Exception e){e.printStackTrace();}
out.close();
}
}



使用ServletContextListener创建表格的案例

在这个例子中,我们会创建项目的表格。 所以我们不需要在数据库中手动创建所有的表。

MyListener.java

import javax.servlet.*;
import java.sql.*;
public class MyListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent arg0) {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("
jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
String query="create table emp32(id number(10),name varchar2(40))";
PreparedStatement ps=con.prepareStatement(query);
ps.executeUpdate();
System.out.println(query);
}catch(Exception e){e.printStackTrace();}
}
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("project undeployed");
}
}



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Servlet/ServletContextEvent.html