最近看tomcat源码,这类接口多的有点眩,整理出来看一下。

javax.servlet.ServletRequset接口,和org.apache.catalina.Request接口,有什么联系?

其实就是对Request不同层面上的定义。


一、首先看下javax.servlet.Servlet接口


package javax.servlet; import java.io.IOException; public abstract interface Servlet {     public abstract void init(ServletConfig paramServletConfig)             throws ServletException;     public abstract ServletConfig getServletConfig();     public abstract void service(ServletRequest paramServletRequest,             ServletResponse paramServletResponse) throws ServletException,             IOException;     public abstract String getServletInfo();     public abstract void destroy(); }



这些方法应该非常熟悉了。


二、javax.servlet.http.HttpServlet抽象类


package javax.servlet.http;  public abstract class HttpServlet extends GenericServlet        implements Serializable {     ... }



丰富了servlet接口,对应http协议,添加了doGet, doPut, doPost等方法。


三、javax.servlet.ServletRequest接口


package javax.servlet;  public abstract interface ServletRequest {     public abstract Object getAttribute(String paramString);      public abstract Enumeration getAttributeNames();      public abstract String getCharacterEncoding();      public abstract void setCharacterEncoding(String paramString)             throws UnsupportedEncodingException;      public abstract int getContentLength();      public abstract String getContentType();      public abstract ServletInputStream getInputStream() throws IOException;      public abstract String getParameter(String paramString);      public abstract Enumeration getParameterNames();      public abstract String[] getParameterValues(String paramString);      public abstract Map getParameterMap();      public abstract String getProtocol();      public abstract String getScheme();      public abstract String getServerName();      public abstract int getServerPort();      public abstract BufferedReader getReader() throws IOException;      public abstract String getRemoteAddr();      public abstract String getRemoteHost();      public abstract void setAttribute(String paramString, Object paramObject);      public abstract void removeAttribute(String paramString);      public abstract Locale getLocale();      public abstract Enumeration getLocales();      public abstract boolean isSecure();      public abstract RequestDispatcher getRequestDispatcher(String paramString);      /** @deprecated */     public abstract String getRealPath(String paramString); }




四、javax.servlet.http.HttpServletRequest


public abstract interface HttpServletRequest extends ServletRequest {...}



添加了http协议部分,比如session,cookie等。


五、org.apache.catalina.Requst(tomcat4,后面的版本有变化)


package org.apache.catalina;  public interface Request {      public String getAuthorization();      public void setAuthorization(String authorization);      public Connector getConnector();      public void setConnector(Connector connector);      public Context getContext();      public void setContext(Context context);      public String getInfo();      public ServletRequest getRequest();      public Response getResponse();      public void setResponse(Response response);      public Socket getSocket();      public void setSocket(Socket socket);      public InputStream getStream();      public void setStream(InputStream stream);      public Wrapper getWrapper();      public void setWrapper(Wrapper wrapper);      public ServletInputStream createInputStream() throws IOException;      public void finishRequest() throws IOException;      public Object getNote(String name);      public Iterator getNoteNames();      public void recycle();      public void removeNote(String name);      public void setContentLength(int length);      public void setContentType(String type);      public void setNote(String name, Object value);      public void setProtocol(String protocol);      public void setRemoteAddr(String remote);      public void setScheme(String scheme);      public void setSecure(boolean secure);      public void setServerName(String name);      public void setServerPort(int port); }




六、org.apache.catalina.HttpRequest


public interface HttpRequest extends Request {...}



增加了对http协议头处理部分,比如url,参数,cookies等。


七、org.apache.catalina.connector.HttpRequestBase

虽然已经弃用了,但可以作为一个参考,实现了jdk和catalina定义的Request


public class HttpRequestBase     extends RequestBase     implements HttpRequest, HttpServletRequest {...}



小结

tomcat中,对于jdk中的servlet和ServletRequest肯定要实现的。而tomcat作为容器应用,会有很多自身的需求,所以自己定义了一套接口,跟jdk中不同层面。并且提供两套接口的类,让web开发者使用。