【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方法。
servlet继承图
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容器能否找到它。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>HelloWord</display-name> <servlet> <servlet-name>login</servlet-name> <servlet-class>com.controller.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
/login是请求路径,支持通配符*进行模糊匹配,*可以匹配任意的字符。然后匹配成功后,找到对应的servlet名称,根据这个servlet名称找到对应的servlet类,并构建servlet.注意,前面我们说过servlet只有第一次访问的时候才会构建,然后一直存在于内存中,知道web容器重启才清除。