天猫网站设计分析,外贸福步论坛登录,免费网站商城建设,中国建设银行招聘官网站一。前言 
Java语言大多用于开发web系统的后端#xff0c;也就是我们是的B/S架构。通过浏览器一个URL去访问系统的后端资源和逻辑。 当我在代码里看到这个类HttpServletRequest 时 让我想到了Servlet#xff0c;Servlet看上去多么像是Java的一个普通类#xff0c;但是它确实…一。前言 
Java语言大多用于开发web系统的后端也就是我们是的B/S架构。通过浏览器一个URL去访问系统的后端资源和逻辑。 当我在代码里看到这个类HttpServletRequest 时 让我想到了ServletServlet看上去多么像是Java的一个普通类但是它确实不是一个类它是通过Java实现的一项功能就是用来连接URL和服务端程序的中间件。除了HttpServletRequest 对应的还有HttpServletResponse 
二。介绍Servlet 
什么事Servlet ServletServer Applet是JavaServlet的简称称为小服务程序或服务连接器用Java编写的服务器端程序具有独立于平台和协议的特性主要功能在于交互式地浏览和生成数据生成动态Web内容是 JavaWeb中我们将会接触到三大组件Servlet、Filter、ListenerServlet由服务器调用处理服务器接收到的请求即完成接受请求数据 -- 处理请求 -- 完成响应其本质就是一个实现了Servlet接口的java类 
实现Servlet的方式 
实现Servlet有三种方式 
实现 javax.servlet.Servlet 接口继承 javax.servlet.GenericServlet类继承 javax.servlet.http.HttpServlet类 
实际开发中我们通常会选择继承HttpServlet类来完成我们的Servlet但认识Servlet接口这种方式也是很重要的是我们入门知识中不可或缺的部分 
使用Servlet 
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the License); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package javax.servlet.http;import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;import javax.servlet.ServletException;
import javax.servlet.ServletRequest;/*** Extends the {link javax.servlet.ServletRequest} interface to provide request* information for HTTP servlets.* p* The servlet container creates an codeHttpServletRequest/code object and* passes it as an argument to the servlets service methods* (codedoGet/code, codedoPost/code, etc).*/
public interface HttpServletRequest extends ServletRequest {/*** String identifier for Basic authentication. Value BASIC*/public static final String BASIC_AUTH  BASIC;/*** String identifier for Form authentication. Value FORM*/public static final String FORM_AUTH  FORM;/*** String identifier for Client Certificate authentication. Value* CLIENT_CERT*/public static final String CLIENT_CERT_AUTH  CLIENT_CERT;/*** String identifier for Digest authentication. Value DIGEST*/public static final String DIGEST_AUTH  DIGEST;/*** Returns the name of the authentication scheme used to protect the* servlet. All servlet containers support basic, form and client* certificate authentication, and may additionally support digest* authentication. If the servlet is not authenticated codenull/code is* returned.* p* Same as the value of the CGI variable AUTH_TYPE.** return one of the static members BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH,*         DIGEST_AUTH (suitable for  comparison) or the*         container-specific string indicating the authentication scheme,*         or codenull/code if the request was not authenticated.*/public String getAuthType();/*** Returns an array containing all of the codeCookie/code objects the* client sent with this request. This method returns codenull/code if* no cookies were sent.** return an array of all the codeCookies/code included with this*         request, or codenull/code if the request has no cookies*/public Cookie[] getCookies();/*** Returns the value of the specified request header as a codelong/code* value that represents a codeDate/code object. Use this method with* headers that contain dates, such as codeIf-Modified-Since/code.* p* The date is returned as the number of milliseconds since January 1, 1970* GMT. The header name is case insensitive.* p* If the request did not have a header of the specified name, this method* returns -1. If the header cant be converted to a date, the method throws* an codeIllegalArgumentException/code.** param name*            a codeString/code specifying the name of the header* return a codelong/code value representing the date specified in the*         header expressed as the number of milliseconds since January 1,*         1970 GMT, or -1 if the named header was not included with the*         request* exception IllegalArgumentException*                If the header value cant be converted to a date*/public long getDateHeader(String name);/*** Returns the value of the specified request header as a* codeString/code. If the request did not include a header of the* specified name, this method returns codenull/code. If there are* multiple headers with the same name, this method returns the first head* in the request. The header name is case insensitive. You can use this* method with any request header.** param name*            a codeString/code specifying the header name* return a codeString/code containing the value of the requested*         header, or codenull/code if the request does not have a*         header of that name*/public String getHeader(String name);/*** Returns all the values of the specified request header as an* codeEnumeration/code of codeString/code objects.* p* Some headers, such as codeAccept-Language/code can be sent by clients* as several headers each with a different value rather than sending the* header as a comma separated list.* p* If the request did not include any headers of the specified name, this* method returns an empty codeEnumeration/code. The header name is case* insensitive. You can use this method with any request header.** param name*            a codeString/code specifying the header name* return an codeEnumeration/code containing the values of the requested*         header. If the request does not have any headers of that name*         return an empty enumeration. If the container does not allow*         access to header information, return null*/public EnumerationString getHeaders(String name);/*** Returns an enumeration of all the header names this request contains. If* the request has no headers, this method returns an empty enumeration.* p* Some servlet containers do not allow servlets to access headers using* this method, in which case this method returns codenull/code** return an enumeration of all the header names sent with this request; if*         the request has no headers, an empty enumeration; if the servlet*         container does not allow servlets to use this method,*         codenull/code*/public EnumerationString getHeaderNames();/*** Returns the value of the specified request header as an codeint/code.* If the request does not have a header of the specified name, this method* returns -1. If the header cannot be converted to an integer, this method* throws a codeNumberFormatException/code.* p* The header name is case insensitive.** param name*            a codeString/code specifying the name of a request header* return an integer expressing the value of the request header or -1 if the*         request doesnt have a header of this name* exception NumberFormatException*                If the header value cant be converted to an*                codeint/code*/public int getIntHeader(String name);/*** Returns the name of the HTTP method with which this request was made, for* example, GET, POST, or PUT. Same as the value of the CGI variable* REQUEST_METHOD.** return a codeString/code specifying the name of the method with*         which this request was made*/public String getMethod();/*** Returns any extra path information associated with the URL the client* sent when it made this request. The extra path information follows the* servlet path but precedes the query string and will start with a /* character.* p* This method returns codenull/code if there was no extra path* information.* p* Same as the value of the CGI variable PATH_INFO.** return a codeString/code, decoded by the web container, specifying*         extra path information that comes after the servlet path but*         before the query string in the request URL; or codenull/code*         if the URL does not have any extra path information*/public String getPathInfo();/*** Returns any extra path information after the servlet name but before the* query string, and translates it to a real path. Same as the value of the* CGI variable PATH_TRANSLATED.* p* If the URL does not have any extra path information, this method returns* codenull/code or the servlet container cannot translate the virtual* path to a real path for any reason (such as when the web application is* executed from an archive). The web container does not decode this string.** return a codeString/code specifying the real path, or*         codenull/code if the URL does not have any extra path*         information*/public String getPathTranslated();/*** Returns the portion of the request URI that indicates the context of the* request. The context path always comes first in a request URI. The path* starts with a / character but does not end with a / character. For* servlets in the default (root) context, this method returns . The* container does not decode this string.** return a codeString/code specifying the portion of the request URI*         that indicates the context of the request*/public String getContextPath();/*** Returns the query string that is contained in the request URL after the* path. This method returns codenull/code if the URL does not have a* query string. Same as the value of the CGI variable QUERY_STRING.** return a codeString/code containing the query string or*         codenull/code if the URL contains no query string. The value*         is not decoded by the container.*/public String getQueryString();/*** Returns the login of the user making this request, if the user has been* authenticated, or codenull/code if the user has not been* authenticated. Whether the user name is sent with each subsequent request* depends on the browser and type of authentication. Same as the value of* the CGI variable REMOTE_USER.** return a codeString/code specifying the login of the user making*         this request, or codenull/code if the user login is not known*/public String getRemoteUser();/*** Returns a boolean indicating whether the authenticated user is included* in the specified logical role. Roles and role membership can be defined* using deployment descriptors. If the user has not been authenticated, the* method returns codefalse/code.** param role*            a codeString/code specifying the name of the role* return a codeboolean/code indicating whether the user making this*         request belongs to a given role; codefalse/code if the user*         has not been authenticated*/public boolean isUserInRole(String role);/*** Returns a codejava.security.Principal/code object containing the name* of the current authenticated user. If the user has not been* authenticated, the method returns codenull/code.** return a codejava.security.Principal/code containing the name of the*         user making this request; codenull/code if the user has not*         been authenticated*/public java.security.Principal getUserPrincipal();/*** Returns the session ID specified by the client. This may not be the same* as the ID of the current valid session for this request. If the client* did not specify a session ID, this method returns codenull/code.** return a codeString/code specifying the session ID, or*         codenull/code if the request did not specify a session ID* see #isRequestedSessionIdValid*/public String getRequestedSessionId();/*** Returns the part of this requests URL from the protocol name up to the* query string in the first line of the HTTP request. The web container* does not decode this String. For example:* table summaryExamples of Returned Values* tr alignleft* thFirst line of HTTP request/th* thReturned Value/th* tr* tdPOST /some/path.html HTTP/1.1* td* td/some/path.html* tr* tdGET http://foo.bar/a.html HTTP/1.0* td* td/a.html* tr* tdHEAD /xyz?ab HTTP/1.1* td* td/xyz* /table* p* To reconstruct an URL with a scheme and host, use* {link #getRequestURL}.** return a codeString/code containing the part of the URL from the*         protocol name up to the query string* see #getRequestURL*/public String getRequestURI();/*** Reconstructs the URL the client used to make the request. The returned* URL contains a protocol, server name, port number, and server path, but* it does not include query string parameters.* p* Because this method returns a codeStringBuffer/code, not a string,* you can modify the URL easily, for example, to append query parameters.* p* This method is useful for creating redirect messages and for reporting* errors.** return a codeStringBuffer/code object containing the reconstructed*         URL*/public StringBuffer getRequestURL();/*** Returns the part of this requests URL that calls the servlet. This path* starts with a / character and includes either the servlet name or a* path to the servlet, but does not include any extra path information or a* query string. Same as the value of the CGI variable SCRIPT_NAME.* p* This method will return an empty string () if the servlet used to* process this request was matched using the /* pattern.** return a codeString/code containing the name or path of the servlet*         being called, as specified in the request URL, decoded, or an*         empty string if the servlet used to process the request is*         matched using the /* pattern.*/public String getServletPath();/*** Returns the current codeHttpSession/code associated with this request* or, if there is no current session and codecreate/code is true,* returns a new session.* p* If codecreate/code is codefalse/code and the request has no valid* codeHttpSession/code, this method returns codenull/code.* p* To make sure the session is properly maintained, you must call this* method before the response is committed. If the container is using* cookies to maintain session integrity and is asked to create a new* session when the response is committed, an IllegalStateException is* thrown.** param create*            codetrue/code to create a new session for this request if*            necessary; codefalse/code to return codenull/code if*            theres no current session* return the codeHttpSession/code associated with this request or*         codenull/code if codecreate/code is codefalse/code*         and the request has no valid session* see #getSession()*/public HttpSession getSession(boolean create);/*** Returns the current session associated with this request, or if the* request does not have a session, creates one.** return the codeHttpSession/code associated with this request* see #getSession(boolean)*/public HttpSession getSession();/*** Changes the session ID of the session associated with this request. This* method does not create a new session object it only changes the ID of the* current session.** return the new session ID allocated to the session* see HttpSessionIdListener* since Servlet 3.1*/public String changeSessionId();/*** Checks whether the requested session ID is still valid.** return codetrue/code if this request has an id for a valid session*         in the current session context; codefalse/code otherwise* see #getRequestedSessionId* see #getSession*/public boolean isRequestedSessionIdValid();/*** Checks whether the requested session ID came in as a cookie.** return codetrue/code if the session ID came in as a cookie;*         otherwise, codefalse/code* see #getSession*/public boolean isRequestedSessionIdFromCookie();/*** Checks whether the requested session ID came in as part of the request* URL.** return codetrue/code if the session ID came in as part of a URL;*         otherwise, codefalse/code* see #getSession*/public boolean isRequestedSessionIdFromURL();/*** return {link #isRequestedSessionIdFromURL()}* deprecated As of Version 2.1 of the Java Servlet API, use*             {link #isRequestedSessionIdFromURL} instead.*/SuppressWarnings(dep-ann)// Spec API does not use Deprecatedpublic boolean isRequestedSessionIdFromUrl();/*** Triggers the same authentication process as would be triggered if the* request is for a resource that is protected by a security constraint.** param response  The response to use to return any authentication*                  challenge* return codetrue/code if the user is successfully authenticated and*         codefalse/code if not** throws IOException if the authentication process attempted to read from*         the request or write to the response and an I/O error occurred* throws IllegalStateException if the authentication process attempted to*         write to the response after it had been committed* throws ServletException if the authentication failed and the caller is*         expected to handle the failure* since Servlet 3.0*/public boolean authenticate(HttpServletResponse response)throws IOException, ServletException;/*** Authenticate the provided user name and password and then associated the* authenticated user with the request.** param username  The user name to authenticate* param password  The password to use to authenticate the user** throws ServletException*             If any of {link #getRemoteUser()},*             {link #getUserPrincipal()} or {link #getAuthType()} are*             non-null, if the configured authenticator does not support*             user name and password authentication or if the*             authentication fails* since Servlet 3.0*/public void login(String username, String password) throws ServletException;/*** Removes any authenticated user from the request.** throws ServletException*             If the logout fails* since Servlet 3.0*/public void logout() throws ServletException;/*** Return a collection of all uploaded Parts.** return A collection of all uploaded Parts.* throws IOException*             if an I/O error occurs* throws IllegalStateException*             if size limits are exceeded or no multipart configuration is*             provided* throws ServletException*             if the request is not multipart/form-data* since Servlet 3.0*/public CollectionPart getParts() throws IOException,ServletException;/*** Gets the named Part or null if the Part does not exist. Triggers upload* of all Parts.** param name The name of the Part to obtain** return The named Part or null if the Part does not exist* throws IOException*             if an I/O error occurs* throws IllegalStateException*             if size limits are exceeded* throws ServletException*             if the request is not multipart/form-data* since Servlet 3.0*/public Part getPart(String name) throws IOException,ServletException;/*** Start the HTTP upgrade process and pass the connection to the provided* protocol handler once the current request/response pair has completed* processing. Calling this method sets the response status to {link* HttpServletResponse#SC_SWITCHING_PROTOCOLS} and flushes the response.* Protocol specific headers must have already been set before this method* is called.** param T                     The type of the upgrade handler* param httpUpgradeHandlerClass The class that implements the upgrade*                                handler** return A newly created instance of the specified upgrade handler type** throws IOException*             if an I/O error occurred during the upgrade* throws ServletException*             if the given httpUpgradeHandlerClass fails to be instantiated* since Servlet 3.1*/public T extends HttpUpgradeHandler T upgrade(ClassT httpUpgradeHandlerClass) throws java.io.IOException, ServletException;
}/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the License); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package javax.servlet.http;import java.io.IOException;
import java.util.Collection;import javax.servlet.ServletResponse;/*** Extends the {link ServletResponse} interface to provide HTTP-specific* functionality in sending a response. For example, it has methods to access* HTTP headers and cookies.* p* The servlet container creates an codeHttpServletResponse/code object and* passes it as an argument to the servlets service methods (codedoGet/code, codedoPost/code, etc).** see javax.servlet.ServletResponse*/
public interface HttpServletResponse extends ServletResponse {/*** Adds the specified cookie to the response. This method can be called* multiple times to set more than one cookie.** param cookie*            the Cookie to return to the client*/public void addCookie(Cookie cookie);/*** Returns a boolean indicating whether the named response header has* already been set.** param name*            the header name* return codetrue/code if the named response header has already been*         set; codefalse/code otherwise*/public boolean containsHeader(String name);/*** Encodes the specified URL by including the session ID in it, or, if* encoding is not needed, returns the URL unchanged. The implementation of* this method includes the logic to determine whether the session ID needs* to be encoded in the URL. For example, if the browser supports cookies,* or session tracking is turned off, URL encoding is unnecessary.* p* For robust session tracking, all URLs emitted by a servlet should be run* through this method. Otherwise, URL rewriting cannot be used with* browsers which do not support cookies.** param url*            the url to be encoded.* return the encoded URL if encoding is needed; the unchanged URL*         otherwise.*/public String encodeURL(String url);/*** Encodes the specified URL for use in the codesendRedirect/code method* or, if encoding is not needed, returns the URL unchanged. The* implementation of this method includes the logic to determine whether the* session ID needs to be encoded in the URL. Because the rules for making* this determination can differ from those used to decide whether to encode* a normal link, this method is separated from the codeencodeURL/code* method.* p* All URLs sent to the codeHttpServletResponse.sendRedirect/code method* should be run through this method. Otherwise, URL rewriting cannot be* used with browsers which do not support cookies.** param url*            the url to be encoded.* return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* see #sendRedirect* see #encodeUrl*/public String encodeRedirectURL(String url);/*** param url*            the url to be encoded.* return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* deprecated As of version 2.1, use encodeURL(String url) instead*/SuppressWarnings(dep-ann)// Spec API does not use Deprecatedpublic String encodeUrl(String url);/*** param url*            the url to be encoded.* return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* deprecated As of version 2.1, use encodeRedirectURL(String url) instead*/SuppressWarnings(dep-ann)// Spec API does not use Deprecatedpublic String encodeRedirectUrl(String url);/*** Sends an error response to the client using the specified status code and* clears the output buffer. The server defaults to creating the response to* look like an HTML-formatted server error page containing the specified* message, setting the content type to text/html, leaving cookies and* other headers unmodified. If an error-page declaration has been made for* the web application corresponding to the status code passed in, it will* be served back in preference to the suggested msg parameter.* p* If the response has already been committed, this method throws an* IllegalStateException. After using this method, the response should be* considered to be committed and should not be written to.** param sc*            the error status code* param msg*            the descriptive message* exception IOException*                If an input or output exception occurs* exception IllegalStateException*                If the response was committed*/public void sendError(int sc, String msg) throws IOException;/*** Sends an error response to the client using the specified status code and* clears the buffer. This is equivalent to calling {link #sendError(int,* String)} with the same status code and codenull/code for the message.** param sc*            the error status code* exception IOException*                If an input or output exception occurs* exception IllegalStateException*                If the response was committed before this method call*/public void sendError(int sc) throws IOException;/*** Sends a temporary redirect response to the client using the specified* redirect location URL. This method can accept relative URLs; the servlet* container must convert the relative URL to an absolute URL before sending* the response to the client. If the location is relative without a leading* / the container interprets it as relative to the current request URI.* If the location is relative with a leading / the container interprets* it as relative to the servlet container root.* p* If the response has already been committed, this method throws an* IllegalStateException. After using this method, the response should be* considered to be committed and should not be written to.** param location*            the redirect location URL* exception IOException*                If an input or output exception occurs* exception IllegalStateException*                If the response was committed or if a partial URL is given*                and cannot be converted into a valid URL*/public void sendRedirect(String location) throws IOException;/*** Sets a response header with the given name and date-value. The date is* specified in terms of milliseconds since the epoch. If the header had* already been set, the new value overwrites the previous one. The* codecontainsHeader/code method can be used to test for the presence* of a header before setting its value.** param name*            the name of the header to set* param date*            the assigned date value* see #containsHeader* see #addDateHeader*/public void setDateHeader(String name, long date);/*** Adds a response header with the given name and date-value. The date is* specified in terms of milliseconds since the epoch. This method allows* response headers to have multiple values.** param name*            the name of the header to set* param date*            the additional date value* see #setDateHeader*/public void addDateHeader(String name, long date);/*** Sets a response header with the given name and value. If the header had* already been set, the new value overwrites the previous one. The* codecontainsHeader/code method can be used to test for the presence* of a header before setting its value.** param name*            the name of the header* param value*            the header value If it contains octet string, it should be*            encoded according to RFC 2047*            (http://www.ietf.org/rfc/rfc2047.txt)* see #containsHeader* see #addHeader*/public void setHeader(String name, String value);/*** Adds a response header with the given name and value. This method allows* response headers to have multiple values.** param name*            the name of the header* param value*            the additional header value If it contains octet string, it*            should be encoded according to RFC 2047*            (http://www.ietf.org/rfc/rfc2047.txt)* see #setHeader*/public void addHeader(String name, String value);/*** Sets a response header with the given name and integer value. If the* header had already been set, the new value overwrites the previous one.* The codecontainsHeader/code method can be used to test for the* presence of a header before setting its value.** param name*            the name of the header* param value*            the assigned integer value* see #containsHeader* see #addIntHeader*/public void setIntHeader(String name, int value);/*** Adds a response header with the given name and integer value. This method* allows response headers to have multiple values.** param name*            the name of the header* param value*            the assigned integer value* see #setIntHeader*/public void addIntHeader(String name, int value);/*** Sets the status code for this response. This method is used to set the* return status code when there is no error (for example, for the status* codes SC_OK or SC_MOVED_TEMPORARILY). If there is an error, and the* caller wishes to invoke an error-page defined in the web application, the* codesendError/code method should be used instead.* p* The container clears the buffer and sets the Location header, preserving* cookies and other headers.** param sc*            the status code* see #sendError*/public void setStatus(int sc);/*** Sets the status code and message for this response.** param sc*            the status code* param sm*            the status message* deprecated As of version 2.1, due to ambiguous meaning of the message*             parameter. To set a status code use*             codesetStatus(int)/code, to send an error with a*             description use codesendError(int, String)/code.*/SuppressWarnings(dep-ann)// Spec API does not use Deprecatedpublic void setStatus(int sc, String sm);/*** Get the HTTP status code for this Response.** return The HTTP status code for this Response** since Servlet 3.0*/public int getStatus();/*** Return the value for the specified header, or codenull/code if this* header has not been set.  If more than one value was added for this* name, only the first is returned; use {link #getHeaders(String)} to* retrieve all of them.** param name Header name to look up** return The first value for the specified header. This is the raw value*         so if multiple values are specified in the first header then they*         will be returned as a single header value .** since Servlet 3.0*/public String getHeader(String name);/*** Return a Collection of all the header values associated with the* specified header name.** param name Header name to look up** return The values for the specified header. These are the raw values so*         if multiple values are specified in a single header that will be*         returned as a single header value.** since Servlet 3.0*/public CollectionString getHeaders(String name);/*** Get the header names set for this HTTP response.** return The header names set for this HTTP response.** since Servlet 3.0*/public CollectionString getHeaderNames();/** Server status codes; see RFC 2068.*//*** Status code (100) indicating the client can continue.*/public static final int SC_CONTINUE  100;/*** Status code (101) indicating the server is switching protocols according* to Upgrade header.*/public static final int SC_SWITCHING_PROTOCOLS  101;/*** Status code (200) indicating the request succeeded normally.*/public static final int SC_OK  200;/*** Status code (201) indicating the request succeeded and created a new* resource on the server.*/public static final int SC_CREATED  201;/*** Status code (202) indicating that a request was accepted for processing,* but was not completed.*/public static final int SC_ACCEPTED  202;/*** Status code (203) indicating that the meta information presented by the* client did not originate from the server.*/public static final int SC_NON_AUTHORITATIVE_INFORMATION  203;/*** Status code (204) indicating that the request succeeded but that there* was no new information to return.*/public static final int SC_NO_CONTENT  204;/*** Status code (205) indicating that the agent emSHOULD/em reset the* document view which caused the request to be sent.*/public static final int SC_RESET_CONTENT  205;/*** Status code (206) indicating that the server has fulfilled the partial* GET request for the resource.*/public static final int SC_PARTIAL_CONTENT  206;/*** Status code (300) indicating that the requested resource corresponds to* any one of a set of representations, each with its own specific location.*/public static final int SC_MULTIPLE_CHOICES  300;/*** Status code (301) indicating that the resource has permanently moved to a* new location, and that future references should use a new URI with their* requests.*/public static final int SC_MOVED_PERMANENTLY  301;/*** Status code (302) indicating that the resource has temporarily moved to* another location, but that future references should still use the* original URI to access the resource. This definition is being retained* for backwards compatibility. SC_FOUND is now the preferred definition.*/public static final int SC_MOVED_TEMPORARILY  302;/*** Status code (302) indicating that the resource reside temporarily under a* different URI. Since the redirection might be altered on occasion, the* client should continue to use the Request-URI for future* requests.(HTTP/1.1) To represent the status code (302), it is recommended* to use this variable.*/public static final int SC_FOUND  302;/*** Status code (303) indicating that the response to the request can be* found under a different URI.*/public static final int SC_SEE_OTHER  303;/*** Status code (304) indicating that a conditional GET operation found that* the resource was available and not modified.*/public static final int SC_NOT_MODIFIED  304;/*** Status code (305) indicating that the requested resource emMUST/em be* accessed through the proxy given by the codeemLocation/em/code* field.*/public static final int SC_USE_PROXY  305;/*** Status code (307) indicating that the requested resource resides* temporarily under a different URI. The temporary URI emSHOULD/em be* given by the codeemLocation/em/code field in the response.*/public static final int SC_TEMPORARY_REDIRECT  307;/*** Status code (400) indicating the request sent by the client was* syntactically incorrect.*/public static final int SC_BAD_REQUEST  400;/*** Status code (401) indicating that the request requires HTTP* authentication.*/public static final int SC_UNAUTHORIZED  401;/*** Status code (402) reserved for future use.*/public static final int SC_PAYMENT_REQUIRED  402;/*** Status code (403) indicating the server understood the request but* refused to fulfill it.*/public static final int SC_FORBIDDEN  403;/*** Status code (404) indicating that the requested resource is not* available.*/public static final int SC_NOT_FOUND  404;/*** Status code (405) indicating that the method specified in the* codeemRequest-Line/em/code is not allowed for the resource* identified by the codeemRequest-URI/em/code.*/public static final int SC_METHOD_NOT_ALLOWED  405;/*** Status code (406) indicating that the resource identified by the request* is only capable of generating response entities which have content* characteristics not acceptable according to the accept headers sent in* the request.*/public static final int SC_NOT_ACCEPTABLE  406;/*** Status code (407) indicating that the client emMUST/em first* authenticate itself with the proxy.*/public static final int SC_PROXY_AUTHENTICATION_REQUIRED  407;/*** Status code (408) indicating that the client did not produce a request* within the time that the server was prepared to wait.*/public static final int SC_REQUEST_TIMEOUT  408;/*** Status code (409) indicating that the request could not be completed due* to a conflict with the current state of the resource.*/public static final int SC_CONFLICT  409;/*** Status code (410) indicating that the resource is no longer available at* the server and no forwarding address is known. This condition* emSHOULD/em be considered permanent.*/public static final int SC_GONE  410;/*** Status code (411) indicating that the request cannot be handled without a* defined codeemContent-Length/em/code.*/public static final int SC_LENGTH_REQUIRED  411;/*** Status code (412) indicating that the precondition given in one or more* of the request-header fields evaluated to false when it was tested on the* server.*/public static final int SC_PRECONDITION_FAILED  412;/*** Status code (413) indicating that the server is refusing to process the* request because the request entity is larger than the server is willing* or able to process.*/public static final int SC_REQUEST_ENTITY_TOO_LARGE  413;/*** Status code (414) indicating that the server is refusing to service the* request because the codeemRequest-URI/em/code is longer than the* server is willing to interpret.*/public static final int SC_REQUEST_URI_TOO_LONG  414;/*** Status code (415) indicating that the server is refusing to service the* request because the entity of the request is in a format not supported by* the requested resource for the requested method.*/public static final int SC_UNSUPPORTED_MEDIA_TYPE  415;/*** Status code (416) indicating that the server cannot serve the requested* byte range.*/public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE  416;/*** Status code (417) indicating that the server could not meet the* expectation given in the Expect request header.*/public static final int SC_EXPECTATION_FAILED  417;/*** Status code (500) indicating an error inside the HTTP server which* prevented it from fulfilling the request.*/public static final int SC_INTERNAL_SERVER_ERROR  500;/*** Status code (501) indicating the HTTP server does not support the* functionality needed to fulfill the request.*/public static final int SC_NOT_IMPLEMENTED  501;/*** Status code (502) indicating that the HTTP server received an invalid* response from a server it consulted when acting as a proxy or gateway.*/public static final int SC_BAD_GATEWAY  502;/*** Status code (503) indicating that the HTTP server is temporarily* overloaded, and unable to handle the request.*/public static final int SC_SERVICE_UNAVAILABLE  503;/*** Status code (504) indicating that the server did not receive a timely* response from the upstream server while acting as a gateway or proxy.*/public static final int SC_GATEWAY_TIMEOUT  504;/*** Status code (505) indicating that the server does not support or refuses* to support the HTTP protocol version that was used in the request* message.*/public static final int SC_HTTP_VERSION_NOT_SUPPORTED  505;
}Servlet生命周期 客户端请求该 Servlet 2. 加载 Servlet 类到内存 3. 实例化并调用init()方法初始化该 Servlet 4. service()根据请求方法不同调用doGet() 或者 doPost()此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。 5. 加载和实例化 Servlet。这项操作一般是动态执行的。然而Server 通常会提供一个管理的选项用于在 Server 启动时强制装载和初始化特定的 Servlet。  
Server 创建一个 Servlet的实例 
第一个客户端的请求到达 Server 
Server 调用 Servlet 的 init() 方法可配置为 Server 创建 Servlet 实例时调用在 web.xml 中 标签下配置 标签配置的值为整型值越小 Servlet 的启动优先级越高 
一个客户端的请求到达 Server 
Server 创建一个请求对象处理客户端请求 
Server 创建一个响应对象响应客户端请求 
Server 激活 Servlet 的 service() 方法传递请求和响应对象作为参数 
service() 方法获得关于请求对象的信息处理请求访问其他资源获得需要的信息 
service() 方法使用响应对象的方法将响应传回Server最终到达客户端。service()方法可能激活其它方法以处理请求如 doGet() 或 doPost() 或程序员自己开发的新的方法。 
对于更多的客户端请求Server 创建新的请求和响应对象仍然激活此 Servlet 的 service() 方法将这两个对象作为参数传递给它。如此重复以上的循环但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象)当 Server 不再需要 Servlet 时一般当 Server 关闭时Server 调用 Servlet 的 destroy() 方法。