web容器启动
在 WEB 容器启动后,会读取 Servlet 设置信息,将 Servlet 类加载并实例化,并为每个 Servlet 设置信息产生一个
ServletConfig 对象,而后调用 Servlet 接口的 init() 方法,并将产生的 ServletConfig 对象当作参数传入。
Servlet接口
- init(),在第一次请求servlet时会被调用,且整个生命周期只会被调用一次。一般来说,初始化时servlet容器会通过init()方法将一个ServletConfig对象传递给相应的内部成员变量,以供后续getXXX调用。
- service(),每当有请求到来,就调用这个方法。
- HttpServlet中继承了抽象类GenericServlet,而GenericServlet实现了接口Servlet, ServletConfig,所以HttpServlet中需要继承并重写servlet方法,里面封装了GET、POST、PUT等多个HTTP方法,所以当编写自己的httpservlet时,只需要重写相应的http方法。Servlet容器会通过调用service()方法,从而调用到自己重写的http方法。
- destory(),关闭Servlet容器或者卸载应用程序时调用,一般在这个方法中编写清除代码。
- getServletConfig(),返回一个ServletConfig对象
- getServletInfo(),返回一个字符串对象,可以自己定义。
ServletConfig
- getServletContext(),ServletContext是一个接口,表示Servlet应用程序,每个Web应用程序只有一个上下文,在将一个应用程序不熟到多个容器的分布式环境中,每台Java虚拟机只有一个ServletContext对象。
- getInitParameter(),可以取得@WebServlet或者 部署描述符 中的配置信息。(@WebServlet还需要配合@WebInitParam来使用)
- getInitParameterNames(); 取得所有配置信息的名称
- getServletName(),取得servlet的名称。
GenericServlet
- 同时implements Servlet, ServletConfig
- 主要作用:实现了ServletConfig中的所有方法
- 实现了Servlet中除service外的所有方法。
- 最重要的是,实现了Servlet中的init方法中要求的“将ServletConfig对象赋予类中的成员变量,以便getXXX调用,但是又没有占据原本的无参init()方法,所以后面如果有需要,还是可以自己重现init()方法来实现自己的初始化,这个无参方法 会在
public void init(ServletConfig config)
中被调用。
HttpServlet
- 继承自GenericServlet,实现了GenericServlet唯一的抽象方法service();
- 所有继承HttpServlet的类,已经可以分别调用
http.getServletConfig()和http.getServletContext();
,一般来说我们也不需要重写这两个方法。
部署描述符web.xml
- 放在WEB-INF目录下
- 优点:如果需要修改配置值,如Servlet路径,则不需要重现编译Servlet类。
- 优点2:可以将初始参数传给一个Servlet,不需要重新编译Servlet类,就可以对它们进行编辑。
- 如果同时在@WebServlet和部署描述符上定义值,则部署描述符的优先级更高。
网友评论