📄 httpservlet.java
字号:
{ String method = req.getMethod(); if (method.equals(METHOD_GET)) { long lastModified = getLastModified(req); if (lastModified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); if (ifModifiedSince < (lastModified / 1000 * 1000)) { // If the servlet mod time is later, call doGet() // Round down to the nearest second for a proper compare // A ifModifiedSince of -1 will always be less maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } } } else if (method.equals(METHOD_HEAD)) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(req, resp); } else if (method.equals(METHOD_POST)) { doPost(req, resp); } else if (method.equals(METHOD_PUT)) { doPut(req, resp); } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp); } else { // // Note that this means NO servlet supports whatever // method was requested, anywhere on this server. // String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[1]; errArgs[0] = method; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); } } /* * Sets the Last-Modified entity header field, if it has not * already been set and if the value is meaningful. Called before * doGet, to ensure that headers are set before response data is * written. A subclass might have set this header already, so we * check. */ private void maybeSetLastModified(HttpServletResponse resp, long lastModified) { if (resp.containsHeader(HEADER_LASTMOD)) return; if (lastModified >= 0) resp.setDateHeader(HEADER_LASTMOD, lastModified); } /** * * Dispatches client requests to the protected * <code>service</code> method. There's no need to * override this method. * * * @param req the {@link HttpServletRequest} object that * contains the request the client made of * the servlet * * * @param res the {@link HttpServletResponse} object that * contains the response the servlet returns * to the client * * * @exception IOException if an input or output error occurs * while the servlet is handling the * HTTP request * * @exception ServletException if the HTTP request cannot * be handled * * * @see javax.servlet.Servlet#service * */ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request; HttpServletResponse response; try { request = (HttpServletRequest) req; response = (HttpServletResponse) res; } catch (ClassCastException e) { throw new ServletException("non-HTTP request or response"); } service(request, response); }}/* * A response that includes no body, for use in (dumb) "HEAD" support. * This just swallows that body, counting the bytes in order to set * the content length appropriately. All other methods delegate directly * to the HTTP Servlet Response object used to construct this one. */// file privateclass NoBodyResponse implements HttpServletResponse { private HttpServletResponse resp; private NoBodyOutputStream noBody; private PrintWriter writer; private boolean didSetContentLength; // file private NoBodyResponse(HttpServletResponse r) { resp = r; noBody = new NoBodyOutputStream(); } // file private void setContentLength() { if (!didSetContentLength) resp.setContentLength(noBody.getContentLength()); } // SERVLET RESPONSE interface methods public void setContentLength(int len) { resp.setContentLength(len); didSetContentLength = true; } public void setCharacterEncoding(String charset) { resp.setCharacterEncoding(charset); } public void setContentType(String type) { resp.setContentType(type); } public String getContentType() { return resp.getContentType(); } public ServletOutputStream getOutputStream() throws IOException { return noBody; } public String getCharacterEncoding() { return resp.getCharacterEncoding(); } public PrintWriter getWriter() throws UnsupportedEncodingException { if (writer == null) { OutputStreamWriter w; w = new OutputStreamWriter(noBody, getCharacterEncoding()); writer = new PrintWriter(w); } return writer; } public void setBufferSize(int size) throws IllegalStateException { resp.setBufferSize(size); } public int getBufferSize() { return resp.getBufferSize(); } public void reset() throws IllegalStateException { resp.reset(); } public void resetBuffer() throws IllegalStateException { resp.resetBuffer(); } public boolean isCommitted() { return resp.isCommitted(); } public void flushBuffer() throws IOException { resp.flushBuffer(); } public void setLocale(Locale loc) { resp.setLocale(loc); } public Locale getLocale() { return resp.getLocale(); } // HTTP SERVLET RESPONSE interface methods public void addCookie(Cookie cookie) { resp.addCookie(cookie); } public boolean containsHeader(String name) { return resp.containsHeader(name); } /** @deprecated */ public void setStatus(int sc, String sm) { resp.setStatus(sc, sm); } public void setStatus(int sc) { resp.setStatus(sc); } public void setHeader(String name, String value) { resp.setHeader(name, value); } public void setIntHeader(String name, int value) { resp.setIntHeader(name, value); } public void setDateHeader(String name, long date) { resp.setDateHeader(name, date); } public void sendError(int sc, String msg) throws IOException { resp.sendError(sc, msg); } public void sendError(int sc) throws IOException { resp.sendError(sc); } public void sendRedirect(String location) throws IOException { resp.sendRedirect(location); } public String encodeURL(String url) { return resp.encodeURL(url); } public String encodeRedirectURL(String url) { return resp.encodeRedirectURL(url); } public void addHeader(String name, String value) { resp.addHeader(name, value); } public void addDateHeader(String name, long value) { resp.addDateHeader(name, value); } public void addIntHeader(String name, int value) { resp.addIntHeader(name, value); } /** * @deprecated As of Version 2.1, replaced by * {@link HttpServletResponse#encodeURL}. * */ public String encodeUrl(String url) { return this.encodeURL(url); } /** * @deprecated As of Version 2.1, replaced by * {@link HttpServletResponse#encodeRedirectURL}. * */ public String encodeRedirectUrl(String url) { return this.encodeRedirectURL(url); }}/* * Servlet output stream that gobbles up all its data. */ // file privateclass NoBodyOutputStream extends ServletOutputStream { private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings"; private static ResourceBundle lStrings = ResourceBundle.getBundle(LSTRING_FILE); private int contentLength = 0; // file private NoBodyOutputStream() {} // file private int getContentLength() { return contentLength; } public void write(int b) { contentLength++; } public void write(byte buf[], int offset, int len) throws IOException { if (len >= 0) { contentLength += len; } else { // XXX // isn't this really an IllegalArgumentException? String msg = lStrings.getString("err.io.negativelength"); throw new IOException("negative length"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -