Servlet概述
Servlet是JavaWeb的三大组件之一,它属于动态资源。都会在web.xml中配置
Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
Tomcat服务器会帮助我们将请求的数据封装在request对象
Tomcat同样会创建respose对象给我们使用,让我们响应 HttpServletRequest extends ServletRequest
l 接收请求。
l 完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!
我们需要实现自己的逻辑业务就需要自己来编写Servlet,每个Servlet必须实现javax.servlet.Servlet接口。
实现Servlet的方式
实现Servlet有三种方式:
1.实现javax.servlet.Servlet接口;
2.继承javax.servlet.GenericServlet类;
3.继承javax.servlet.http.HttpServlet类;
开发中通常我们会去继承HttpServlet类来完成我们的Servlet
什么叫做生命周期方法? 生命周期方法由Tomcat来调用,我们只是完成接受请求,然后响应,完成业务逻辑代码
Tomcat服务器帮助我们完成不变的代码,我们来完成业务需求变化的代码
我们的代码和Tomcat代码合起来构成一个完成的代码
Servlet接口
Servlet有自己的生命周期,Servlet接口中的方法分为生命周期方法和非生命周期方法:
生命周期方法
l void init(ServletConfig config);
l void service(ServletRequest,ServletResponse);
l void destroy();
非生命周期方法
| java.lang.String getServletInfo()
| ServletConfig getServletConfig()
init方法:
服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置<load-on-startup>1</load-on-startup>。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。
而且一个Servlet类型,服务器只创建一个实例对象,它是单例的,例如在我们首次访问http://localhost:8080/day01_servletdemo/AServlet时,服务器通过“/AServlet”找到了绑定的Servlet名称为com.xyr.web.servlet.AServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建AServlet的实例。当我们再次访问http://localhost:8080/day01_servletdemo/AServlet时,服务器就不会再次创建AServlet实例了,而是直接使用上次创建的实例。
在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet创建后马上就会调用init()方法,而且从Servlet创建到销毁。这个方法只会被调用一次。
所以我们可以把一些对Servlet的初始化工作放到init方法中!
service方法
当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!
destroy方法
Servlet是不会轻易销毁的,通常都是在服务器关闭时Servlet才会销毁!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet相关资源的释放放到destroy()方法中
Servlet接口相关类型
在Servlet接口中还存在三个我们不熟悉的类型:
l ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
l ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;
l ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素。