Servlet相关接口、类的方法整理

目录

    • **ServletConfig接口**
    • **ServletContext接口**
    • **Servlet接口**
    • **GenericServlet类**
    • **HTTPServlet类**
    • **ServletRequest接口**
    • **HttpServletRequest接口**
    • **ServeletResponse**
    • **HttpServletResponse接口**
    • **RequestDispatcher接口**
    • **Filter接口**
    • **FilterChain接口**
    • **FilterConfig接口**
    • 与会话事件相关
    • 官方文档

ServletConfig接口

servlet 容器使用的 servlet 配置对象,该对象在初始化期间从web.xml文件获取配置信息传递给 servlet。

public interface ServletCofig{
	public String getInitParameter(String name) 
     /*返回包含指定初始化参数的值的String或null*/     
 	public ServletContext getServletContext() 
    /*返回一个ServletContext对象,调用者用于与其servlet容器交互*/  
	public String getServletName() 
	/*返回servlet实例名称*/
	public Enumeration getInitParameterNames() 
    /*返回包含 servlet 初始化参数名称的 String 对象的 Enumeration*/
 }

ServletContext接口

定义一组方法,servlet 使用这些方法与其 servlet 容器进行通信,例如,获取文件的 MIME 类型、分发请求或写入日志文件。

public interface ServletContext{
	public String getInitParameter(String name)
	/*返回指定参数名称的参数值*/
	public Enumeration getInitParameterNames()
	/*返回上下文的初始化参数的名称*/
	public void setAttribute(String name,Object object)
	/*将对象绑定到此 servlet 上下文中的给定属性名称。*/
	public Object getAttribute(String name)
	/*返回指定名称的属性*/
	public Enumeration getInitParameterNames()
	/*返回上下文的初始化参数的名称,作为String对象的枚举*/
	public void removeAttribute(String name)
	/*从servlet上下文中删除给定名称的属性*/
}

Servlet接口

Servlet接口定义了一些生命周期方法以及getServletConfig()和getServletInfo()。

public interface Servlet{
	public void init(ServletConfig config) throws ServletException
	/*servlet容器在实例化servlet之后调用此方法将servlet放入服务准备接受请求,可抛出异常*/
	public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException
	/*servlet容器调用以允许servley响应请求,可抛出妨碍servlet操作或输入/出的异常*/
	public void destory();
	/*servlet容器取出servlet,清除内存线程等,确保持久状态与该servlet的状态保持同步*/
	public ServletConfig getServletConfig();
	/*返回ServletConfig对象,对象包含此servlet的初始化和启动参数,传递给init()*/
	public String getServletInfo();
	/*返回纯文本的字符串,包含servlet的信息如作者版本版权*/
}

GenericServlet类

定义一般的、与协议无关的 servlet。实现 Servlet 和 ServletConfig 接口,所以servlet 可以直接扩展 GenericServlet重写抽象 service 方法即可。

public abstract class GenericServlet extends Object implements Servlet,ServletConfig,Serializable{  
   
 	public String getInitParameter(String name) 
    /*返回包含指定初始化参数的值的String或null*/    
 	public Enumeration getInitParameterNames() 
    /*返回包含 servlet 初始化参数名称的 String 对象的 Enumeration*/         
	public String getServletInfo() 
    /*返回纯文本的字符串,包含servlet的信息如作者版本版权*/
 	public String getServletName() 
     /*返回servlet实例名称*/    

	 public ServletConfig getServletConfig() 
    /*返回此 servlet 的 ServletConfig 对象*/    
	public ServletContext getServletContext() 
    /*返回一个ServletContext对象,调用者用于与其servlet容器交互*/  
 	public void init() 
 	/*重写不必调用 super.init(config) */         
 	public void init(ServletConfig config) 
 	/*servlet容器在实例化servlet之后调用此方法将servlet放入服务准备接受请求,可抛出异常;在重写方法时,调用 super.init(config)*/ 
 	abstract public  void service(ServletRequest req, ServletResponse res)  throws ServletException, java.io.IOException
	/*由 servlet 容器调用,以允许 servlet 响应某个请求。*/
 	 public void destroy() 
	 /*取出servlet*/  
	      
	public void log(String msg) 
     /*将前置有 servlet 名称的指定消息写入 servlet 日志文件*/     
 	public void log(String message, Throwable t) 
 	/*将前置有 servlet 名称的给定 Throwable 异常的解释性消息和堆栈跟踪写入 servlet 日志文件*/          
	
	public GenericServlet()
	/*不执行操作,servlet初始化由init方法完成*/
	//以及一些继承自Object的方法
}

