You can not save each user "click" in the web application. What you can do is place a filter that fires every time the user sends a request from the application.
@WebFilter("/*")
public class FiltroAplicacion implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
}
//este método se ejecuta antes y después del ciclo request/response
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
//Obtenemos los objetos de request, response y sesión
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
//a partir de la sesión podemos obtener el usuario y su información
if (session != null) {
Usuario usuario = (Usuario)session.getAttribute("usuario");
//si el usuario existe, es decir, se ha logueado al sistema
if (usuario != null) {
//podemos ver qué acción ejecutó
//mediante la URL del request
String urlBase = request.getRequestURL().toString();
//y los parámetros de query string
//los que vienen luego de "?" en la url
String queryString = request.getQueryString();
//aquí puedes guardar esto en algún lugar
//log, base de datos, archivo, etc
}
}
//para que continúe el ciclo request/response, llama a la cadena
//lo que en realidad hace es llamar al siguiente Filter
//que puede aplicar para este ciclo request/response
//si no hay más instancias de Filter, entonces se ejecuta el request
//esto es independiente de si se ejecuta GET, POST, etc
chain.doFilter(req, res);
}
@Override
public void destroy() {
//
}
}