【问题标题】:Can you call a servlet with a link?你能用链接调用一个servlet吗?
【发布时间】:2011-01-17 01:07:14
【问题描述】:

你能调用带有链接的 servlet 吗?例如

<a href="/servletName">link text</a>

并且可能通过将参数添加到查询字符串来将参数传递给请求对象。

如果没有,我见过这样的事情:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(/MyServlet); 
dispatcher.include(request,response); 

但是我该如何触发呢?例如,如果它是 JavaScript 代码,我可以将它放在一个 jQuery click 函数中,或者如果这是一个 servlet,我会将它放入一个方法中。

但是我如何从 JSP 中调用此代码。据我所知,您不能使用 JavaScript 事件调用 Java 代码。

【问题讨论】:

    标签: java javascript jsp servlets argument-passing


    【解决方案1】:
    <a href="servletUrl?param=value">click</a>
    

    完全合法,并且会起作用。

    这样就会调用servlet的doGet(..)方法,可以使用request.getParameter("param")获取参数

    【讨论】:

    • ...它将专门调用doGet()
    • @Ankur:这当然不依赖于浏览器。问题可能在于 HTML/JS 代码或浏览器中的缓存页面(按 Ctrl+F5 或重新启动)。
    • 如果您将表单发布到 url,则会触发 doPost
    【解决方案2】:

    也许以下就是你所追求的:

    <jsp:include page="/MyServlet">
        <jsp:param name="param" value="value"/>
    </jsp:include>
    

    【讨论】:

      【解决方案3】:

      只是为了澄清一个误解:

      据我所知,您不能使用 Javascript 事件调用 Java 代码。

      您可以使用 JavaScript 代码(和事件)完美地调用 Java 代码。至此,您只需要让 JavaScript 向服务器端发送一个完整的 HTTP 请求即可。基本上有3种方法。

      1. 第一种方法是模拟现有链接/按钮/表单的调用。例如

        <a id="linkId" href="http://www.google.com/search?q=balusc">Link</a>
        
        <script type="text/javascript">
            document.getElementById('linkId').click();
        </script>
        

        <form id="formId" action="http://www.google.com/search">
            <input type="text" id="inputId" name="q">
        </form>
        
        <script type="text/javascript">
            document.getElementById('inputId').value = 'balusc';
            document.getElementById('formId').submit();
        </script>
        
      2. 第二种方法是使用 window.location 来触发一个普通的 GET 请求。例如:

        <script type="text/javascript">
            var search = 'balusc';
            window.location = 'http://www.google.com/search?q=' + search;
        </script>
        
      3. 第三种方法是使用 XMLHttpRequest 对象触发异步请求并处理结果。这种技术是“Ajax”的基本思想。这是一个与 Firefox 兼容的示例:

        <script type="text/javascript">
            function getUrl(search) {
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4) {
                        var responseJson = eval('(' + xhr.responseText + ')');
                        var url = responseJson.responseData.results[0].unescapedUrl;
                        var link = document.getElementById('linkId');
                        link.href = link.firstChild.nodeValue = url;
                        link.onclick = null;
                    }
                }
                var google = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='
                xhr.open('GET', google + search, true);
                xhr.send(null);
            }
        </script>
        
        <p>My homepage is located at: <a id="linkId" href="#" onclick="getUrl('balusc')">click me!</a></p>
        

        这可以用jQuery以更短且跨浏览器兼容的方式重写。

      只需将 http://www.google.com/search 替换为您自己的 servlet 即可让上述示例在您的环境中运行。

      有关更多背景信息,您可能会发现this article 也很有用。

      【讨论】:

      • 为了进一步澄清误解 - 您不能“从 javascript 调用 Java”,但您可以调用最终导致 Java 代码执行的 URL。区别很细微,但理解起来很重要。
      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 2017-12-21
      • 2020-09-09
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多