Skip to main content

How to capture and record click event on a link to an external URL?



I have the following HTML. I want the URL 'http://www.google.com' to be inserted in the database table on click of the link.







<a href="http://www.google.com" onclick="insert.jsp">Google</a>







The insert.jsp contains the connectivity code which works fine on the click of the button, but above code is not working.


Comments

  1. Use rel="ext" on all those links, it gives additional SEO benefit

    <a href="http://www.google.com" rel="ext">
    <a href="http://www.stackoverflow.com" rel="ext">
    ...


    And use this piece of JavaScript to record them (I'm for simplicitly taking a little help of jQuery to make it reliably cross browser compatible without the need to write 100 more lines)

    $('a[rel=ext]').click(function(e) {
    var $link = $(this);
    var url = '/log?url=' + encodeURIComponent($link.attr('href'));

    if (e.ctrlKey || $link.attr('target') == '_blank') {
    window.open(url);
    } else {
    window.location = url;
    }

    e.preventDefault();
    });


    Finally have a servlet on an URL pattern of /log which does the job

    @WebServlet("/log")
    public class LogServlet extends HttpServlet {

    @EJB
    private LogService logService;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String url = request.getParameter("url");

    if (url == null || url.trim().isEmpty()) {
    response.sendError(HttpServletResponse.SC_BAD_REQUEST);
    } else {
    logService.log(url);
    response.sendRedirect(url);
    }
    }

    }


    Don't use JSP for this. It makes no sense.

    ReplyDelete
  2. The HttpServletRequest interface has a method getRequestURL ( ) that return the url of the current page. use this to assign url of current page in some string variable say reqUrl #Example# String reqUrl = request.getRequestURL() #End# and execute insert command as follows
    stmt=con.createStatement(); //create a Statement object
    rst=stmt.executeUpdate("insert into table_name VALUES ('" + reqUrl + "'");

    ReplyDelete
  3. If the URL is of the same domain and of the same application then you could easily do this by Mapping a Filter that will intercept each request and will add it to DB asynchronously

    But if it is of other domain then you need to rewrite such links so that it would pass from one of your Servlet of your app for example /GateWatServlet?url=google.com and you can do the job there in Servlet

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 3 Final Exam => latest version

1 . Which security protocol or measure would provide the greatest protection for a wireless LAN? WPA2 cloaking SSIDs shared WEP key MAC address filtering   2 . Refer to the exhibit. All trunk links are operational and all VLANs are allowed on all trunk links. An ARP request is sent by computer 5. Which device or devices will receive this message? only computer 4 computer 3 and RTR-A computer 4 and RTR-A computer 1, computer 2, computer 4, and RTR-A computer 1, computer 2, computer 3, computer 4, and RTR-A all of the computers and the router   3 . Refer to the exhibit. Hosts A and B, connected to hub HB1, attempt to transmit a frame at the same time but a collision occurs. Which hosts will receive the collision jamming signal? only hosts A and B only hosts A, B, and C only hosts A, B, C, and D only hosts A, B, C, and E   4 . Refer to the exhibit. Router RA receives a packet with a source address of 192.168.1.65 and a destination address of 192.168.1.161...