如何在通过Jsp访问的servlet中实现ServletContextListener

时间:2013-11-13 13:27:08

标签: java jsp servlets servletcontextlistener

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

我已经创建了一个servet但是这个servlet不是按照要求的,所以请求不是从jsp表单到servlet,我知道要在servlet中添加什么来获取jsp页面的命中和输入.. < / p>

这是我的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页面(Context)获取用户输入。

提前致谢...

2 个答案:

答案 0 :(得分:1)

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

ServletContextListener用于初始化和清理应用程序中使用的资源。 有关ServletContextListener的正确使用,请参阅this帖子。

答案 1 :(得分:1)

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

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