什么是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