如何在指向外部URL的链接上捕获和记录点击事件?

时间:2012-02-25 05:35:31

标签: java html jsp servlets

我有以下HTML。我想在点击链接时将URL“http://www.google.com”插入数据库表中。

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

insert.jsp包含连接代码,该代码在单击按钮时工作正常,但上面的代码无效。

3 个答案:

答案 0 :(得分:2)

在所有这些链接上使用rel="ext",它可以提供额外的SEO优惠

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

并使用这段JavaScript来记录它们(我只是为jQuery提供一些帮助,使其可靠地跨浏览器兼容,而无需再写100行)

$('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();
});

最后在/log的网址格式上有servlet来完成工作

@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);
        }
    }

}

不要为此使用JSP。这毫无意义。

答案 1 :(得分:0)

HttpServletRequest接口有一个方法getRequestURL(),它返回当前页面的url。用它来指定当前页面的url在一些字符串变量中说reqUrl#Example#String reqUrl = request.getRequestURL()#End#并执行insert命令如下 语句= con.createStatement(); //创建一个Statement对象 rst = stmt.executeUpdate(“insert into table_name VALUES('”+ reqUrl +“'”);

答案 2 :(得分:0)

如果URL属于同一个域且属于同一个应用程序,那么您可以通过映射Filter轻松完成此操作,该/GateWatServlet?url=google.com将拦截每个请求并将其异步添加到数据库

但是如果它属于其他域,那么你需要重写这样的链接,以便它可以从你的应用程序的一个Servlet传递,例如{{1}},你可以在Servlet中完成这项工作