/*
*给Servlet指定一个Servlet路径 (让Servlet与一个路径绑定)
*浏览器访问Servlet路径
*Servlet生命周期方法
* void init(ServletConfig) (1次)出生之后 创建之后立即执行的初始化
* void service(ServletRequest request,ServletResponse response) 每次处理请求都会被调用
* void destory() 临死之前(1次) 销毁之前释放资源的方法
*特性
* 单例 一个类只有一个对象 存在多个Servlet类
* 线程不安全的 效率高
*Servlet类由我们来写 但对象由服务器来创建并且由服务器来调用相应的方法
*GenericServlet
*GenericServlet是Servlet接口的实现类
*/
web.xml
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>test.AServlet</servlet-class>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
public void init(ServletConfig servletconfig) throws ServletException {
System.out.println("init");
System.out.println(servletconfig.getInitParameter("p1"));
/*
* 获取所有初始化参数的名称
*/
Enumeration e = servletconfig.getInitParameterNames();
while(e.hasMoreElements()) {
System.out.println(e.nextElement());
}
}
public class BServlet implements Servlet {
/**
* 模拟genericServlet
*/
private ServletConfig config;
/**
* 需要些就写 不写也行
*/
@Override
public void destroy() {
System.out.println("die");
}
/**
* 一定在init()方法之后被调用
* init()被调用后 本类的成员this.config 已经有值了
*/
@Override
public ServletConfig getServletConfig() {
return this.config;
}
@Override
public String getServletInfo() {
return "hello";
}
/**
* 由Tomcat来调用 并且只调用一次
* 是这些方法中第一个被调用 会在构造器后马上被调用
*/
@Override
public void init(ServletConfig arg0) throws ServletException {
//把tomcat传递的ServletConfig赋值给本类的一个成员 其实就把它保存起来 方便在其他方法中使用
this.config = config;
init();
}
/**
* 本类自己定义的 不是servlet接口中的方法
* 子父类配合
*/
public void init() {
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
/**
* 可以使用ServletConfig的成员
*/
System.out.println("每次处理请求都调用");
}
public ServletContext getServletContext() {
return config.getServletContext();
}
public String getServletName() {
return config.getServletName();
}
public String getInitParameter(String name) {
return config.getInitParameter(name);
}
}
public class CServlet extends BServlet {
//父类中的就相当于在子类中了
@Override
public void init() {
//通过服务器调用的intit(ServletConfig arg0)[有生命周期的方法] 调用子类覆盖父类的init()方法
//不仅config成功配置好 而且能用子类自己的 间接访问
System.out.println("wulala");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
String value = getInitParameter("p1");
super.service(arg0, arg1);
}
}
public class DServlet extends GenericServlet {
@Override
public void init() throws ServletException {
System.out.println("lalala");
super.init();
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
}
@Override
public void destroy() {
System.out.println("die");
super.destroy();
}
}