小言_互联网的博客

什么是servlet,执行原理,生命周期,作用,

250人阅读  评论(0)

什么是Servlet?

  • 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。

  • 从狭义上来讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类。

  • Servlet(Server Applet)作为服务器端的一个组件,它的本意是“服务器端的小程序”。

    • Servlet的实例对象由Servlet容器负责创建;

    • Servlet的方法由容器在特定情况下调用;

    • Servlet容器会在Web应用卸载时销毁Servlet对象的实例。

Servlet的作用?

  •     1.创建并返回客户请求的动态HTML页面
  •     2.创建可以嵌入到HTML页面的HTML代码片段
  •     3.跟其他的服务器进行通信,当然也可以是其他的servlet

简单一点,servlet就是获取客户端的请求(包含请求的数据),然后将数据通过后端的代码进行分析,将生成的数据返回给客户端。浏览器http请求------>  tomcat服务器------>  到达servlet(大部分都是继承自HttpServlet)------>  执行doGet,doPost方法------>  返回数据

Servlet生命周期?

① Servlet对象的创建:构造器

  • 默认情况下,Servlet容器第一次收到HTTP请求时创建对应Servlet对象。(单例模式,每一个自定义servlet类,在运行时只有一个对应的servlet实例存在)

  • 容器之所以能做到这一点是由于我们在注册Servlet时提供了全类名,容器使用反射技术创建了Servlet的对象。

② Servlet对象初始化:init()

  • Servlet容器创建Servlet对象之后,会调用init(ServletConfig config)方法。

  • 作用:是在Servlet对象创建后,执行一些初始化操作。例如,读取一些资源文件、配置文件,或建立某种连接(比如:数据库连接)

  • init()方法只在创建对象时执行一次,以后再接到请求时,就不执行了

  • 在javax.servlet.Servlet接口中,public void init(ServletConfig config)方法要求容器将ServletConfig的实例对象传入,这也是我们获取ServletConfig的实例对象的根本方法。

③ 处理请求:service()

  • 在javax.servlet.Servlet接口中,定义了service(ServletRequest req, ServletResponse res)方法处理HTTP请求。

  • 在每次接到请求后都会执行。

  • 上一节提到的Servlet的作用,主要在此方法中体现。

  • 同时要求容器将ServletRequest对象和ServletResponse对象传入。

④ Servlet对象销毁:destroy()

  • 服务器重启、服务器停止执行或Web应用卸载时会销毁Servlet对象,会调用public void destroy()方法。

  • 此方法用于销毁之前执行一些诸如释放缓存、关闭连接、保存内存数据持久化等操作。

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFirstServlet implements Servlet {

	public MyFirstServlet() {
		System.out.println("执行构造器");
	}
	
	@Override
	public void destroy() {
		System.out.println("执行destroy(),Servlet消亡");
	}

	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

	@Override
	public String getServletInfo() {
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("执行init(),初始化");
	}

	/**
	 * 处理用户请求
	 */
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("MyFirstServlet->service()!!!");
	}

}

执行原理?

通过web.xml配置信息,找到对应的url,也就找到了servlet配置中的名称,就可以找到servlet的全类名,通过反射就可以创建servlet对象,然后执行初始化,调用init方法,service方法判断请求的方式执行相应的操作。这样就从前端跳转到了后端,然后就可以进行数据分析,返回结果到前端,完成交互。

       例:


转载:https://blog.csdn.net/qq_40244391/article/details/102406840
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场