/*
* 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";
}//
}