2010-02-15 30 views
8

¿Se puede llamar a un servlet con un enlace? Por ejemplo¿Puedes llamar a un servlet con un enlace?

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

Y posiblemente pase parámetros al objeto de solicitud al agregarlos a la cadena de consulta.

Si no es así, he visto este tipo de cosas:

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

Pero ¿cómo iba a desencadenar esto? Por ejemplo, si era código JavaScript, podría ponerlo dentro de una función de clic jQuery, o si se tratara de un servlet, lo pondría en un método.

Pero, ¿cómo puedo llamar a este código desde dentro de un JSP. Por lo que sé, no puedes llamar al código Java con eventos de JavaScript.

Respuesta

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

es perfectamente legal y funcionará.

que hará que el método del servlet doGet(..) ser llamado, y se puede obtener utilizando el parámetro request.getParameter("param")

+2

... que llamará específicamente a 'doGet()'. – BalusC

+0

Parece que no funciona en IE pero lo hace en Firefox – Ankur

+2

@Ankur: Esto ciertamente no depende del navegador. El problema probablemente radique en el código HTML/JS o en una página almacenada en caché en el navegador (haga Ctrl + F5 o reinicie). – BalusC

2

Tal vez el siguiente es lo que está buscando:

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

sólo para aclarar un error :

Por lo que sé, no puede llamar al código de Java con eventos de Javascript.

Puede llamar perfectamente el código de Java con código JavaScript (y eventos). Hasta el punto, solo necesitas permitir que JavaScript envíe una solicitud de HTTP completa al lado del servidor. Básicamente hay 3 formas para esto.

  1. La primera forma es simular la invocación de un enlace/botón/formulario existente. P.ej.

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

    y

    <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. La segunda manera es utilizar window.location para disparar una petición GET normal. Por ejemplo:

    <script type="text/javascript"> 
        var search = 'balusc'; 
        window.location = 'http://www.google.com/search?q=' + search; 
    </script> 
    
  3. La tercera forma es utilizar objeto XMLHttpRequest para disparar una solicitud asincrónica y procesar los resultados. Esta técnica es la idea base de "Ajax". Aquí está un ejemplo compatible con 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> 
    

    Esto se puede reescribir de manera más corto y con crossbrowsercompatible jQuery.

Sólo sustituir http://www.google.com/search con su propio servlet para obtener los ejemplos anteriores para trabajar en su entorno.

Para obtener más información general, también puede encontrar this article útil.

+0

Gracias por todo el código – Ankur

+2

Para aclarar aún más la idea errónea - no se puede 'llamar a Java desde JavaScript', pero se puede invocar una URL que finalmente resulta en código Java que se ejecuta. La diferencia es sutil, pero importante de entender. – belugabob

Cuestiones relacionadas