Question

Writing a Web Server

Asked by: mistagitar

Hi all,

I am writing a *simple* web server in Java.  It's finished except that the headers are sent and displayed with the rest of the message body in the browser.

Any idea how to fix this?  It seems like as long as the headers are the first lines to be written (followed by a CRLF) the browser should know what to do with them, right?

Cheers!
Ross


=======
 SOURCE
=======

/*
 * WebServer.java
 *
 * Created on May 17, 2006, 5:51 AM
 *
 * Author:  Ross Dakin
 */
 
import java.io.* ;
import java.lang.* ;
import java.net.* ;
import java.util.* ;

public final class WebServer
{
      public static void main(String argv[]) throws Exception
      {
           
      // Set the port number.
      int port = 6789;
                 
      // Establish the listen socket.

      ServerSocket serverSocket = null;
      try {
         serverSocket = new ServerSocket(port);
          }
      catch (IOException e) {
         System.out.println(e);
      }


      // Process HTTP service requests in an infinite loop.
      while (true) {
                         
            // Listen for a TCP connection request.
            Socket clientSocket = null;
            try {
               clientSocket = serverSocket.accept();
                }
            catch (IOException e) {
               System.out.println(e);
            }
 
            // Construct an object to process the HTTP request message.
            HttpRequest request = new HttpRequest(clientSocket);
 
            // Create a new thread to process the request.
            Thread thread = new Thread(request);
             
            // Start the thread.
            thread.start();
         
      } // end while
           
  } // end main()
       
} // end WebServer class



final class HttpRequest implements Runnable
{
          final static String CRLF = "\r\n";
          Socket socket;
   
          // Constructor
          public HttpRequest(Socket socket) throws Exception
          {
                this.socket = socket;
          }
   
   
          // Implement the run() method of the Runnable interface.
          public void run()
          {
              try {
                    processRequest();
              } catch (Exception e) {
                    System.out.println(e);
              }
          }
   
   
      // Process each request.
          private void processRequest() throws Exception
          {
   
              // Get a reference to the socket's input and output streams.
              InputStream is = socket.getInputStream();
              DataOutputStream os = new DataOutputStream(socket.getOutputStream());
       
              // Set up input stream filters.
              BufferedReader br = new BufferedReader(
                            new InputStreamReader(is));
       
              // Get the request line of the HTTP request message.
          String requestLine = br.readLine();
         
          // Display the request line.
          System.out.println();
          System.out.println(requestLine);
         
          // Get and display the header lines.
          String headerLine = null;
          while ((headerLine = br.readLine()).length() != 0) {
                System.out.println(headerLine);
          }
         
         
          // Extract the filename from the request line.
          StringTokenizer tokens = new StringTokenizer(requestLine);
          tokens.nextToken();  // skip over the method, which should be "GET"
          String fileName = tokens.nextToken();
         
          // Prepend a "." so that file request is within the current directory.
          fileName = "." + fileName;
         
          // Open the requested file.
          FileInputStream fis = null;
          boolean fileExists = true;
          try {
                fis = new FileInputStream(fileName);
          } catch (FileNotFoundException e) {
                fileExists = false;
          }
         
         
          // Construct the response message.
          String statusLine = null;
          String contentTypeLine = null;
          String entityBody = null;
          if (fileExists) {
                statusLine = "200 OK" + CRLF;
                contentTypeLine = "Content-type: " +
                      contentType( fileName ) + CRLF;
          } else {
                statusLine = "404 Not Found" + CRLF;
                contentTypeLine = "Content-type: " +
                  "text/html" + CRLF;
                entityBody = "<HTML>" +
                      "<HEAD><TITLE>Not Found</TITLE></HEAD>" +
                      "<BODY>Not Found</BODY></HTML>";
          }
   
          // Send the status line.
          os.writeBytes(statusLine);
         
          // Send the content type line.
          os.writeBytes(contentTypeLine);
         
          // Send a blank line to indicate the end of the header lines.
          os.writeBytes(CRLF);
   
          // Send the entity body.
          if (fileExists)      {
                sendBytes(fis, os);
                fis.close();
          } else {
                os.writeBytes(entityBody);
          }
         
          // Close streams and socket.
          is.close();
          os.close();
          br.close();
          socket.close();
   
          } // end run()
          
          
          // Send bytes from disk to output stream, passing through buffer.
          private static void sendBytes(FileInputStream fis, OutputStream os)
      throws Exception
      {
         // Construct a 1K buffer to hold bytes on their way to the socket.
         byte[] buffer = new byte[1024];
         int bytes = 0;
     
         // Copy requested file into the socket's output stream.
         while((bytes = fis.read(buffer)) != -1 ) {
            os.write(buffer, 0, bytes);
         }
      } // end sendBytes
          
          
          
