问题
Can you call a servlet with a link? For example
<a href="/servletName">link text</a>
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.
回答1:
<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")
回答2:
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.
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">Link</a> <script type="text/javascript"> document.getElementById('linkId').click(); </script>
and
<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>
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>
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&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.
回答3:
Perhaps the following is what you're after:
<jsp:include page="/MyServlet">
<jsp:param name="param" value="value"/>
</jsp:include>
来源:https://stackoverflow.com/questions/2267064/can-you-call-a-servlet-with-a-link