【问题标题】:Starting the servlet when the application startup应用程序启动时启动 servlet
【发布时间】:2013-01-08 10:42:23
【问题描述】:

我想在加载 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>

我不知道做错了什么。

【问题讨论】:

  • 您的问题令人困惑。请清楚什么不起作用?以及你想要达到什么目的。很高兴为您提供帮助。
  • 启动 servlet 是什么意思?容器可以在启动时加载 servlet,这意味着 init 方法中的任何内容都将在启动时执行
  • 在我看来,您想实际导航或提交到 servlet,然后转发到 JSP。这样 servlet 可以做数据库的事情,在请求范围内准备一个漂亮的对象结构,然后 JSP 可以获取这些信息并显示它。
  • @RameshPVK 谢谢,代码永远不会到达 servlet 代码,总是从 jsp 页面开始。我尝试使用 servlet 侦听器,但无法正常工作。
  • @Gimby 确切地说,我正在尝试从 servlet 中的 db 检索数据并将其发送到 jsp 页面。但是当应用程序启动时 servlet 没有运行

标签: java servlets web.xml servlet-listeners


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你的代码是绝对正确的。你需要添加注解@WebListener

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

    【讨论】:

    • 请注意注释只是避免在 web.xml 中定义的另一种方式。
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多