Java Tutorial/Servlet/Response
Версия от 17:44, 31 мая 2010; (обсуждение)
Содержание
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") );
}
}