package mypackage; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * This servlet provides data for the InterruptionExperiment midlet. * The midlet continuously polls the server to receive updates on the * current activity during the experiment. The midlet also occasionally * uploads the experiment log data to the server and also downloads the * experiment interruption messages from the server. * * @author Noel Campbell */ public final class InterruptionServlet extends HttpServlet { private int currentActivity, previousActivity; private final int COORDINATES_DATA_TYPE = 0; private final int NEW_ACTIVITY_DATA_TYPE = 1; private final int UPLOAD_LOG_DATA_TYPE = 2; private final int DOWNLOAD_MSGS_DATA_TYPE = 3; /** * Respond to a GET request for the content produced by * this servlet. * * @param request The servlet request we are processing * @param response The servlet response we are producing * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); // PrintWriter writer = response.getWriter(); // // writer.println(""); // writer.println(""); // writer.println("Sample Application Servlet Page"); // writer.println(""); // writer.println(""); // // writer.println(""); // writer.println(""); // writer.println(""); // writer.println(""); // writer.println(""); // writer.println("
"); // writer.println(""); // writer.println(""); // writer.println("

Sample Application Servlet

"); // writer.println("This is the output of a servlet that is part of"); // writer.println("the InterruptionServlet, World application. It displays the"); // writer.println("request headers from the request we are currently"); // writer.println("processing."); // writer.println("
"); // // writer.println(""); // Enumeration names = request.getHeaderNames(); // while (names.hasMoreElements()) { // String name = (String) names.nextElement(); // writer.println(""); // writer.println(" "); // writer.println(" "); // writer.println(""); // } // writer.println("
" + name + ":" + request.getHeader(name) + "
"); // // writer.println(""); // writer.println(""); // Send current activity to the reqesting cell phone app OutputStream out = response.getOutputStream(); DataOutputStream dout = new DataOutputStream(out); try { dout.writeInt(currentActivity); System.out.println("Current Activity: "+currentActivity); } catch (Exception e) { e.printStackTrace(); dout.writeInt(-2); } finally { dout.flush(); dout.close(); out.close(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); InputStream in = request.getInputStream(); OutputStream out = response.getOutputStream(); DataInputStream dataStream = new DataInputStream(in); DataOutputStream dout = new DataOutputStream(out); // File coordinatesFile = new File(System.getProperty("user.dir") // + File.separator + "GPSCoordinates.txt"); File logFile = new File(System.getProperty("user.dir")+File.separator+"experimentLog.txt"); BufferedWriter bout = new BufferedWriter(new FileWriter( logFile, true)); File messagesFile = new File(System.getProperty("user.dir")+File.separator+"experimentMessages.txt"); BufferedReader bin = new BufferedReader(new FileReader(messagesFile)); String successMessage = "success"; String failureMessage = "failure"; try { int dataType = dataStream.readInt(); if (dataType == UPLOAD_LOG_DATA_TYPE) { StringBuffer latlon = new StringBuffer(); latlon.append(dataStream.readUTF()); bout.write(latlon.toString()); System.out.println(logFile.getAbsolutePath()); dout.writeBytes(successMessage); out.close(); dout.close(); } else if (dataType == NEW_ACTIVITY_DATA_TYPE) { int temp = dataStream.readInt(); previousActivity = currentActivity; currentActivity = temp; System.out.println("Previous Activity: "+previousActivity+" Current Activity: "+currentActivity); dout.writeBytes(successMessage); out.close(); dout.close(); } else if (dataType == DOWNLOAD_MSGS_DATA_TYPE) { int count = 0; String currentLine; while ((currentLine=bin.readLine()) != null) { dout.writeUTF(currentLine); count++; } System.out.println(count+" messages sent from server"); out.close(); dout.close(); } dout.close(); } catch (Exception e) { e.printStackTrace(); System.out.println(e); dout.writeBytes(e.toString()); } finally { bout.flush(); bout.close(); dout.flush(); dout.close(); dataStream.close(); in.close(); bin.close(); out.close(); } } }