- W htmlu mam pole input, którego zawartość chce wysłać do serwletu w trakcie jego zmiany ( zdarzenie onKeyUp ).
- Serwlet ma za zadanie przeszukać wszystkie rekordy z jakiegoś pliku i zwrócić te, które zaczynają się na przesłaną wartość.
- Następnie serwlet ma zwrócić interesujące nas rekordy i wyświetlić w htmlu.
Punkty 1 i 3 mam wykonać z wykorzystaniem jQuery.
Punkt 2 mam zrealizować z poziomu serwletu.
Więc mam pole input oraz div, do którego będę wrzucał wyniki z serwletu:
<input type="text" id="name">
<div id="result"></div>
Robię zdarzenie z jQuery i wysyłam metodą POST zawartość pola do serwletu:
$('#name').keyup(function () {
value = $(this).val();
$.ajax({
type: "POST",
url: "Servlet",
data: {"name": value},
success: function (value) {
$('#result').html(value);
}
});
}
Zmienna result zawiera rekordy, które chce żeby serwlet zwrócił w wyniku jego wywołania.
public class Servlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String name = request.getParameter("name").toLowerCase();
String result = "";
// tutaj ma miejsce przeszukiwanie danych z pliku ale to nie jest istotne
try (PrintWriter out = response.getWriter()) {
out.println("<html>" + result + "</html>");
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
Program działa prawidłowo ale podczas uruchomienia wywala błędy, wskazując je w miejscu wypisania danych z PrintWritera oraz wywołania metody doPost.
java.lang.IllegalStateException: getWriter() has already been called for this response