HTTPServlet类

提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。service将HTTP请求分发给相应类型的do×××方法,所以HttpServlet 的子类至少必须重写以下一个方法:

  • doGet,如果 servlet 支持 HTTP GET 请求
  • doPost,用于 HTTP POST 请求
  • doPut,用于HTTP PUT 请求
  • doDelete,用于 HTTP DELETE 请求
  • init 和 destroy,用于管理 servlet的生命周期内保存的资源
  • getServletInfo,servlet 使用它提供有关其自身的信息
public abstract class HttpServlet extends GenericServlet implements Serializable{
	protected  void doDelete(HttpServletRequest req, HttpServletResponse resp)          
	protected  void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException          
	protected  void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
    protected  void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
    protected  void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	protected  void doPut(HttpServletRequest req, HttpServletResponse resp)throws ServletException, java.io.IOException
	protected  void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	protected  long getLastModified(HttpServletRequest req)
    protected  void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

   
	public HttpServlet()
	/*抽象类构造方法无操作*/
	//从GenericServlet继承来的方法
	/*从Object继承来的方法clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait*/
}

直接看官方文档
doget()由服务器通过service方法调用,子类重写后以支持servlet处理GET请求,也就支持了HTTP HEAD请求(返回响应中没有正文、只有请求头字段的GET请求)。
重写此方法时,读取请求数据、写入响应头、获取响应的编写者或输出流对象,最后,写入响应数据。最好包括内容类型和编码。使用 PrintWriter 对象返回响应时,在访问 PrintWriter 对象之前设置内容类型。
提交响应前,servlet 容器必须写入响应头,因为在 HTTP 中响应头必须在响应正文之前发送。
如有可能,应设置 Content-Length 头(使用 javax.servlet.ServletResponse#setContentLength 方法),以允许 servlet 容器使用持久连接向客户端返回响应,从而改进性能。如果响应缓冲区能够容纳整个响应,则自动设置内容长度。
使用 HTTP 1.1 存储块编码时(这意味着响应具有 Transfer-Encoding 头),不要设置 Content-Length 头。
GET 方法应该是安全的,也就是说,没有需要用户负责的任何副作用。例如,大多数形式查询没有副作用。如果某个客户端请求用于更改存储数据,则该请求应该使用某个其他 HTTP 方法。
GET 方法还应该是幂等的,这意味着可以安全地重复使用它。有时使某个方法是安全的也会使其成为幂等的。例如,重复查询既是安全的,又是幂等的,但在线购买某个产品或修改数据则既不是安全的又不是幂等的。
如果servlet无法处理对GET的请求或IO错误则报错。

getLastModified()返回上次修改HttpServletRequest 对象的时间,是从格标开始的毫秒数或-1。
支持 HTTP GET 请求并且可以快速确定其上次修改时间的 servlet 应该重写此方法。这使浏览器和代理缓存更有效地工作,减少服务器和网络资源上的负载。

doHead() 接收来自受保护 service 方法的 HTTP HEAD 请求并处理该请求。当客户端只想看到响应的头(比如 Content-Type 或 Content-Length)时,它可以发送一个 HEAD 请求。HTTP HEAD 方法计算响应中的输出字节数,以便准确设置 Content-Length 头。
如果重写此方法,可以避免计算响应正文而仅直接设置响应头,从而提高性能。确保编写的 doHead 方法是既安全又幂等的(也就是说,保护它自己不被一个 HTTP HEAD 请求多次调用)。

doPost()由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。 HTTP POST 方法允许客户端一次将不限长度的数据发送到 Web 服务器,这在发送诸如信用卡号之类的信息时很有用。
重写此方法时,读取请求数据、写入响应头、获取响应的编写者或输出流对象,最后,写入响应数据。最好包括内容类型和编码。使用 PrintWriter 对象返回响应时,在访问 PrintWriter 对象之前设置内容类型。
提交响应前,servlet 容器必须写入响应头,因为在 HTTP 中响应头必须在响应正文之前发送。
如有可能,应设置 Content-Length 头(使用 javax.servlet.ServletResponse#setContentLength 方法),以允许 servlet 容器使用持久连接向客户端返回响应,从而改进性能。如果响应缓冲区能够容纳整个响应,则自动设置内容长度。
使用 HTTP 1.1 存储块编码时(这意味着响应具有 Transfer-Encoding 头),不要设置 Content-Length 头。
此方法不需要是安全的或幂等的。通过 POST 请求的操作可能产生用户需要负责的副作用,例如,更新存储数据或在线购买商品。

doput()由服务器调用(通过 service 方法),以允许 servlet 处理 PUT 请求。 PUT 操作允许客户端将文件放在服务器上,类似于通过 FTP 发送文件。
在重写此方法时,随请求一起发送的所有内容头都要保持原样,这些内容头包括 Content-Length、Content-Type、Content-Transfer-Encoding、Content-Encoding、Content-Base、Content-Language、Content-Location、Content-MD5 和 Content-Range。如果某个方法无法处理内容头,则它必须发出一条错误消息 (HTTP 501 - Not Implemented) 并丢弃该请求。有关 HTTP 1.1 的更多信息参见 RFC 2616 。
此方法不需要是安全的或幂等的。doPut 执行的操作可能具有用户需要负责的副作用。使用此方法时,在临时存储器中保存受影响 URL 的副本可能会很有用。

doDelete()由服务器调用(通过 service 方法),以允许 servlet 处理 DELETE 请求。 DELETE 操作允许客户端从服务器中移除文档或 Web 页面。
此方法不需要是安全的或幂等的。通过 DELETE 请求的操作可能具有用户需要负责的副作用。使用此方法时,在临时存储器中保存受影响 URL 的副本可能会很有用。

doOptions()由服务器调用(通过 service 方法),以允许 servlet 处理 OPTIONS 请求。 OPTIONS 请求可确定服务器支持哪些 HTTP 方法,并返回相应的头。例如,如果 servlet 重写 doGet,则此方法返回以下头: Allow:GET, HEAD, TRACE, OPTIONS
无需重写此方法,除非 servlet 实现了 HTTP 1.1 实现的那些方法以外的新 HTTP 方法。

doTrace()由服务器调用(通过 service 方法),以允许 servlet 处理 TRACE 请求。 TRACE 将随 TRACE 请求一起发送的头返回给客户端,以便在调试中使用它们。无需重写此方法。

public void service()将客户端请求分发给受保护的 service 方法。无需重写此方法。
protected void service()接收来自 public service 方法的标准 HTTP 请求,并将它们分发给此类中定义的 doXXX 方法。此方法是 javax.servlet.Servlet#service 方法的特定于 HTTP 的版本。无需重写此方法。

//public
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);  
}
//protected
protected void service(HttpServletRequest req, HttpServletResponse resp)  
        throws ServletException, IOException  
{  
    String method = req.getMethod();  
    if(method.equals("GET"))  
    {  
        long lastModified = getLastModified(req);  
        if(lastModified == -1L)  
        {  
            doGet(req, resp);  
        }   
        ....  
        //rest of the code  
    }  
}

