2010-02-15 7 views
8

Können Sie ein Servlet mit einem Link aufrufen? Zum Beispiel:Können Sie ein Servlet mit einem Link aufrufen?

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

Und möglicherweise übergeben Parameter an das Anfrageobjekt durch Hinzufügen von ihnen zum Querystring.

Wenn nicht, habe ich diese Art der Sache gesehen:

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

Aber wie würde ich dies auslösen? Wenn es zum Beispiel JavaScript-Code wäre, könnte ich es in eine jQuery-Klickfunktion einfügen, oder wenn dies ein Servlet wäre, würde ich es in eine Methode einfügen.

Aber wie kann ich diesen Code innerhalb einer JSP aufrufen. Soweit ich weiß, können Sie Java-Code nicht mit JavaScript-Ereignissen aufrufen.

Antwort

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

ist vollkommen legal und wird funktionieren.

Das ist die doGet(..) Methode des Servlets aufgerufen werden machen, und Sie können den Parameter mit request.getParameter("param")

+2

... die speziell 'doGet()' aufrufen. – BalusC

+0

Es scheint nicht in IE zu arbeiten, aber es tut in Firefox – Ankur

+2

@ Ankur: Dies ist sicherlich nicht browserabhängig. Das Problem liegt wahrscheinlich im HTML/JS-Code oder einer zwischengespeicherten Seite im Browser (Strg + F5 oder Neustart). – BalusC

2

Vielleicht ist das Folgende erhalten, was Sie nach:

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

einfach ein Missverständnis zu klären :

Soweit ich weiß, können Sie Java-Code mit Javascript-Ereignissen nicht aufrufen.

Sie können Java-Code mit JavaScript-Code (und Ereignissen) perfekt aufrufen. Bis zu diesem Punkt müssen Sie JavaScript nur eine vollwertige HTTP-Anfrage an die Serverseite senden lassen. Es gibt grundsätzlich 3 Möglichkeiten dafür.

  1. Die erste Möglichkeit besteht darin, den Aufruf einer bestehenden Verknüpfung/Schaltfläche/Form zu simulieren. Z.B.

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

    und

    <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. Der zweite Weg ist window.location zu verwenden, eine einfache GET-Anfrage zu schießen. Zum Beispiel:

    <script type="text/javascript"> 
        var search = 'balusc'; 
        window.location = 'http://www.google.com/search?q=' + search; 
    </script> 
    
  3. Die dritte Möglichkeit ist XMLHttpRequest Objekt zu verwenden, um eine asynchrone Anforderung zu feuern und die Ergebnisse zu verarbeiten. Diese Technik ist die Grundidee von "Ajax". Hier ist ein Firefox kompatibel Beispiel:

    <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> 
    

    Dies kann mit jQuery in einer kürzeren und crossbrowsercompatible Weise neu geschrieben werden.

Ersetzen Sie einfach http://www.google.com/search mit Ihrem eigenen Servlet die obigen Beispiele zu erhalten in Ihrer Umgebung zu arbeiten.

Für weitere Hintergrundinformationen finden Sie möglicherweise auch this article nützlich.

+0

Vielen Dank für den gesamten Code – Ankur

+2

Um die Missverständnisse zu klären - Sie können nicht Java von Javascript aufrufen, aber Sie können eine URL aufrufen, die letztlich in Java-Code ausgeführt wird. Der Unterschied ist subtil, aber wichtig zu verstehen. – belugabob

Verwandte Themen