8

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

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

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

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

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

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

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

4

3 回答 3

13
<a href="servletUrl?param=value">click</a>

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

这将使doGet(..)servlet的方法被调用,您可以使用获取参数request.getParameter("param")

于 2010-02-15T15:57:11.443 回答
10

只是为了澄清一个误解:

据我所知,您不能使用 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 替换即可使上述示例在您的环境中工作。

有关更多背景信息,您可能会发现这篇文章也很有用。

于 2010-02-15T16:13:09.483 回答
2

也许以下是您所追求的:

<jsp:include page="/MyServlet">
    <jsp:param name="param" value="value"/>
</jsp:include>
于 2010-02-15T15:58:33.763 回答