      // Determine MIME type of file.
      private static String contentType(String fileName)
      throws Exception
      {
          String mimeFileName = "mime.dat";
               
          // Open the MIME type data file.
          FileReader mimeFile = null;
          try {
                mimeFile = new FileReader(mimeFileName);
          } catch (FileNotFoundException e) {
                System.out.println(e);
          }
         
          // Read the file
          BufferedReader mimeBr = new BufferedReader (mimeFile);
         
          // Loop through lines in file.
          String fileLine = null;
          while ((fileLine = mimeBr.readLine()) !=null)
                  {
              // Tokenize the line
              StringTokenizer mimeTokens = new StringTokenizer(fileLine);
   
              // If the file extention matches the request, return its type
              if(fileName.endsWith( mimeTokens.nextToken()) ) {
                        return mimeTokens.nextToken();
                  }
   
                  }
   
              // Matching MIME type was found.
              return "application/octet-stream";
            
      } // end contentType

} // end HttpRequest class









========
  mime.dat
========

.3dm      x-world/x-3dmf
.3dmf      x-world/x-3dmf
.a      application/octet-stream
.aab      application/x-authorware-bin
.aam      application/x-authorware-map
.aas      application/x-authorware-seg
.abc      text/vnd.abc
.acgi      text/html
.afl      video/animaflex
.ai      application/postscript
.aif      audio/aiff
.aif      audio/x-aiff
.aifc      audio/aiff
.aifc      audio/x-aiff
.aiff      audio/aiff
.aiff      audio/x-aiff
.aim      application/x-aim
.aip      text/x-audiosoft-intra
.ani      application/x-navi-animation
.aos      application/x-nokia-9000-communicator-add-on-software
.aps      application/mime
.arc      application/octet-stream
.arj      application/arj
.arj      application/octet-stream
.art      image/x-jg
.asf      video/x-ms-asf
.asm      text/x-asm
.asp      text/asp
.asx      application/x-mplayer2
.asx      video/x-ms-asf
.asx      video/x-ms-asf-plugin
.au      audio/basic
.au      audio/x-au
.avi      application/x-troff-msvideo
.avi      video/avi
.avi      video/msvideo
.avi      video/x-msvideo
.avs      video/avs-video
.bcpio      application/x-bcpio
.bin      application/mac-binary
.bin      application/macbinary
.bin      application/octet-stream
.bin      application/x-binary
.bin      application/x-macbinary
.bm      image/bmp
.bmp      image/bmp
.bmp      image/x-windows-bmp
.boo      application/book
.book      application/book
.boz      application/x-bzip2
.bsh      application/x-bsh
.bz      application/x-bzip
.bz2      application/x-bzip2
.c      text/plain
.c      text/x-c
.c++      text/plain
.cat      application/vnd.ms-pki.seccat
.cc      text/plain
.cc      text/x-c
.ccad      application/clariscad
.cco      application/x-cocoa
.cdf      application/cdf
.cdf      application/x-cdf
.cdf      application/x-netcdf
.cer      application/pkix-cert
.cer      application/x-x509-ca-cert
.cha      application/x-chat
.chat      application/x-chat
.class      application/java
.class      application/java-byte-code
.class      application/x-java-class
.com      application/octet-stream
.com      text/plain
.conf      text/plain
.cpio      application/x-cpio
.cpp      text/x-c
.cpt      application/mac-compactpro
.cpt      application/x-compactpro
.cpt      application/x-cpt
.crl      application/pkcs-crl
.crl      application/pkix-crl
.crt      application/pkix-cert
.crt      application/x-x509-ca-cert
.crt      application/x-x509-user-cert
.csh      application/x-csh
.csh      text/x-script.csh
.css      application/x-pointplus
.css      text/css
.cxx      text/plain
.dcr      application/x-director
.deepv      application/x-deepv
.def      text/plain
.der      application/x-x509-ca-cert
.dif      video/x-dv
.dir      application/x-director
.dl      video/dl
.dl      video/x-dl
.doc      application/msword
.dot      application/msword
.dp      application/commonground
.drw      application/drafting
.dump      application/octet-stream
.dv      video/x-dv
.dvi      application/x-dvi
.dwf      drawing/x-dwf(old)
.dwf      model/vnd.dwf
.dwg      application/acad
.dwg      image/vnd.dwg
.dwg      image/x-dwg
.dxf      application/dxf
.dxf      image/vnd.dwg
.dxf      image/x-dwg
.dxr      application/x-director
.el      text/x-script.elisp
.elc      application/x-bytecode.elisp(compiledelisp)
.elc      application/x-elc
.env      application/x-envoy
.eps      application/postscript
.es      application/x-esrehber
.etx      text/x-setext
.evy      application/envoy
.evy      application/x-envoy
.exe      application/octet-stream
.f      text/plain
.f      text/x-fortran
.f77      text/x-fortran
.f90      text/plain
.f90      text/x-fortran
.fdf      application/vnd.fdf
.fif      application/fractals
.fif      image/fif
.fli      video/fli
.fli      video/x-fli
.flo      image/florian
.flx      text/vnd.fmi.flexstor
.fmf      video/x-atomic3d-feature
.for      text/plain
.for      text/x-fortran
.fpx      image/vnd.fpx
.fpx      image/vnd.net-fpx
.frl      application/freeloader
.funk      audio/make
.g      text/plain
.g3      image/g3fax
.gif      image/gif
.gl      video/gl
.gl      video/x-gl
.gsd      audio/x-gsm
.gsm      audio/x-gsm
.gsp      application/x-gsp
.gss      application/x-gss
.gtar      application/x-gtar
.gz      application/x-compressed
.gz      application/x-gzip
.gzip      application/x-gzip
.gzip      multipart/x-gzip
.h      text/plain
.h      text/x-h
.hdf      application/x-hdf
.help      application/x-helpfile
.hgl      application/vnd.hp-hpgl
.hh      text/plain
.hh      text/x-h
.hlb      text/x-script
.hlp      application/hlp
.hlp      application/x-helpfile
.hlp      application/x-winhelp
.hpg      application/vnd.hp-hpgl
.hpgl      application/vnd.hp-hpgl
.hqx      application/binhex
.hqx      application/binhex4
.hqx      application/mac-binhex
.hqx      application/mac-binhex40
.hqx      application/x-binhex40
.hqx      application/x-mac-binhex40
.hta      application/hta
.htc      text/x-component
.htm      text/html
.html      text/html
.htmls      text/html
.htt      text/webviewhtml
.htx      text/html
.ice      x-conference/x-cooltalk
.ico      image/x-icon
.idc      text/plain
.ief      image/ief
.iefs      image/ief
.iges      application/iges
.iges      model/iges
.igs      application/iges
.igs      model/iges
.ima      application/x-ima
.imap      application/x-httpd-imap
.inf      application/inf
.ins      application/x-internett-signup
.ip      application/x-ip2
.isu      video/x-isvideo
.it      audio/it
.iv      application/x-inventor
.ivr      i-world/i-vrml
.ivy      application/x-livescreen
.jam      audio/x-jam
.jav      text/plain
.jav      text/x-java-source
.java      text/plain
.java      text/x-java-source
.jcm      application/x-java-commerce
.jfif      image/jpeg
.jfif      image/pjpeg
.jfif-tbnl      image/jpeg
.jpe      image/jpeg
.jpe      image/pjpeg
.jpeg      image/jpeg
.jpeg      image/pjpeg
.jpg      image/jpeg
.jpg      image/pjpeg
.jps      image/x-jps
.js      application/x-javascript
.jut      image/jutvision
.kar      audio/midi
.kar      music/x-karaoke
.ksh      application/x-ksh
.ksh      text/x-script.ksh
.la      audio/nspaudio
.la      audio/x-nspaudio
.lam      audio/x-liveaudio
.latex      application/x-latex
.lha      application/lha
.lha      application/octet-stream
.lha      application/x-lha
.lhx      application/octet-stream
.list      text/plain
.lma      audio/nspaudio
.lma      audio/x-nspaudio
.log      text/plain
.lsp      application/x-lisp
.lsp      text/x-script.lisp
.lst      text/plain
.lsx      text/x-la-asf
.ltx      application/x-latex
.lzh      application/octet-stream
.lzh      application/x-lzh
.lzx      application/lzx
.lzx      application/octet-stream
.lzx      application/x-lzx
.m      text/plain
.m      text/x-m
.m1v      video/mpeg
.m2a      audio/mpeg
.m2v      video/mpeg
.m3u      audio/x-mpequrl
.man      application/x-troff-man
.map      application/x-navimap
.mar      text/plain
.mbd      application/mbedlet
.mc$      application/x-magic-cap-package-1.0
.mcd      application/mcad
.mcd      application/x-mathcad
.mcf      image/vasa
.mcf      text/mcf
.mcp      application/netmc
.me      application/x-troff-me
.mht      message/rfc822
.mhtml      message/rfc822
.mid      application/x-midi
.mid      audio/midi
.mid      audio/x-mid
.mid      audio/x-midi
.mid      music/crescendo
.mid      x-music/x-midi
.midi      application/x-midi
.midi      audio/midi
.midi      audio/x-mid
.midi      audio/x-midi
.midi      music/crescendo
.midi      x-music/x-midi
.mif      application/x-frame
.mif      application/x-mif
.mime      message/rfc822
.mime      www/mime
.mjf      audio/x-vnd.audioexplosion.mjuicemediafile
.mjpg      video/x-motion-jpeg
.mm      application/base64
.mm      application/x-meme
.mme      application/base64
.mod      audio/mod
.mod      audio/x-mod
.moov      video/quicktime
.mov      video/quicktime
.movie      video/x-sgi-movie
.mp2      audio/mpeg
.mp2      audio/x-mpeg
.mp2      video/mpeg
.mp2      video/x-mpeg
.mp2      video/x-mpeq2a
.mp3      audio/mpeg3
.mp3      audio/x-mpeg-3
.mp3      video/mpeg
.mp3      video/x-mpeg
.mpa      audio/mpeg
.mpa      video/mpeg
.mpc      application/x-project
.mpe      video/mpeg
.mpeg      video/mpeg
.mpg      audio/mpeg
.mpg      video/mpeg
.mpga      audio/mpeg
.mpp      application/vnd.ms-project
.mpt      application/x-project
.mpv      application/x-project
.mpx      application/x-project
.mrc      application/marc
.ms      application/x-troff-ms
.mv      video/x-sgi-movie
.my      audio/make
.mzz      application/x-vnd.audioexplosion.mzz
.nap      image/naplps
.naplps      image/naplps
.nc      application/x-netcdf
.ncm      application/vnd.nokia.configuration-message
.nif      image/x-niff
.niff      image/x-niff
.nix      application/x-mix-transfer
.nsc      application/x-conference
.nvd      application/x-navidoc
.o      application/octet-stream
.oda      application/oda
.omc      application/x-omc
.omcd      application/x-omcdatamaker
.omcr      application/x-omcregerator
.p      text/x-pascal
.p10      application/pkcs10
.p10      application/x-pkcs10
.p12      application/pkcs-12
.p12      application/x-pkcs12
.p7a      application/x-pkcs7-signature
.p7c      application/pkcs7-mime
.p7c      application/x-pkcs7-mime
.p7m      application/pkcs7-mime
.p7m      application/x-pkcs7-mime
.p7r      application/x-pkcs7-certreqresp
.p7s      application/pkcs7-signature
.part      application/pro_eng
.pas      text/pascal
.pbm      image/x-portable-bitmap
.pcl      application/vnd.hp-pcl
.pcl      application/x-pcl
.pct      image/x-pict
.pcx      image/x-pcx
.pdb      chemical/x-pdb
.pdf      application/pdf
.pfunk      audio/make
.pfunk      audio/make.my.funk
.pgm      image/x-portable-graymap
.pgm      image/x-portable-greymap
.pic      image/pict
.pict      image/pict
.pkg      application/x-newton-compatible-pkg
.pko      application/vnd.ms-pki.pko
.pl      text/plain
.pl      text/x-script.perl
.plx      application/x-pixclscript
.pm      image/x-xpixmap
.pm      text/x-script.perl-module
.pm4      application/x-pagemaker
.pm5      application/x-pagemaker
.png      image/png
.pnm      application/x-portable-anymap
.pnm      image/x-portable-anymap
.pot      application/mspowerpoint
.pot      application/vnd.ms-powerpoint
.pov      model/x-pov
.ppa      application/vnd.ms-powerpoint
.ppm      image/x-portable-pixmap
.pps      application/mspowerpoint
.pps      application/vnd.ms-powerpoint
.ppt      application/mspowerpoint
.ppt      application/powerpoint
.ppt      application/vnd.ms-powerpoint
.ppt      application/x-mspowerpoint
.ppz      application/mspowerpoint
.pre      application/x-freelance
.prt      application/pro_eng
.ps      application/postscript
.psd      application/octet-stream
.pvu      paleovu/x-pv
.pwz      application/vnd.ms-powerpoint
.py      text/x-script.phyton
.pyc      applicaiton/x-bytecode.python
.qcp      audio/vnd.qcelp
.qd3      x-world/x-3dmf
.qd3d      x-world/x-3dmf
.qif      image/x-quicktime
.qt      video/quicktime
.qtc      video/x-qtc
.qti      image/x-quicktime
.qtif      image/x-quicktime
.ra      audio/x-pn-realaudio
.ra      audio/x-pn-realaudio-plugin
.ra      audio/x-realaudio
.ram      audio/x-pn-realaudio
.ras      application/x-cmu-raster
.ras      image/cmu-raster
.ras      image/x-cmu-raster
.rast      image/cmu-raster
.rexx      text/x-script.rexx
.rf      image/vnd.rn-realflash
.rgb      image/x-rgb
.rm      application/vnd.rn-realmedia
.rm      audio/x-pn-realaudio
.rmi      audio/mid
.rmm      audio/x-pn-realaudio
.rmp      audio/x-pn-realaudio
.rmp      audio/x-pn-realaudio-plugin
.rng      application/ringing-tones
.rng      application/vnd.nokia.ringing-tone
.rnx      application/vnd.rn-realplayer
.roff      application/x-troff
.rp      image/vnd.rn-realpix
.rpm      audio/x-pn-realaudio-plugin
.rt      text/richtext
.rt      text/vnd.rn-realtext
.rtf      application/rtf
.rtf      application/x-rtf
.rtf      text/richtext
.rtx      application/rtf
.rtx      text/richtext
.rv      video/vnd.rn-realvideo
.s      text/x-asm
.s3m      audio/s3m
.saveme      application/octet-stream
.sbk      application/x-tbook
.scm      application/x-lotusscreencam
.scm      text/x-script.guile
.scm      text/x-script.scheme
.scm      video/x-scm
.sdml      text/plain
.sdp      application/sdp
.sdp      application/x-sdp
.sdr      application/sounder
.sea      application/sea
.sea      application/x-sea
.set      application/set
.sgm      text/sgml
.sgm      text/x-sgml
.sgml      text/sgml
.sgml      text/x-sgml
.sh      application/x-bsh
.sh      application/x-sh
.sh      application/x-shar
.sh      text/x-script.sh
.shar      application/x-bsh
.shar      application/x-shar
.shtml      text/html
.shtml      text/x-server-parsed-html
.sid      audio/x-psid
.sit      application/x-sit
.sit      application/x-stuffit
.skd      application/x-koan
.skm      application/x-koan
.skp      application/x-koan
.skt      application/x-koan
.sl      application/x-seelogo
.smi      application/smil
.smil      application/smil
.snd      audio/basic
.snd      audio/x-adpcm
.sol      application/solids
.spc      application/x-pkcs7-certificates
.spc      text/x-speech
.spl      application/futuresplash
.spr      application/x-sprite
.sprite      application/x-sprite
.src      application/x-wais-source
.ssi      text/x-server-parsed-html
.ssm      application/streamingmedia
.sst      application/vnd.ms-pki.certstore
.step      application/step
.stl      application/sla
.stl      application/vnd.ms-pki.stl
.stl      application/x-navistyle
.stp      application/step
.sv4cpio      application/x-sv4cpio
.sv4crc      application/x-sv4crc
.svf      image/vnd.dwg
.svf      image/x-dwg
.svr      application/x-world
.svr      x-world/x-svr
.swf      application/x-shockwave-flash
.t      application/x-troff
.talk      text/x-speech
.tar      application/x-tar
.tbk      application/toolbook
.tbk      application/x-tbook
.tcl      application/x-tcl
.tcl      text/x-script.tcl
.tcsh      text/x-script.tcsh
.tex      application/x-tex
.texi      application/x-texinfo
.texinfo      application/x-texinfo
.text      application/plain
.text      text/plain
.tgz      application/gnutar
.tgz      application/x-compressed
.tif      image/tiff
.tif      image/x-tiff
.tiff      image/tiff
.tiff      image/x-tiff
.tr      application/x-troff
.tsi      audio/tsp-audio
.tsp      application/dsptype
.tsp      audio/tsplayer
.tsv      text/tab-separated-values
.turbot      image/florian
.txt      text/plain
.uil      text/x-uil
.uni      text/uri-list
.unis      text/uri-list
.unv      application/i-deas
.uri      text/uri-list
.uris      text/uri-list
.ustar      application/x-ustar
.ustar      multipart/x-ustar
.uu      application/octet-stream
.uu      text/x-uuencode
.uue      text/x-uuencode
.vcd      application/x-cdlink
.vcs      text/x-vcalendar
.vda      application/vda
.vdo      video/vdo
.vew      application/groupwise
.viv      video/vivo
.viv      video/vnd.vivo
.vivo      video/vivo
.vivo      video/vnd.vivo
.vmd      application/vocaltec-media-desc
.vmf      application/vocaltec-media-file
.voc      audio/voc
.voc      audio/x-voc
.vos      video/vosaic
.vox      audio/voxware
.vqe      audio/x-twinvq-plugin
.vqf      audio/x-twinvq
.vql      audio/x-twinvq-plugin
.vrml      application/x-vrml
.vrml      model/vrml
.vrml      x-world/x-vrml
.vrt      x-world/x-vrt
.vsd      application/x-visio
.vst      application/x-visio
.vsw      application/x-visio
.w60      application/wordperfect6.0
.w61      application/wordperfect6.1
.w6w      application/msword
.wav      audio/wav
.wav      audio/x-wav
.wb1      application/x-qpro
.wbmp      image/vnd.wap.wbmp
.web      application/vnd.xara
.wiz      application/msword
.wk1      application/x-123
.wmf      windows/metafile
.wml      text/vnd.wap.wml
.wmlc      application/vnd.wap.wmlc
.wmls      text/vnd.wap.wmlscript
.wmlsc      application/vnd.wap.wmlscriptc
.word      application/msword
.wp      application/wordperfect
.wp5      application/wordperfect
.wp5      application/wordperfect6.0
.wp6      application/wordperfect
.wpd      application/wordperfect
.wpd      application/x-wpwin
.wq1      application/x-lotus
.wri      application/mswrite
.wri      application/x-wri
.wrl      application/x-world
.wrl      model/vrml
.wrl      x-world/x-vrml
.wrz      model/vrml
.wrz      x-world/x-vrml
.wsc      text/scriplet
.wsrc      application/x-wais-source
.wtk      application/x-wintalk
.xbm      image/x-xbitmap
.xbm      image/x-xbm
.xbm      image/xbm
.xdr      video/x-amt-demorun
.xgz      xgl/drawing
.xif      image/vnd.xiff
.xl      application/excel
.xla      application/excel
.xla      application/x-excel
.xla      application/x-msexcel
.xlb      application/excel
.xlb      application/vnd.ms-excel
.xlb      application/x-excel
.xlc      application/excel
.xlc      application/vnd.ms-excel
.xlc      application/x-excel
.xld      application/excel
.xld      application/x-excel
.xlk      application/excel
.xlk      application/x-excel
.xll      application/excel
.xll      application/vnd.ms-excel
.xll      application/x-excel
.xlm      application/excel
.xlm      application/vnd.ms-excel
.xlm      application/x-excel
.xls      application/excel
.xls      application/vnd.ms-excel
.xls      application/x-excel
.xls      application/x-msexcel
.xlt      application/excel
.xlt      application/x-excel
.xlv      application/excel
.xlv      application/x-excel
.xlw      application/excel
.xlw      application/vnd.ms-excel
.xlw      application/x-excel
.xlw      application/x-msexcel
.xm      audio/xm
.xml      application/xml
.xml      text/xml
.xmz      xgl/movie
.xpix      application/x-vnd.ls-xpix
.xpm      image/x-xpixmap
.xpm      image/xpm
.x-png      image/png
.xsr      video/x-amt-showrun
.xwd      image/x-xwd
.xwd      image/x-xwindowdump
.xyz      chemical/x-pdb
.z      application/x-compress
.z      application/x-compressed
.zip      application/x-compressed
.zip      application/x-zip-compressed
.zip      application/zip
.zip      multipart/x-zip
.zoo      application/octet-stream
.zsh      text/x-script.zsh

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-05-17 at 20:24:05ID21854780
Tags

java

Topic

Java Programming Language

Participating Experts
3
Points
250
Comments
7

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. RPM return codes
    Hello All, I am very new to the Linux/RPM/ & scripting world, and I am writing a install script to launch an rpm. After launching the rpm I would like to check the return code of the rpm call. Is there a way to do this. I've been looking on the web and I can not even ...
  2. Export org chart from powerpoint to visio
    Is it possible to export an org chart in powerpoint to visio?
  3. Visio to Powerpoint
    Is there a way to save a series of Visio Sheets into Powerpoint presentation? Either a *.ppt, or *.pps?
  4. How to find a Powerpoint or Visio artist?
    I periodically need to create a business sketch into a PowerPoint (or Visio) diagram, Is there a web site I could go to in order to find someone to do these little projects? Or do you know a company that does this without charging a fortune?
  5. Visio to Powerpoint
    I used visio to build an org chart and pasted it into powerpoint. My manager wants a copy of it editable in powerpoint. Since he doesn't have visio and won't install it. I'm stuck rebuilding the thing and doing extra work. I hate reworking stuff like this. How can ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: Giant2Posted on 2006-05-18 at 00:01:40ID: 16706322

You must parse those lines.

 

by: mistagitarPosted on 2006-05-18 at 00:26:40ID: 16706486

You mean the MIME extentions?  Those work, I only posted them in case you wanted to test the code and need the mime.dat file.

So still, any idea why the browser shows the header lines?

Ross

 

by: Giant2Posted on 2006-05-18 at 00:37:01ID: 16706514

you write:
          // Send the status line.
>          os.writeBytes(statusLine);
         
          // Send the content type line.
>          os.writeBytes(contentTypeLine);
         
          // Send a blank line to indicate the end of the header lines.
>          os.writeBytes(CRLF);

As normal send. The HTTP header has it's own protocol. See here:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

If you send in the manner you do, the browser cannot recognize it's an header. It see only a it could be a part of an HTML page.

 

by: Giant2Posted on 2006-05-18 at 00:43:08ID: 16706539

If you want to see an header on working see here:
http://web-sniffer.net/

 

by: bazarnyPosted on 2006-05-18 at 00:58:34ID: 16706586

Do you insert extra CRLF between last header and content? I wonder why would you need to hand-code http server, BTW

 

by: gireeshkumarPosted on 2006-05-18 at 01:59:34ID: 16706847

There should be an empty line between header and body
Secondly, i am wondering if it should
final static String CRLF = "\r\n";
or
final static String CRLF = "\n"; \\ just \n??

 

by: mistagitarPosted on 2006-05-18 at 02:40:45ID: 16707011

Ahhh, got it.  I just had to add "HTTP/1.1 " to the besinning of the status line.

Thanks for the help, especially the RFC...

Ross

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...