Servlet是一套规范,表现为一套接口,留给开发人员去实现,Servlet接口定义如下(附加servlet-api source来查看源码)

其中init方法被Servlet容器调用,servlet容器就是比如说Tomcat Server中的Service中的Connector和Container中的Container。

 public interface Servlet {

     public void init(ServletConfig config) throws ServletException;

     public ServletConfig getServletConfig();

     public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException; public String getServletInfo(); public void destroy();
}

其中还有一个很重要的一个接口ServletConfig, 实现该接口必须实现如下方法: 这些方法是有关获取Servlet参数和ServletContext的。Servlet参数如何传递呢, 可以在web.xml中通过init-param传递参数,这个参数就是通过ServletConfig来保存的,ServletContext代表应用本身,整个应用都可以访问到。ServletConfig中保存的参数是Servlet级别的,ServletContext则是应用级的。

比如使用Spring的时候,一般会设置applicationContext.xml的路径,通常就是在context-param里设置contextConfigLocation。而Spring MVC中设置的参数则是在init-param中,这是Servlet级别的,存在ServletConfig中。

 public interface ServletConfig {

     public String getServletName();

     public ServletContext getServletContext();

     public String getInitParameter(String name);

     public Enumeration getInitParameterNames();

 }

GenericServlet是Servlet的默认实现,该类还实现了ServletConfig方法。它帮我们做了一些事儿,比如我们可以直接getServletContext。而不用getServletConfig().getServletContext();因为该方法内部帮我们做了这个操作。另外还帮我们做了一个无参init方法,无参init被实现的有参init方法调用,有参init方法中实现如下,这可以帮我们不关注config赋值,让子类重写init变得纯粹

,只处理我们自己的业务逻辑。如果重写了有参init方法,要记得调用super.init(config), 这样为config赋值。其实也没有必要重写这个了~

  public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}

HttpServlet是和协议相关的实现,它继承了GenericServlet,实现中丰富了service方法,将ServletRequest和ServletResponse转换为HttpServletRequest和HttpServletResponse,并将不同的请求类型路由到不同的处理方法中。因为后者接口继承了前者。

HttpServletRequest extends ServletRequest

public class HttpServletRequestWrapper extends ServletRequestWrapper implements HttpServletRequest

Servlet , GenericServlet和HttpServlet的更多相关文章

  1. servlet、genericservlet、httpservlet之间的区别

    转自:http://blog.csdn.net/rat9912345/article/details/5161789 当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法 ...

  2. servlet实现的三种方式对比(servlet 和GenericServlet和HttpServlet)

    第一种: 实现Servlet 接口 第二种: 继承GenericServlet 第三种 继承HttpServlet (开发中使用) 通过查看api文档发现他们三个(servlet 和GenericSe ...

  3. Servlet,GenericServlet和HttpServlet的继承关系

    HttpServlet是GenericServlet的子类. GenericServlet是个抽象类,必须给出子类才能实例化.它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一 ...

  4. servlet、genericservlet、httpservlet之间的区别(转)

    当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法就是扩展javax.servlet.genericservlet或javax.servlet.http.httpser ...

  5. Servlet的 GenericServlet 和 HttpServlet

    一.GenericServlet? servlet 是一个接口 下面有两个抽象类 GenericServlet 和 HttpServlet 需要被 继承并重写其中的方法. package javawe ...

  6. Javaweb学习笔记——(九)——————Servlet的进入,及ServletConfig、GenericServlet、HttpServlet、ServletContext、获取类路径资源

    Servlet1.什么是Servlet? *Servlet是Javaweb三大组件之一(Servlet,Filter,Listener) *Servlet是用来处理客户端请求的动态资源 *Servle ...

  7. Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext

    一.GenericServlet 1.所有的成员方法: 1.在javaWeb项目中: 2.web.xml <?xml version="1.0" encoding=" ...

  8. 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>

    1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...

  9. Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)

    本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理. HttpServlet实现过程:1.是一个Servlet,继承自GenericS ...

随机推荐

  1. TCP/IP协议总结

    TCP/IP网络协议栈分为四层, 从下至上依次是: 链路层 其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输 ...

  2. 剑指offer 6:链表(从头到尾打印链表)

    链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...

  3. 浅谈C/C++回调函数(Callback)& 函数指针

    摘要:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是 ...

  4. nuxtjs如何部署cdn及区分发布环境

    1.部署cdn nuxt  build 后的前端资源都会存放在.nuxt/dist/ 文件夹下面 img 目录存放的是使用到的图片资源,无论是开发中存放在 assets 文件夹里的,还是static里 ...

  5. 转载:深度学习在NLP中的应用

    之前研究的CRF算法,在中文分词,词性标注,语义分析中应用非常广泛.但是分词技术只是NLP的一个基础部分,在人机对话,机器翻译中,深度学习将大显身手.这篇文章,将展示深度学习的强大之处,区别于之前用符 ...

  6. 用luks方式对磁盘进行加密以及加密磁盘的自动挂载

    1.关于luks加密 LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的 Linux发行版本,还支持多用户/口令.因为它的加密密钥独 ...

  7. gunicorn 参数

    gunicorn -w 4 -b 0.0.0.0:8080 yourpyfilename:app --log-level DEBUG --timeout 60gunicorn的命令对应参数含义如下: ...

  8. 利用ApplicationListener和ContextRefreshedEvent加载自己的beanPool

    基本原理: 1.Spring的ApplicationListener和ContextRefreshedEvent一般都是成对出现的. 2.在IOC的容器的启动过程中,当所有的bean都已经处理完成之后 ...

  9. spark中的多目录输出及压缩

    最近接到一个需求,需要对spark的结果分目录输出,百度之后找到了解决方案,大多都是spark 按照key分目录输出, 但是在文件当中,会把key也输出出来,在这里以key作为目录是想建hive表时把 ...

  10. Android集成C程序访问驱动设备节点

    1.前言 Android系统中,应用程序一般是使用Java语言进行开发的,但是通过C语言也可以进行Android中的可执行程序开发,接下来,将简单介绍在Android系统中如何通过C程序来访问内核中s ...