Servlet详解(二)

上一章中,对Servlet的基本概念作出了解释

一、Servlet的默认方法

   1.Servlet是一个接口。

   2.init():带参初始化方法,参数为ServletConfig类,不是构造器,但在实例化后,直接调用。

   3.destory():销毁Servlet对象,无参,一般用于存放释放资源的内容,在server被中断前自行调用。

   4.getServletConfig():获得Servlet的配置方法

   5.getServletInfo():用于获得Servlet的作者,版本,版权等信息。

二、ServletConfig接口:

public interface ServletConfig {
    String getServletName();      //获得Servlet类名

    ServletContext getServletContext();   //获得Servlet上下文,org.apache.catalina.core.ApplicationContextFacade@6ee2ee7a

    String getInitParameter(String var1);  //获得通过获得name来获取具体参数

    Enumeration<String> getInitParameterNames();   //去粗配置文件中的key值(name)
}

三、HttpServlet

   1.HttpServlet继承自GenericServlet(类服务),而GenericServlet接入了Servlet接口,ServletConfig接口,Serializable接口,前两个接口已经说过,Serializable是可序列化接口,允许将接入该接口的类使用Object流序列化对象。

   2.GenericServlet类源码分析

    public String getInitParameter(String name) {       
        return this.getServletConfig().getInitParameter(name);
    }

    public Enumeration<String> getInitParameterNames() {
        return this.getServletConfig().getInitParameterNames();
    }

    public ServletConfig getServletConfig() {
        return this.config;
    }

    public ServletContext getServletContext() {
        return this.getServletConfig().getServletContext();
    }
    //上面所有方法都仅仅完成了返回当前参数的作用,不过ParementName和Paramenter方法都是借助Config来完成
    public String getServletInfo() {
        return "";
    }
    //关于作者,版本,版权等信息,需要加入时,则重写该方法
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }
    //继承自Servlet的初始化方法,也是自动调用的方法,仅仅完成config的配置,不建议继承修改,如需修改建议重写下方的无参方法
    public void init() throws ServletException {
    }

    public void log(String msg) {
        this.getServletContext().log(this.getServletName() + ": " + msg);
    }
    //返回日志信息
    public void log(String message, Throwable t) {
        this.getServletContext().log(this.getServletName() + ": " + message, t);
    }
    //抽象Service方法
    public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    //获得当前Servlet的名字
    public String getServletName() {
        return this.config.getServletName();
    }
}

  3.HttpServlet常用方法:

      1. init和destory等方法的重写,init的无参方法并非是直接调用,而是有参方法内部再次调用这个方法,该方法用于初始化。而destory方法则主要用于资源的释放。

      2.service:html请求发送的最直接的地方,在HttpServlet中,service方法会自行判断你的请求类型,并将请求中的参数传入doget或则dopost中执行。

      3.doget:下次详解,目前的差别在于url地址会把你html中的登录等信息暴露出来,不安全

      4.dopost:会自动隐藏你在html中的信息。

      5.关于一些ServletConfig等内容的获得,在GenericServlet已经做出了实现,HttpServlet仅仅是继承了这些方法,所以也不多加概述。

原文地址:https://www.cnblogs.com/qqwhsj/p/10846600.html