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 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...