【JavaWeb学习】servlet及生命周期

servlet介绍

servlet是一个运行在web服务器上的小Java程序,Servlet接收来自web客户端的请求并响应,通常通过http协议。

你可以继承javax.servlet.GenericServlet普通的servlet或者javax.servlet.http.HttpServlet一个http servlet

servlet生命周期

servlet定义了五个方法,说到这5个方法就要先说一下servlet的生命周期了。

servlet在客户端第一次调用的时候创建,创建时会调用init方法,然后执行service方法,当再次有请求该servlet时,不需要重新创建,也就是servlet是单例的,会存在线程安全问题,所以不建议在servlet中定义类变量,而要定义局部变量。那么servlet什么时候销毁呢?servlet实例会常驻内存当中,除非重新启动了服务器,servlet会通过垃圾回收,并且调用destory方法。

  • init(ServletConfig config):servlet容器一旦创建了servelt就会创建调用init,并把包含servlet的配置和初始化信息的ServletConfig 传递给init
  • ServletConfig getServletConfig():返回ServletConfig,包含了servlet初始化参数和启动参数
  • service:接收并响应web客户端的方法
  • getServletInfo: 返回servlet的信息,例如作者,版本号,版权
  • destroy:servlet销毁方法。

servlet继承图

【JavaWeb学习】servlet及生命周期_第1张图片
Servlet是一个接口,而GenericServlet定义了一个普通,无协议依赖的servlet.当然你可以继承HttpServlet来实现一个基于HTTP协议的servlet.GenericServlet继承了ServletConfig接口和Servlet接口。GenericServlet让写servelt变得更加容易,它提供了最简单版本的生命周期方法,init方法和destory方法。以及定义在ServletConfig接口里的方法。如果继承该类,那么需要你重写service方法。

HttpServlet提供了适用与web网站的servlet.子类必须重写至少一个方法,doGet和doPost等,分别对应http请求的get和post方法。继承该类就无需重写service方法,service方法已经根据标准的HTTP请求方法把请求分发给具体的doGet等方法。由于Servlet是单实例,线程安全需谨记。

搭建实例

新建一个servlet,让其直接继承HttpServlet

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LoginServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.print("get");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

然后在web.xml中配置这个servlet,以变让web容器能否找到它。



  HelloWord
	
		login
		com.controller.LoginServlet
	
	
		login
		/login
	

/login是请求路径,支持通配符*进行模糊匹配,*可以匹配任意的字符。然后匹配成功后,找到对应的servlet名称,根据这个servlet名称找到对应的servlet类,并构建servlet.注意,前面我们说过servlet只有第一次访问的时候才会构建,然后一直存在于内存中,知道web容器重启才清除。

参考文章

代理设计模式

你可能感兴趣的:(javaweb)