bonjour
je programme une application avec des servlets qui affiche des pages html
y a-t-il une methode ou un autre outil qui permet de calculer le temps de chargement d'une page html
merci d'avance
bonjour
je programme une application avec des servlets qui affiche des pages html
y a-t-il une methode ou un autre outil qui permet de calculer le temps de chargement d'une page html
merci d'avance
tu peux utiliser le filter...
Dans le fichier web.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package .....; import ....; public final class TimerFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long startTime = System.currentTimeMillis(); chain.doFilter(request, response); long stopTime = System.currentTimeMillis(); System.out.println("Time to execute request: " + (stopTime - startTime) + " milliseconds"); request.setAttribute("Time", stopTime - startTime); } }
et hop dans ta jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <filter> <filter-name>Timer</filter-name> <filter-class>....TimerFilter</filter-class> </filter> <filter-mapping> <filter-name>Timer</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Code : Sélectionner tout - Visualiser dans une fenêtre à part Temps d'exécution de la requête : <bean:write name="Time" scope="request"/> ms
dabord merci pour la reponse
j'utilise des servlets et non des jsp
je veux savoir où puis-je mettre la class filtre par apport à ma servlet(menuservlet)?
La class Filter est appelée avant l'appel de la servlet automatiquement par le serveur d'application dès lors que l'url appelée matche avec le pattern défini dans le web.xml :Envoyé par mitoubratu n'as rien à coder de spécifique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <url-pattern>/*</url-pattern>
Après, si tu veux afficher le temps d'exécution de la servlet sur le client, tu es obligé d'utiliser une jsp pour récupérer la valeur de "Time" que tu as mis dans la request... en effet, l'appel de chain.doFilter(request, response) fait que tu appelles ta servlet... donc, le calcul du temps d'exécution se fait une fois que ta servelt ait fini de s'exécuter... ;-)
donc,on met la class filtre dans le code de ma servlet en remplacant chaine par le nom de ma servlet(menuservlet)
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain menuservlet)
throws IOException, ServletException
{
long startTime = System.currentTimeMillis();
menuservlet.doFilter(request, response);
long stopTime = System.currentTimeMillis();
System.out.println("Time to execute request: " + (stopTime startTime+
" milliseconds");
request.setAttribute("Time", stopTime - startTime);
}
}
puis
debut d'execution de ma servlet
la class TimeFilter est une class que tu écris dans un package (celui que tu veux); cette class n'a rien à voir avec ta servlet... ce sont 2 choses différentes.
Dans le fichier web.xml, tu mets le nom du package et de la class de la class TimeFilter que tu as précédemment créé.
C'est le serveur d'application TOUT SEUL qui appelle la class Filter, indépendament de ta servlet....
tu as donc :
la class filter pour calculer le temps d'exécution de la requête :
la servlet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public final class TimerFilter implements Filter { }
ce sont 2 objets java qui ne doivent pas être liés par la programmation : ils doivent compiler l'un sans l'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class MenuServlet extends HTTPServlet { ..... }
donc ce que je comprend est que la classe filtre qui est située dans ma servlet est éxecutée une fois ma servlet est appelée, et avant sa terminaison normalement la variable time contiendra la valeur du temps d'éxecution dont je doit la récuperer et l'afficher
et es-ce-que je peut utiliser ma servlet directement pour afficher le resultat ou bien utiliser une servlet a part
Qu'est-ce que tu entends par là ?Envoyé par mitoubra
Le principe du filtre, c'est que tu le mets en place indépendamment des servlets. Il sera appelé automatiquement par le serveur au moment qui va bien et de manière totalement transparente pour les servlets. Donc continue à utiliser tes servlets actuels, tu n'as besoin de rien faire de ce côté-là.
bon j'ai essayer mais ca na pas marcher.il y a une erreur
voici mon code de la classe filter
package projet1_0;
import javax.*;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
public class TimerFilter implements Filter {
public TimerFilter() {
}
public void init(FilterConfig filterConfig) throws ServletException {
throw new java.lang.UnsupportedOperationException("Method init() not yet implemented.");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
long stopTime = System.currentTimeMillis();
System.out.println("Time to execute request: " + (stopTime - startTime) +
" milliseconds");
request.setAttribute("Time", stopTime - startTime);
}
public void destroy() {
throw new java.lang.UnsupportedOperationException("Method destroy() not yet implemented.");
}
}
l'erreur est : "TimerFilter.java": setAttribute(java.lang.String,java.lang.Object) in javax.servlet.ServletRequest cannot be applied to (java.lang.String,long) at line 25, column 19
Quel dommage !! Ben lis bien le message : un long (avec un petit l) n'est pas un objet et ne peut donc pas être mis dans la requête en tant qu'attribut. Il faut que tu transformes ton long en objet (en Long (avec un grand L), donc) pour pouvoir le mettre dans la requête.Envoyé par mitoubra
salut
je travaille dans un enverenemment jbuilder9 et dans jbuilder9 en peut pas accedé directement au fichier web xml mais en fin j'ai réussit de modifié ce fichier(le code des filter)mais lorsque j'execute je trouve que le serveur web ne trouve pas ma premier servlet(menu servlet)
salut
j'ai réussit de fair sa (le code qui calcule le temps d'une requétte )mais l'ors de l'affichage il m' affiche deux temps en milisec pour la premiere servlet
par exemp menuservlet est ma premiere servlet im affiche pour elle 14ms et 146ms.
pourquoi !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager