Java Tutorial/Servlet/Response

Материал из Java эксперт
Версия от 05:07, 1 июня 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Get Servlet OutputStream from Servlet Response

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
   
  public void doGet (HttpServletRequest req, HttpServletResponse res) throws IOException
  {
    ServletOutputStream out = res.getOutputStream();
    res.setContentType("text/html");
    out.println("<html><head><title>Basic Servlet</title></head>");
    out.println("<body>Hello World</body></html>");
  }
}





HTTP Response

//Revised from jcommon web;

import java.io.*;
import java.net.*;
import java.util.*;

public class HTTPResponse {
  public static final HashMap<String,String> MIME_TYPES = new HashMap<String,String>();
  static {
    MIME_TYPES.put("gif", "image/gif");
    MIME_TYPES.put("jpeg", "image/jpeg");
    MIME_TYPES.put("jpg", "image/jpeg");
    MIME_TYPES.put("jpe", "image/jpeg");
    MIME_TYPES.put("bmp", "image/bmp");
    MIME_TYPES.put("png", "image/png");
    MIME_TYPES.put("tif", "image/tiff");
    MIME_TYPES.put("tiff", "image/tiff");
    MIME_TYPES.put("jnlp", "application/x-java-jnlp-file");
    MIME_TYPES.put("js", "application/x-javascript");
    MIME_TYPES.put("doc", "application/msword");
    MIME_TYPES.put("bin", "application/octet-stream");
    MIME_TYPES.put("exe", "application/octet-stream");
    MIME_TYPES.put("pdf", "application/pdf");
    MIME_TYPES.put("ai", "application/postscript");
    MIME_TYPES.put("eps", "application/postscript");
    MIME_TYPES.put("ps", "application/postscript");
    MIME_TYPES.put("rtf", "application/rtf");
    MIME_TYPES.put("class", "application/x-java-vm");
    MIME_TYPES.put("ser", "application/x-java-serialized-object");
    MIME_TYPES.put("jar", "application/x-java-archive");
    MIME_TYPES.put("sh", "application/x-sh");
    MIME_TYPES.put("tar", "application/x-tar");
    MIME_TYPES.put("zip", "application/zip");
    MIME_TYPES.put("ua", "audio/basic");
    MIME_TYPES.put("wav", "audio/x-wav");
    MIME_TYPES.put("mid", "audio/x-midi");
    MIME_TYPES.put("htm", "text/html");
    MIME_TYPES.put("html", "text/html");
    MIME_TYPES.put("css", "text/css");
    MIME_TYPES.put("txt", "text/plain");
    MIME_TYPES.put("mpeg", "video/mpeg");
    MIME_TYPES.put("mpg", "video/mpeg");
    MIME_TYPES.put("mpe", "video/mpeg");
    MIME_TYPES.put("qt", "video/quicktime");
    MIME_TYPES.put("mov", "video/quicktime");
    MIME_TYPES.put("avi", "video/avi");
    MIME_TYPES.put("movie", "video/x-sgi-movie");
  }
  
  public static String SERVER = "JavaWebServer/1.0";
  
  public static final int OK = 200;
  
  private Socket s;
  private int mode;
  private HashMap<String,String> headers;
  private HashSet<String> keys;
  
  public HTTPResponse(Socket s, int mode) throws IOException {
    this.s = s;
    this.mode = mode;
    
    headers = new HashMap<String,String>();
    keys = new HashSet<String>();
  }
  
  public void addHeader(String header, String value) {
    keys.add(header.toLowerCase());
    headers.put(header, value);
  }
  
  private void writeHeaders() throws IOException {
    if (mode == OK) {
      writeLine("HTTP/1.1 200 OK");
    }
    if (!keys.contains("server")) {
      headers.put("Server", SERVER);
    }
    if (!keys.contains("date")) {
      headers.put("Date", String.format("%EEE%, %d% %MMM% %yyyy% %HH%:%mm%:%ss% %Z%",new GregorianCalendar()));
    }
    
    Iterator<String> iterator = headers.keySet().iterator();
    String key;
    String value;
    while (iterator.hasNext()) {
      key = iterator.next();
      value = headers.get(key);
      writeLine(key + ": " + value);
    }
    
    writeLine("");
  }
  
  private void writeLine(String string) throws IOException {
    s.getOutputStream().write((string + "\r\n").getBytes());
  }
  
  public void writeFile(File f) throws IOException {
    if ((!keys.contains("content-type")) && (f.getName().indexOf(".") > -1)) {
      String ext = f.getName().substring(f.getName().lastIndexOf(".") + 1).toLowerCase();
      if (MIME_TYPES.containsKey(ext)) {
        headers.put("Content-Type", MIME_TYPES.get(ext));
      }
    }
    if (!keys.contains("content-length")) {
      headers.put("Content-Length", String.valueOf(f.length()));
    }
    writeHeaders();
    
    FileInputStream fis = new FileInputStream(f);
    byte[] b = new byte[512];
    int len;
    while ((len = fis.read(b)) > -1) {
      s.getOutputStream().write(b, 0, len);
    }
    s.getOutputStream().flush();
    s.close();
  }
}





Servlet OutputStream

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
public class MyServlet extends HttpServlet {
  
  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
    ServletOutputStream out = res.getOutputStream();
    res.setContentType("text/plain"); 
    String file = req.getPathInfo();
    if (file == null) {
      out.println("Extra path info was null; should be a resource to view");
      return;
    }
    URL url = getServletContext().getResource(file);
    if (url == null) {
      out.println("Resource " + file + " not found");
      return;
    }
    URLConnection con = null;
    try {
      con = url.openConnection();
      con.connect();
    }
    catch (IOException e) {
      out.println("Resource " + file + " could not be read: " + e.getMessage());
      return;
    }
  }
}





Servlet Response Send Error

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
public class MyServlet extends HttpServlet {
  
  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
    res.setBufferSize(8 * 1024); // 8K buffer
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
    int size = res.getBufferSize(); // returns 8096 or greater
    // Record the default size, in the log
    log("The default buffer size is " + size);
    out.println("The client won"t see this");
    res.reset();
    out.println("And this won"t be seen if sendError() is called");
    if (req.getParameter("important_parameter") == null) {
      res.sendError(res.SC_BAD_REQUEST, "important_parameter needed");
    }
  }
}





Servlet Response Send Redirect

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class MyServlet extends HttpServlet {
   
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        
       //redirect the user depending on the value of the "go" param
        String destination = getInitParameter("go");
        String contextPath = request.getContextPath();
        
         if(destination == null || destination.equals(""))
            throw new ServletException(
             "Missing or invalid "go" parameter in " +
               getClass().getName());
        
        if(destination.equals("weather"))
        //ensure URL rewriting
            response.sendRedirect(response.encodeRedirectURL(contextPath + "/weather") );
        
         if(destination.equals("maps"))
        //ensure URL rewriting
            response.sendRedirect(response.encodeRedirectURL(contextPath + "/maps") );
    }
}