title: Checking Content-Type of HTTP POST Request to Java servlet
body: <p>I've written a simple servlet that accepts HTTP POST requests and sends back a short response.  Here's the code for the servlet: </p>
  
  <pre><code>import java.io.BufferedInputStream;
  import java.io.ByteArrayInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  
  import javax.servlet.ServletException;
  import javax.servlet.ServletOutputStream;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.apache.commons.logging.*;
  
  /**
   * Servlet implementation class MapleTAServlet
   */
  @WebServlet(description = "Receives XML request text containing grade data and returns     response in XML", urlPatterns = { "/MapleTAServlet" })
  public class MapleTAServlet extends HttpServlet {
      private static final long serialVersionUID = 1L;
      private Log log = LogFactory.getLog(MapleTAServlet.class);
  
     /**
      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {       
          String strXMLResponse = "&lt;Response&gt;&lt;code&gt;";
          String strMessage = "";
          int intCode = 0;
          ServletOutputStream stream = null;
          BufferedInputStream buffer = null;
  
      try
      {   
          String strContentType = request.getContentType();   
  
          // Make sure that the incoming request is XML data, otherwise throw up a red flag
          if (strContentType != "text/xml")
          {
              strMessage = "Incorrect MIME type";
          }
          else
          {
              intCode = 1;        
          } // end if
  
          strXMLResponse += intCode + "&lt;/code&gt;&lt;message&gt;" + strMessage + "&lt;/message&gt;&lt;/Response&gt;";
  
          response.setContentType("text/xml");
          response.setContentLength(strXMLResponse.length());
  
          int intReadBytes = 0;
  
          stream = response.getOutputStream();
  
          // Converts the XML string to an input stream of a byte array
          ByteArrayInputStream bs = new ByteArrayInputStream(strXMLResponse.getBytes());
          buffer = new BufferedInputStream(bs);
  
          while ((intReadBytes = buffer.read()) != -1)
          {
              stream.write(intReadBytes);
          } // end while
      }
      catch (IOException e)
      {
          log.error(e.getMessage());
      }
      catch (Exception e)
      {
          log.error(e.getMessage());
      }
      finally 
      {
          stream.close();
          buffer.close();
      } // end try-catch
  
      }
  
  }
  </code></pre>
  
  <p>And here's the client that I'm using to send the request: </p>
  
  <pre><code>import java.net.HttpURLConnection;
  import java.net.URL;
  import java.io.*;
  
  public class TestClient 
  {
  
     /**
      * @param args
      */
      public static void main(String[] args) 
      {
          BufferedReader inStream = null;
  
          try
              {
          // Connect to servlet
          URL url = new URL("http://localhost/mapleta/mtaservlet");
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  
          // Initialize the connection 
          conn.setDoOutput(true);
          conn.setDoInput(true);
          conn.setRequestMethod("POST");
          conn.setUseCaches(false);
          conn.setRequestProperty("Content-Type", "text/xml");
          //conn.setRequestProperty("Connection", "Keep-Alive");
  
          conn.connect();
  
          OutputStream out = conn.getOutputStream();
  
          inStream = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  
          String strXMLRequest = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;&lt;Request&gt;&lt;/Request&gt;";
          out.write(strXMLRequest.getBytes());
          out.flush();
          out.close();
  
          String strServerResponse = "";
  
          System.out.println("Server says: ");
          while ((strServerResponse = inStream.readLine()) != null)
          {
              System.out.println(strServerResponse);
          } // end while
  
          inStream.close();
          }
          catch (IOException e)
          {
              e.printStackTrace();
          } 
          catch (Exception e)
          {
              e.printStackTrace();
          } // end try catch
       }
  }
  </code></pre>
  
  <p>The issue I'm having is that when I run the client program, I'm getting the following output: </p>
  
  <pre><code>Server says: 
  &lt;Response&gt;&lt;code&gt;0&lt;/code&gt;&lt;message&gt;Incorrect MIME type&lt;/message&gt;&lt;/Response&gt;
  </code></pre>
  
  <p>I've tried calling request.getContentType() and have gotten "text/xml" as the output.  Just trying to figure out why the string isn't matching up.</p>