/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author oleksiys */ public class RecursiveServlet extends HttpServlet { private static final String COUNTER_PROPERTY = "counter"; /** * Processes requests for both HTTP GET and POST methods. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String counterS = request.getParameter(COUNTER_PROPERTY); Integer counter = -1; try { counter = Integer.parseInt(counterS); } catch(NumberFormatException e) { } String responseString = counter.toString(); if (counter > -1) { if (counter > 0) { String counterToSend = Integer.toString(counter - 1); URL url = new URL("http://localhost:8080/TestServlet/RecursiveServlet?" + COUNTER_PROPERTY + "=" + counterToSend); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); try { String reply = reader.readLine(); if (reply.equals(counterToSend)) { responseString = counter.toString(); } else { responseString = "Unexpected response. Expected: " + counterToSend + " Received: (" + reply + ")"; } } finally { reader.close(); connection.getInputStream().close(); } } } else { responseString = "No " + COUNTER_PROPERTY + " header!"; } response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println(responseString); } finally { out.close(); } } // /** * Handles the HTTP GET method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// }