views:

432

answers:

3

Can you call a servlet with a link (i.e. link text

And possibly pass parameters to the request object by adding them to the querystring.

If not, I have seen this kind of thing:

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

But how would I trigger this. For example if it was javascript code I could put it within a jquery click function, or if this was a servlet I would put it into a method.

But how do I call this code from within a jsp. As far as I know you can't call Java code with Javascript events.

+4  A: 
<a href="servletUrl?param=value">click</a>

is perfectly legal and will work.

That will make the doGet(..) method of the servlet be called, and you can get the parameter using request.getParameter("param")

Bozho
...which will specifically call `doGet()`.
BalusC
It doesn't seem to work in IE but it does in Firefox
Ankur
@Ankur: This is certainly not browserdependent. The problem likely lies in the HTML/JS code or a cached page in browser (do Ctrl+F5 or restart).
BalusC
+2  A: 

Perhaps the following is what you're after:

<jsp:include page="/MyServlet">
    <jsp:param name="param" value="value"/>
</jsp:include>
David Grant
+4  A: 

Just to clear a misconception:

As far as I know you can't call Java code with Javascript events.

You can perfectly call Java code with JavaScript code (and events). To the point, you just need to let JavaScript send a fullworthy HTTP request to the server side. There are basically 3 ways for this.

  1. The first way is to simulate invocation of an existing link/button/form. E.g.

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

    and

    <form id="formId" action="http://www.google.com/search"&gt;
        <input type="text" id="inputId" name="q">
    </form>
    
    
    <script type="text/javascript">
        document.getElementById('inputId').value = 'balusc';
        document.getElementById('formId').submit();
    </script>
    
  2. The second way is to use window.location to fire a plain GET request. For example:

    <script type="text/javascript">
        var search = 'balusc';
        window.location = 'http://www.google.com/search?q=' + search;
    </script>
    
  3. The third way is to use XMLHttpRequest object to fire an asynchronous request and process the results. This technique is the base idea of "Ajax". Here's a Firefox compatible example:

    <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&amp;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>
    

    This can be rewritten in a shorter and crossbrowsercompatible manner with jQuery.

Just substitute http://www.google.com/search with your own servlet to get the above examples to work in your environment.

For more background information, you may find this article useful as well.

BalusC
Thanks for all the code
Ankur
To further clarify the misconception - you cannot 'call Java from javascript', but you can invoke a URL which ultimately results in Java code being executed. The difference is subtle, but important to understand.
belugabob