【问题标题】:How to implement ServletContextListener in servlet accessed through Jsp如何在通过Jsp访问的servlet中实现ServletContextListener
【发布时间】:2013-11-26 03:08:10
【问题描述】:

我有一个要求,我需要调用从 jsp 页面命中的 ServletContextListener 的 contextInitialized 和 contextDestroyed 方法。根据我的需要,我必须使用从 Jsp 页面收到的一些计时器输入参数,但我是无法做到这一点...

我已经创建了一个servet,但是这个servlet不符合要求,所以请求不会从jsp表单发送到servlet,我知道要在servlet中添加什么来获取来自jsp页面的点击和输入..

这是我的 Servlet 页面..

@WebListener()
public class MyContext implements ServletContextListener {

//private ScheduledExecutorService sched;
Timer timer = new Timer();

@Override
public void contextInitialized(ServletContextEvent event) {
    //sched = Executors.newSingleThreadScheduledExecutor();
    //sched.scheduleAtFixedRate(new MyTask(), 0, 5, TimeUnit.SECONDS);


    Calendar date = Calendar.getInstance();
    date.set(
            //Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
            Calendar.DAY_OF_MONTH, 12);
    date.set(Calendar.HOUR, 00);
    date.set(Calendar.MINUTE, 11);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);


    timer.schedule(
            new MyTask(),
            date.getTime(),
            1000 * 60 * 60 * 24 * 7);

}

@Override
public void contextDestroyed(ServletContextEvent event) {
    //sched.shutdownNow();
    timer.cancel();
}

}

这是我的jsp页面..

 <form action="MyContext" method="GET">
        <label>Set Date: </label>
        <input type="text" name="date" id="date">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <label>Set Time: </label>
        <input type="text" name="time" id="time">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input type="Submit" name="Submit" value="Submit" id="Submit">
    </form>

这是我的 web.xml 文件..

<servlet>
    <servlet-name>MyContext</servlet-name>
    <servlet-class>MyContext</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyContext</servlet-name>
    <url-pattern>/MyContext</url-pattern>
</servlet-mapping>
<listner>
    <listner-class>
 MyContext
    </listner-class>>
</listner>>

请大家帮助我如何将用户输入从 jsp 获取到 servlet 页面(上下文)。

提前谢谢...

【问题讨论】:

  • ServletContextListener 用于在 Web 应用程序启动或销毁时获取通知。为什么要从 JSP 向 ServletContext 传递一些东西?
  • @PrasadKharkar 先生,我在 ServletContextListener 中设置了一个计时器,我需要用户设置该计时器的值才能在用户提供的时间执行操作
  • 我猜你误解了你的功能需求。请发布它,您可能会收到更好,更准确的指导。

标签: java jsp servlets servletcontextlistener


【解决方案1】:

您不能将任何数据从 JSP 传递给这些方法,因为它们是 Web 应用程序的生命周期方法。 contextInitialized在看到jsp之前就火了。

ServletContextListener 用于初始化和清理应用程序中使用的资源。 请参阅this 帖子以了解如何正确使用 ServletContextListener。

【讨论】:

    【解决方案2】:

    如果您想根据用户的请求更改计时器的超时时间,您必须:

    • 将定时器放入ServletContext中,以便其他组件(如servlet或jsp)可以访问它。将此添加到您的听众的 contextInitialized event.getServletContext().setAttribute("timer",timer);
    • 使用 getServletContext().getAttribute("timer") 从 servlet 访问您的计时器
    • 您甚至可以从 JSP 访问您的计时器,它将存储在 application 范围内

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2011-05-14
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2013-11-24
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多