ServletRequest接口

定义将客户端请求信息提供给某个 servlet 的对象。servlet 容器创建 ServletRequest 对象,并将该对象作为参数传递给该 servlet 的 service 方法。
ServletRequest 对象提供包括参数名称、参数值、属性和输入流的数据。

public interface ServletRequest {
	public String getParameter(String name)
	/*用于通过名称获取参数的值*/
	public String[] getParameterValues(String name)
	/*返回一个包含给定参数名称的所有值的String数组。它主要用于获取多选列表框的值*/
	java.util.Enumeration getParameterNames()
	/*返回所有请求参数名称的枚举*/
	public int getContentLength()
	/*返回请求实体数据的大小,如果未知则返回-1*/
	public String getCharacterEncoding()
	/*返回此请求输入的字符集编码*/
	public String getContentType()
	/*返回请求实体数据的网络媒体类型,如果未知则返回null*/
	public ServletInputStream getInputStream() throws IOException
	/*返回用于读取请求正文中二进制数据的输入流*/
	public abstract String getServerName()
	/*返回接收请求的服务器的主机名*/
	public int getServerPort()
	/*返回接收到此请求的端口号*/
	public RequestDispatcher getRequestDispatcher(String path)
	/*返回一个 RequestDispatcher 对象,它充当位于给定路径上的资源的包装器。可以使用 RequestDispatcher 对象将请求转发给资源,或者在响应中包含资源。资源可以是动态的,也可以是静态的。*/
	//其他
	}

HttpServletRequest接口

public interface HttpServletRequest extends ServletRequest{
	String getAuthType() 
          
 	String getContextPath() 
          
 	Cookie[] getCookies() 
    /*返回此请求中包含的所有 Cookie 的数组或null*/     
 	long getDateHeader(String name) 
       
 	String getHeader(String name) 
          
 	Enumeration getHeaderNames() 
          
 	Enumeration getHeaders(String name) 
          
 	int getIntHeader(String name) 
         
