从实习开始,就开始使用spring的框架进行开发,一直没琢磨过servlet,框架用的多了,底下的东西就越来越不了解了,今天简单总结一下servlet。先看下java本身提供的几个接口和类,下面是继承关系:
一、继承关系
二、servlet源码
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();
方法解释:
从servlet源码可以看出接口内一共有六个方法,接下来看一下没个方法的作用:
- init方法是当servlet加载的时候由servlet容器调用的方法,参数为ServletConfig ,也就是servlet的配置。顺便解释一下,当我们的web程序启动的时候,当servlet容器(如:tomcat)接收到第一个客户端的请求的时候,就会调用这个init方法来初始化一个servlet实例,但是仅限于第一次,这个servlet实例一旦被创建,除非结束程序调用下面的destroy方法,否则这个servlet实例就会一直存在。以后当再有请求进入的时候,使用的还是当前这个servlet实例。
- getServletConfig方法是用来获取我们的servlet配置的方法,源码如下:
public interface ServletConfig {
public String getServletName();
public ServletContext getServletContext();
public String getInitParameter(String name);
public Enumeration<String> getInitParameterNames();
}
- 通过源码我们可以看到获取到的就是servlet的配置信息,包括我们配置servlet时指定的名字(下面配置文件中的中的值)。servlet上下文(servlet初始化实例后会把一些公共的信息放在servletContext中,也叫servlet作用域)。根据名字(下面配置文件中的)获取到我们在web.xml中配置的初始化参数(下面配置文件中的)以及最后的获取到所有初始化参数的名字(下面配置文件中的)。具体name和初始化参数是什么,我们举个例子:
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>
com.xxx.MatrixServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.xxxx.I