2010-02-15 56 views
8

你可以用链接调用一个servlet吗?例如你可以用链接调用一个servlet吗?

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

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

如果没有,我已经看到了这样的事情:

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

但我怎么会触发此?例如,如果它是JavaScript代码,我可以把它放在一个jQuery点击函数中,或者如果这是一个servlet,我会把它放到一个方法中。

但我该如何在JSP中调用此代码。据我所知,你不能用JavaScript事件调用Java代码。

回答

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

是完全合法的,将工作。

,这将使Servlet的doGet(..)方法被调用,你可以使用request.getParameter("param")

+2

...它将特别调用'doGet()'。 – BalusC 2010-02-15 15:59:00

+0

它似乎并没有在IE浏览器中工作,但它在Firefox – Ankur 2010-02-15 16:16:18

+2

@Ankur:这肯定不是浏览器依赖的。问题可能在于HTML/JS代码或浏览器中的缓存页面(按Ctrl + F5或重新启动)。 – BalusC 2010-02-15 17:02:31

2

参数也许下面是你追求的:

<jsp:include page="/MyServlet"> 
    <jsp:param name="param" value="value"/> 
</jsp:include> 
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> 
    

    这可以在更短的和crossbrowsercompatible方式与jQuery被改写。

刚刚替补http://www.google.com/search用自己的servlet来得到上面的例子在你的环境中工作。

有关更多背景信息,您也可以找到this article

+0

感谢您的所有代码 – Ankur 2010-02-15 16:17:53

+2

为了进一步澄清误解 - 您无法从JavaScript调用Java,但可以调用最终导致Java代码执行的URL。区别很微妙,但重要的是要理解。 – belugabob 2010-02-15 16:24:38

相关问题