Servlet - Определение времени задержки

Пример использования сервлетного фильтра включает сервлет TimerServlet.java и фильтр TimerFilter. TimerFilter - это простой, но очень мощный фильтр, позволяющий определять время обработки (задержки) запроса сервлетом. Чтобы воспользоваться этим фильтром, необходимо задекларировать его в дескрипторе поставки web.xml.


Исходный код сервлета TimerServlet.java
 
import java.io.*;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class TimerServlet extends HttpServlet implements Serializable
{
  public void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
   resp.setContentType("text/html;charset=windows-1251");
   int cnt = -1;
   try
   {
    cnt = Integer.valueOf(getInitParameter("counter"));
    for (int i = 1; i < cnt; i++)
    {
     double rr = cnt / i;
    }
   }catch(Exception e){e.printStackTrace();}
   PrintWriter out = resp.getWriter();
   out.println( "<html>" +
     "<head>" +
      "<title>Сервлет с фильтром</title>" +
     "</head>" +
     "<body bgcolor=white>" +
      "<h3>Измерение фильтром времени задержки в сервлете<h3>" +
      "<i>Результат измерений фиксируется в журнале " +
      "регистрации (logs/) за текущую дату.<br>" +
      "Для отключение/подключения фильтра к сервлету " +
      "необходимо внести изменения в файл web.xml." +
     "</body></html>"
   );
   out.close();
  }
}

-----------------------------------------------------------------------------------
Исходный код фильтра TimerFilter.java
 
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class TimerFilter implements Filter
{
  private boolean active = false;
  private FilterConfig config = null;
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  public void init (FilterConfig config) throws ServletException
  {
   this.config = config;
   String act = config.getInitParameter("active");
   if (act != null)
    active = (act.toUpperCase().equals("TRUE"));
  }
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  public void destroy()
  {
   config = null;
  }
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  public void doFilter (ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException
  {
   if (active)
   {
    long before = System.currentTimeMillis();
    chain.doFilter(request, response);
    long after = System.currentTimeMillis();
    String name = "";
    if (request instanceof HttpServletRequest)
    {
     name = ((HttpServletRequest)request).getRequestURI();
    }
    config.getServletContext().log("TimerFilter - "+ name + " : " + (after-before) + " ms");
   }else
    chain.doFilter(request, response);
  }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Код объявления сервлета TimerServlet.java в дескрипторе поставки web.xml
 
<!-- ~~~~~~~~~~~ TimerFilter start ~~~~~~~~~~~ -->
<filter>
  <filter-name>TimerFilter</filter-name>
  <filter-class>TimerFilter</filter-class>
  <init-param>
   <param-name>active<</param-name>
   <param-value>true</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>TimerServlet</filter-name>
  <servlet-name>/TimerServlet</servlet-name>
</filter-mapping>
<!-- ~~~~~~~~~~~ TimerFilter end ~~~~~~~~~~~ -->
<servlet>
  <servlet-name>TimerServlet</servlet-name>
  <servlet-class>TimerServlet</servlet-class>
  <init-param>
   <param-name>counter<</param-name>
   <param-value>999999</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>TimerServlet</servlet-name>
  <url-pattern>/TimerServlet</url-pattern>
</servlet-mapping>


Партнеры:


Rambler's Top100 Рейтинг@Mail.ru