 	String getMethod() 
         
 	String getPathInfo() 
         
 	String getPathTranslated() 
          
 	String getQueryString() 
         
 	String getRemoteUser() 
         
 	String getRequestedSessionId() 
          
 	String getRequestURI() 
          
 	StringBuffer getRequestURL() 
          
 	String getServletPath() 
          
 	HttpSession getSession() 
         
 	HttpSession getSession(boolean create) 
         
 	Principal getUserPrincipal() 
         
 	boolean isRequestedSessionIdFromCookie() 
         
 	boolean isRequestedSessionIdFromUrl() 
          
 	boolean isRequestedSessionIdFromURL() 
          
 	boolean isRequestedSessionIdValid() 
         
 	boolean isUserInRole(String role) 
          
    //以及继承来的方法      

}

ServeletResponse

定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。

public interface ServletResponse{
	public void setContentType(String type)
	/*设置将发送到客户端的响应的内容类型*/
	public java.io.PrintWriter getWriter() throws java.io.IOException
	/*返回可将字符文本发送到客户端的 PrintWriter 对象。PrintWriter 使用 #getCharacterEncoding 返回的字符编码。*/
}

HttpServletResponse接口

扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。
servlet 容器创建 HttpServletResponse 对象,并将该对象作为参数传递给 servlet 的 service 方法(doGet、doPost,等等)。

public interface HttpServletResponse extends ServletResponse{
	public void sendRedirect(String location) throws java.io.IOException
	/*使用指定重定向位置 URL 将临时重定向响应发送到客户端*/
}

RequestDispatcher接口

定义接收来自客户端的请求并将它们发送到服务器上的任何资源(比如 servlet、HTML 文件或 JSP 文件)的对象。servlet 容器可创建 RequestDispatcher 对象,该对象被用作包装位于特定路径上的服务器资源或通过特定名称给定的服务器资源的包装器。 

此接口用于包装 servlet,但 servlet 容器可创建包装任何类型资源的 RequestDispatcher 对象。

public interface RequestDispatcher{
	public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
	/*将请求从一个 servlet 转发到服务器上的另一个资源(servlet、JSP 文件或 HTML 文件)。此方法允许一个 servlet 对请求进行初步处理,并使另一个资源生成响应。 
通过 getRequestDispatcher() 获得的 RequestDispatcher,ServletRequest 对象使其路径元素和参数进行调整以匹配目标资源的路径。 
	在将响应提交到客户端之前(在刷新响应正文输出之前),应该调用 forward。如果已经提交了响应,则此方法抛出 IllegalStateException。在转发之前,自动清除响应缓冲区中未提交的输出。 
	request 和 response 参数必须是传入调用的 servlet service 方法的对象,或者是包装它们的 ServletRequestWrapper 或 ServletResponseWrapper 类的子类。
*/
	public void include(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
	/*包含响应中某个资源(servlet、JSP 页面和 HTML 文件)的内容。事实上,此方法支持编程式服务器端包含。 
	ServletResponse 对象使其路径元素和参数不根据调用者的路径元素和参数发生改变。包含的 servlet 无法更改响应状态代码或设置头;任何更改尝试都将被忽略。 
	request 和 response 参数必须是传入调用的 servlet service 方法的对象,或者是包装它们的 ServletRequestWrapper 或 ServletResponseWrapper 类的子类。
*/
}

Filter接口

过滤器是执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。

public interface Filter{
	public void init(FilterConfug config) throws ServletException
	/*将指示放入服务中的过滤器以实现之后的过滤工作*/
}
	public void doFilter(ServletRequest requst,ServletReponse reponse,FilterChain chain) 
throws java.io.IOException,SerletException
	/*允许Filter将请求响应传到链中的下一个实体*/
	public void destory()
	/*取出过滤器,同步*/

FilterChain接口

用来调用下一个资源

public interface FilterChain{
	public void doFilter(ServletRequest request, ServletResponse response) throws java.io.IOException, ServletException

}

FilterConfig接口

servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。

public interface FilterConfig{
	public String getFilterName()
	/*返回过滤器名称*/
	public ServletContext getServletContext()
	/*返回对调用者在其中执行操作的ServletContext的引用*/
	public String getInitParameter(String name)
	/*返回包含指定初始化参数的值的String或null*/
	public java.util.Enumeration<E> getInitParameterNames()
	/*以 String 对象的 Enumeration 的形式返回过滤器初始化参数的名称或空的 Enumeration。 */
}

与会话事件相关

官方文档

你可能感兴趣的:(#,Java,web基础)