应用程序启动时启动servlet

时间:2013-01-08 10:42:23

标签: java servlets web.xml servlet-listeners

我想首先在加载jsp页面之前触发servlet类,因为我需要在jsp页面中填充数据库中的一些数据。 web.xml中的Servlet映射

    <servlet>
        <servlet-name>Index</servlet-name>
        <servlet-class>com.Teklabz.Servlets.IndexServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Index</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>

但它没有用,当跟踪代码时它永远不会到达servlet类。 我也试图像这样link使用ServletContextListener,但我遇到了同样的问题。

监听器代码:

public class ServletListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

web.xml代码:

    <listener>
        <listener-class>com.techlabz.listener.ServletListener</listener-class>
    </listener>

我不知道出了什么问题。

2 个答案:

答案 0 :(得分:3)

您可以通过多种方式实现这一目标。

  1. 您可以在服务方法com.Teklabz.Servlets.IndexServlet中填充数据,然后在request属性中设置数据,然后转发到jsp
  2. 如果您想使用loadonstartiup,那么您可以在com.Teklabz.Servlets.IndexServlet servlet的init方法中填充db中的数据,然后将其设置在某个可访问范围(request,session,context)中并直接设置访问jsp从该范围获取数据。
  3. 在监听器中你也可以这样做,但在这种情况下你也需要在某个范围内设置数据。

答案 1 :(得分:0)

你的代码是完全正确的。你需要添加注释@WebListener

  @WebListener
   public class ServletListener implements ServletContextListener{
    //your code
   }