Generic-汉语意思:类的adj

GenericServlet是一个抽象类,它的源码很容易看懂,继承Servlet接口和ServletConfig接口

所有它里面有父接口里面的方法,所以它就是在Servlet的基础上把一些功能给封装起来了(省的我们手写了)。把ServletConfig给保存下来,以便使用它可以获得其他值。

它里面有这些方法(部分)

void  destroy()

String  getInitParameter(string name)

Enumeration  getInitParameterNames()

ServletConfig  getServletConfig()

ServletContext  getServletContext()

...

 

模拟GenericServlet抽象类

 package one.servlet;

 import java.io.IOException;

 import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; //模拟GenericServlet类
public class BServlet implements Servlet{
private ServletConfig config;//一个成员 @Override
public void destroy() {
System.out.println("啊,我要死了!");
}
//这个方法一定会在init()方法之后被调用!
//init()被调用后,本类的成员this.config已经有值了!
@Override
public ServletConfig getServletConfig() {
return this.config;
}
//没有用的东西
@Override
public String getServletInfo() {
return "用字符串简单描述Servlet";
}
/*
* 由Tomcat来调用,并且调用一次
* 它是这些方法中第一个被调用的,它会在构造器之后马上被调用(先创建对象,再调用方法)!
* */
@Override
public void init(ServletConfig config) throws ServletException {
//把Tomcat传递的ServletConfig赋值给本类的一个成员,其实就是把它保存起来,方便在其他地方用
this.config=config;
} @Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("每次处理请求都会被调用!");
} public ServletContext getServletContext(){
return config.getServletContext();
} public String getInitParameter(String name){
return config.getInitParameter(name);
}
//等等方法都可以模拟GenericServlet里的方法
}

其他Servlet可以继承上述的模拟GenericServlet(也就是继承BServlet),但是如果重写init()方法,就会覆盖父类中的this.config=config;然后该类中的部分其他方法将不能使用。

解决方案:

父类BServlet

 @Override
public void init(ServletConfig config) throws ServletException {
//把Tomcat传递的ServletConfig赋值给本类的一个成员,其实就是把它保存起来,方便在其他地方用
this.config=config;
init();
}
//本类定义的方法,不是Servlet接口中的方法。
public void init(){ }

子类CServlet

 package one.servlet;

 public class CServlet extends BServlet{

     //服务器不会调用这个方法,但是会调用父类有参的init方法,然后再去掉用父类的init无参的方法
@Override
public void init() {
System.out.println("子类的CServlet重载之后的方法");
}
}

从而在请求CServlet的时候,就会执行重写过后init方法中的代码。

也就是子类继承了父类有参的init()方法,服务器调用有参的之后,然后再去调用init();这个调用

总结:解决了数据库所给的config的保存问题,以及子类重写init()方法后的问题。这就是GenericServlet的原理。

使用GenericServlet

DServlet.java

 package one.servlet;

 import java.io.IOException;

 import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class DServlet extends GenericServlet {
//要想在出生时笑一笑,覆盖无参的init() @Override
public void init() throws ServletException {
System.out.println("哈哈,我出生了!");
} @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("hello world!");
} //死的時候留遺言
@Override
public void destroy() {
System.out.println("我走了");
}
}

web.xml配置

//部分配置
<servlet>
<servlet-name>xx</servlet-name>
<servlet-class>one.servlet.DServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xx</servlet-name>
<url-pattern>/DServlet</url-pattern>
</servlet-mapping>  

请求DServlet--http://localhost:8080/XJS_Servlet1/DServlet

哈哈,我出生了!
hello world!

  

GenericServlet的更多相关文章

  1. Servlet 之 GenericServlet

    我们都知道javaweb中servlet的三大组件 servlet filter listener 实现动态资源的  是可以继承  Servlet接口,或者集成GenericServlet .Http ...

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

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

  3. Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)

    本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...

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

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

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

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

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

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

  7. GenericServlet,HttpServletRequest和HttpServletResponse

    最基本的是通过实现Servlet接口来编写Servlet类,这需要实现Servlet接口中定义的5个方法. 为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类Generic ...

  8. Servlet课程0424(二) 通过继承GenericServlet来开发Servlet

    //这是第二种开发servlet的方法(继承GernericServlet) package com.tsinghua; import javax.servlet.GenericServlet; im ...

  9. servlet三种实现方式之二继承GenericServlet开发

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第二种示例代码如下(已去掉包名): //这是第二 ...

  10. Servlet(二)GenericServlet

    以GenericServlet创建Servlet 1.在FirstServlet同文件夹下建立GServlet.java package com.hunhun; import javax.servle ...

随机推荐

  1. ubuntu 16.04 安装 kubelet、kubeadm 和 kubectl

    解决了***之后,就开始K8S安装的正式旅程,本次记录  kubelet.kubeadm 和 kubectl 的安装: apt-get update && apt-get instal ...

  2. Elasticsearch JAVA api轻松搞定groupBy聚合

    本文给出如何使用Elasticsearch的Java API做类似SQL的group by聚合. 为了简单起见,只给出一级groupby即group by field1(而不涉及到多级,例如group ...

  3. 入坑C++之vs 新建C++项目

    首先呢,下载一个visual  studio 2017的编辑器工具,可能有最新的2019年的版本,根据自己喜欢选择哪个版本就好了 visual studio IDE下载地址:https://visua ...

  4. js检测数据类型四种办法

    面试题中经常会考js数据类型检测,今天我来分享一下js中常用的四种方法判断数据类型,欢迎指点更正. 废话不多说,直入正题. 1.typeof console.log(typeof "&quo ...

  5. Python 八皇后问题

    八皇后问题描述:在一个8✖️8的棋盘上,任意摆放8个棋子,要求任意两个棋子不能在同一行,同一列,同一斜线上,问有多少种解法. 规则分析: 任意两个棋子不能在同一行比较好办,设置一个队列,队列里的每个元 ...

  6. C/C++的20个位运算技巧

    一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读&l ...

  7. 虚拟机Ubuntu16.04无法进入图形界面 The system is running in low-graphics mode

    安装的虚拟机Ubuntu16.04 64位本可以正常使用,在安装了许多软件包(caffe)后不知哪里配置出现问题,出现The system is running in low-graphics mod ...

  8. 金蝶K3 WISE BOM多级展开_销售成本表

    /****** Object: StoredProcedure [dbo].[pro_bobang_SaleCost] Script Date: 07/29/2015 16:13:43 ******/ ...

  9. css固定div头部 滚动条滚动内容

    页面布局,固定头部,滚动下方内容 实际场景 在制作页面的时候,经常会遇到要这样的情况:整个页面,整体分三大模块,头部固定,内容区域,左边固定,右边可以滚动. 最终想要的效果 案例源码 <!DOC ...

  10. mysql 正则表达式问号

    MySQL 中,用正则表达式匹配?,需要使用两个转义字符   \\? 因使用一个被坑了很久.