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

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开发者使用。

Request、Servlet及其子接口的更多相关文章

  1. SERVLET类常用接口及方法

    SERVLET类常用接口及方法 2011-09-09 16:14:43    [size=xx-small]SERVLET类常用接口及方法2007年04月05日 星期四 04:46 P.M.基本类和接 ...

  2. javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)

    Servlet总结01——servlet的主要接口.类 (一)servlet类 Servlet主要类.接口的结构如下图所示: 要编写一个Servlet需要实现javax.servlet.Servlet ...

  3. Servlet(6)—HttpServletRequest接口和HttpServletResponse接口

    HttpServletRequest接口和HttpServletResponse接口是继承ServletRequest和ServletResponse接口,是他们的子接口,但是我们在程序中进程看到Se ...

  4. JavaWeb学习——Servlet相关的接口和类

    JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...

  5. java集合_collection子接口 list的特有方法,ArrayList类体现

    /* Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引. |--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢.线程不同步. ...

  6. Collection子接口(List/Set/Queue/SortedSet)

    Collection基本的子接口: List:能够存放反复内容 Set:不能存放反复内容,全部反复的内容靠hashCode()和equals()两个方法区分 Queue:队列接口 SortedSet: ...

  7. 基于三层交换机和基于路由子接口的vlan间路由

    1:通过三层交换机实现vlan间的通信:为三层交换机创建vlan,设置交换机的两个SVI,并配置IP地址. (在二层交换机上只能配置一个SVI端口,用来实现交换机交换机远程管理,在三层交换机上可以配置 ...

  8. 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)

    16.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同 ...

  9. 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口

    [源码下载] 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口 作者 ...

随机推荐

  1. 【SIGGRAPH 2015】【巫师3 狂猎 The Witcher 3: Wild Hunt 】顶级的开放世界游戏的实现技术。

    [SIGGRAPH 2015][巫师3 狂猎 The Witcher 3: Wild Hunt ]顶级的开放世界游戏的实现技术 作者:西川善司 日文链接  http://www.4gamer.net/ ...

  2. DNS:www.flickr.com

    203.84.197.9 203.84.197.25 203.84.197.26 203.84.197.27

  3. 关于APP接口设计

    最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所 ...

  4. Kafka 0.10.0

    2.1 Producer API We encourage all new development to use the new Java producer. This client is produ ...

  5. [转]百度MP3音乐API接口及应用

    当你在百度去搜索一首歌时,你会发现有种更简单的方法,嘿嘿,告诉你个秘密,百度有个不公开的API http://box.zhangmen.baidu.com/x?op=12&count=1&am ...

  6. MyBatis-Generator 最佳实践

    为数据库中的表A生成A.java, A.java, A.xml 由于该插件生成的A.java, A.xml会带有example, 不希望生成example 数据库中的字段写有注释, 希望注释能自动生成 ...

  7. C#5.0 .net 4.5示例

    //filename: MathOperations.cs using System; using System.Collections.Generic; using System.Linq; usi ...

  8. httpd.conf

    修改配置文件-时会弹出一个文本式的文件 1.搜索:#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的# 2.全部替换AllowOverrid ...

  9. css中的盒子模型

    css中的盒子模型 css中的盒子模型,有两种,一种是“标准 W3C 盒子模型”,另外一种是IE盒子模型.   1.w3c盒子模型 从图中可以看出:w3c盒子模型的范围包括了:margin,borde ...

  10. Nginx反向代理的模拟

    CentOS起两台tomcat,端口分别是8080和8081! 1. nginx配置文件:nginx.conf upstream tomcats{ server 192.168.198.128:808 ...