简单通俗的解释servlet的内部结构和运行过程

想要了解关于tomcat和servlet的关系:https://blog.csdn.net/weixin_43237362/article/details/105074286

在eclipse上运行servlet代码

servlet代码是要经服务器触发执行的,所以在编译器中编写代码必然要先配置下载好的tomcat服务器。新建一个动态Web项目,其中就可以编写servlet代码。WebContent文件夹下的WEB-INF文件夹中包含xml文件,用来配置启动servlet的路径。项目中一般创建新的html文件用来作为测试网站。

运行servlet代码后会出现仿真的浏览器页面弹出,根据你xml中配置好的路径就可以访问到测试网站和包含响应信息的网站。当然了。直接把url粘到浏览器里也是可以的。

servlet源码

继承机制见下图。众所周知servlet是一个接口,接口中有最基础的5个方法,从方法名可以基本看出servlet具有生命周期,初始化->消亡。service方法中有两个对象,分别代表请求对象和响应对象,这两个对象是由tomcat服务器创建出来的,并不是servlet内部产生的。

xml中是可以以标签的格式提供参数的,SesrvletConfig主要的目的就是获取xml中的参数值,参数值可以通过set/getAttribute方法在servlet之间传递。

网络中传输一般使用http协议,于是HttpServlet中public的service方法将request对象和response对象强制转化为http的对象。public的service方法最后调用了一个protected的service方法,其中根据常量判断使用哪个doxxx方法。doxxx方法中就是我们写的处理响应的代码。经常使用的是doGet和doPost方法,表单action是get使用doGet方法,是post就使用doPost方法。

要注意的是HttpServlet中service方法有两个,并且内部又分化出了多个doxxx方法来处理响应。

servlet生命周期

servlet是没有main方法的,但是可以由服务器处理运行。你可以随便实现一个servlet类,做一些修改,通过控制台打印信息概览生命周期。

public class LifeServlet implements Servlet{
	static {
		System.out.println("静态代码块");
	}	
	public LifeServlet() {
		System.out.println("构造方法"); // 重复的访问只有一个实例对象
	}	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("初始化");
	}
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {		
		// 一次请求,service方法执行一次,新建一个线程
		System.out.println("服务" + Thread.currentThread().getName());			
	}
	@Override
	public void destroy() {
		System.out.println("销毁");	
	}
}

执行后可以看出:静态代码块先执行,表明这是类的加载;之后是构造方法创建实例对象;然后是init方法,init方法的参数是ServletConfig类型的,其中进行了配置方面的初始化;然后是service方法的执行;手动停止服务器时会执行destory。

注意:每次刷新页面,都会调用一次service方法,通过打印线程名可以看出。service方法可以多次调用。但是init和destory都仅执行一次。实例化的servlet对象也只有一个。

总结来说:Servlet的生命周期可以分为四个阶段(1)加载和实例化:由Servlet容器完成(2)初始化:实例化Servlet后会调用init方法(3)处理客户请求:service方法(doGet或doPost)(4)销毁:销毁之前会调用destroy方法

关于servlet什么时候实例化、init、destory的详细解释:https://blog.csdn.net/weixin_43237362/article/details/105210533

发出请求返回响应的过程

 

 

猜你喜欢

转载自blog.csdn.net/weixin_43237362/article/details/105208074