4

サーブレットでリクエストを受け取るとき、関連する 1 つのリスナー クラスを実行したいと思います。これにはいくつかの命令が含まれています。

したがって、次のように、myListener にインターフェイス ServletContextListener を実装します。

public class MyContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("Context Created");
    }

}

私の web.xml で:

  <servlet>
    <servlet-name>StartUp</servlet-name>
    <servlet-class>com.servlets.StartUp</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>StartUp</servlet-name>
    <url-pattern>/StartUp</url-pattern>
  </servlet-mapping>

  <listener>
    <listener-class>com.servlets.MyContextListener</listener-class>
  </listener>

では、StartUp サーブレットでリクエストを受信するときに、リスナーを実行するにはどうすればよいですか?

4

1 に答える 1

5

は、 のServletContextListener初期化と破棄をリッスンするように設計されていますServletContext。つまり、webapp の起動時とシャットダウン時にのみ呼び出されます。

ServletRequestListener代わりに次のものが必要です。

@WebListener
public class MyRequestListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent event) {
        System.out.println("Request initialized");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent event) {
        System.out.println("Request destroyed");
    }

}

または、おそらく単純なサーブレット フィルター. 違いは、特定の URL パターンまたは特定のサーブレットをリッスンするように構成できることと、具体的に転送、含まれている、および/またはエラーが発生した要求をリッスンできることです。

@WebFilter("/StartUp") // or @WebFilter(servletNames={"StartUp"})
public class StartUpServletFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        System.out.println("Before StartUp servlet is invoked");
        chain.doFilter(req, res);
        System.out.println("After StartUp servlet is invoked");
    }

    // Don't forget the init() and destroy() boilerplate.

}
于 2013-04-19T19:32:16.487 に答える