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. Pycharm新建模板默认添加作者时间等信息

    在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2. ...

  2. java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    ♦ 问题所在:项目lib包里少一个jar包 ♦ 解决办法: commons-lang3-3.1.jar 导入到项目就ok

  3. 【easy】100. Same Tree

    判断两棵二叉树是否相等 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...

  4. 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT

    最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...

  5. STM32F0使用LL库实现MS5536C通讯

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.在本文中我们说明一下,使用LL库实现MS5 ...

  6. SSM(SpringMVC Spring Mybatis)框架整合搭建

    1.新建一个web工程. 2.首先看一下整体的框架结构: 3.将ssm框架搭建所需要的jar包复制到lib目录下 3.需要配置各个配置文件. 1)配置web.xml文件: <?xml versi ...

  7. kubenetes 环境的塔建

    最近听我朋友说他们公司准备上云,全线把服务迁到 k8s 上面,一下感觉,我们就 lower 了不少,之前服务器一直跑的就是 docker ,想想弄到 k8s 应该还是没有啥,于是我们也开始改造了 参考 ...

  8. Linux系统挂载Windows系统下的共享文件

    声明:本文是小编借鉴大神们的经验,仅供学习使用. 第一步:在Windows系统上选择要共享的文件夹,右击“属性”-“共享”-“高级共享”-勾选“共享此文件”-设置共享名-“权限”-“添加”-“高级”- ...

  9. Spark之join、leftOuterJoin、rightOuterJoin及fullOuterJoin

    Spark的join与mysql的join类似,mysql的join是将表与表之间连接查询,spark中join是将RDD数据集进行连接,Spark主要有join.leftOuterJoin.righ ...

  10. 原生js实现双向数据绑定

    一.两个model之间的双向绑定 var o = { a: 0 } o.b = o.a + 1; console.log(o.a); // "0" console.log(o.b) ...