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.
Use rel="ext" on all those links, it gives additional SEO benefit
ReplyDelete<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.
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
ReplyDeletestmt=con.createStatement(); //create a Statement object
rst=stmt.executeUpdate("insert into table_name VALUES ('" + reqUrl + "'");
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
ReplyDeleteBut 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