2009-06-21 4 views
0

j'avais fait mon projet J2EE ..programme Java, pour surveiller le site que je l'ai fait en utilisant J2EE

Je voulais garder une trace de tous qui a visité mon site ,, avec des informations spécifiques de leur (pour par exemple le temps qu'ils ont visité, adresse IP etc ..) Comment puis-je faire cela avec l'aide du programme java ,,

Je peux stocker les informations dans la base de données. donc ce dont j'ai besoin, c'est la logique quant à la façon dont je peux récupérer les informations de la personne qui a visité le site. serveur Tomcat ,, et j'utilise jsp + Servlets ..

Merci ..

+1

Quel serveur Java EE utilisez-vous? Glassfish? JBoss? WebSphere? WebLogic? –

Répondre

0

Vérifiez la API ServletRequest. En particulier, regardez getRemoteAddr(), l'adresse IP distante de votre client, getRemoteHost() et getRemotePort(). J'espère que la plupart de vos clients n'utiliseront pas de proxy, ou vous obtiendrez les informations des procurations.

Une autre technique consiste à définir un cookie d'identification unique pour chaque client, puis chaque requête suivante portera ce cookie. C'est probablement une meilleure approche que le suivi des adresses IP. Voici un tutorial sur la gestion des cookies dans les servlets.

Les outils d'analyse de niveau de serveur Web sont une autre approche, par suggestion d'altCognito.

+0

je suis un débutant .. s'il vous plaît donner un petit exemple pour démontrer cette classe .. – AGeek

3

AWStats est ce que vous devriez vraiment considérer. Exécutez-le sur vos journaux Access. Je vous comprends voulez pour utiliser une application Java, mais vous devez vraiment, vraiment envisager AWStats parce que c'est un produit mature. Il faudra beaucoup de temps pour répliquer en Java ce que AWStats fait déjà.

0

Nous avons également utilisé AWStats lors de mon travail précédent. La direction et les clients semblaient être satisfaits.

Je suppose que quand vous avez dit j'avais fait mon projet J2EE, vous voulez dire une application d'entreprise qui fonctionne sur un serveur J2EE tels que Glassfish, JBoss, Weblogic, Geronimo, etc.

Si vous ne Pas besoin de solution sophistiquée, vous pouvez vous en sortir avec un servlet filter ou un paramètre valve dans Tomcat (qui est généralement intégré dans la plupart des serveurs J2EE).

0

Voici un petit exemple d'obtention d'informations à partir d'un HttpServletRequest en utilisant un ServletRequestListener.

Commencez par ajouter l'écouteur au fichier de configuration web.xml. Ce fichier doit se trouver dans le dossier WEB-INF.


    <listener> 
     <description>RequestListener</description> 
     <listener-class>web.MyRequestListener</listener-class> 
    </listener> 

Dans la configuration ci-dessus le nom ServletRequestListenerMyRequestListener est situé dans le package web.

Ensuite, créez MyRequestListener dans le package web comme suit.


package web; 

import javax.servlet.*; 

public class MyRequestListener implements ServletRequestListener { 

    public void requestInitialized(ServletRequestEvent event) { 
     HttpServletRequest request = (HttpServletRequest)event.getServletRequest(); 
     System.out.println("request initialized"); 
     System.out.println("Request Remote Addr = " + request.getRemoteAddr()); 
     System.out.println("Request Remote Host = " + request.getRemoteHost()); 
     System.out.println("Request Remote Port = " + request.getRemotePort()); 
     java.util.Enumeration e = request.getAttributeNames(); 
     while(e.hasMoreElements()) { 
      String attName = (String)e.nextElement(); 
      Object val = request.getAttribute(attName); 
      System.out.println("Request Att (" + attName + ") = " + val.toString()); 
     } 
     e = request.getParameterNames(); 
     while(e.hasMoreElements()) { 
      String paramName = (String)e.nextElement(); 
      Object val = request.getParameter(paramName); 
      System.out.println("Request Param (" + paramName + ") = " + val.toString()); 
     } 
     e = request.getHeaderNames(); 
     while(e.hasMoreElements()) { 
      String headerName = (String)e.nextElement(); 
      Object val = request.getHeader(headerName); 
      System.out.println("Header (" + headerName + ") = " + val.toString()); 
     } 
    } 

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

Tout le code ne consiste pas à imprimer les attributs, les paramètres et les informations de l'en-tête HTTP. Si vous avez besoin de la date de la demande, vous pouvez créer un java.util.Date lorsque requestInitialized() est entré.Gardez à l'esprit qu'un ServletRequestListenerrequestInitialized() sera appelé chaque fois qu'il y aura une requête HTTP d'un navigateur (ou bot) donc il peut être préférable d'utiliser un outil externe à votre application pour suivre l'utilisation. Si vous recherchez des outils externes, vous pouvez envisager Google Analytics ou Urchin si votre configuration réseau ne vous permet pas d'utiliser Google Analytics. Peut-on supposer que vous utilisez des servlets?

Questions connexes