Servlet – 网络术语
Servlet 是在支持Java的 Web 服务器或应用程序服务器上运行的 Java 程序。它们用于处理从网络服务器获得的请求,处理请求,产生响应,然后将响应发送回网络服务器。
Servlet 的工作原理
- 在一个servlet的请求下,服务器检查是否是第一次,如果是;
- Web 容器加载 servlet 类
- 它实例化 servlet 类
- 在调用 init() 方法时传递 ServletConfig 对象
- 否则,它调用 service() 方法并传递请求和响应对象。
- Web 容器将请求映射到 web.xml 文件中的 servlet。
- 它根据请求创建请求和响应的对象。
- 它调用线程上的 service() 方法
- 受保护的 service() 方法调用取决于请求类型的 doGet 方法。
- 响应由 doGet 方法生成并发送到客户端。
- Web 容器在传递响应后删除请求和响应对象。
- 根据服务器实现,线程包含在已删除池或线程池中。
容器
- 它在Java中用于在服务器端动态生成网页
- 加载 servlet 类
- 它创建 servlet 类的实例。
- 它调用 init() 方法并传递 ServletConfig 对象。
- 它在删除 servlet 时调用 destroy() 方法。
网络术语
- Web 应用程序:这是一个可从 Web 访问的应用程序,它可能由 Servlet、JSP、Filter 或 HTML 组成,通常在服务器中执行并响应 HTTP 请求。
- 网站:它是可能包含文本、图像、音频和视频的相关网页的集合。
- HTTP:它是用于在客户端和服务器之间建立通信的数据通信协议。
- HTTP 请求:它是计算机向 Web 服务器发送的请求,其中包含各种可能感兴趣的信息。
- Get 和 Post:这些是 servlet 中的 HTTP 方法,Get 用于从服务器检索信息,而 Post 方法用于在服务器上提交或更新数据时使用。
- 服务器:用于管理网络资源和运行提供服务的程序或软件
小服务程序 API
Servlet API 用于创建 servlet。有 2 个包,Javax.servlet.http 包包含支持 http servlet 的类,而 javax.servlet 包包含支持通用 servlet(协议独立 servlet)的类。
Java
java.lang.Object
|_extended byjavax.servlet.GenericServlet
|_extended byjavax.servlet.http.HttpServlet
通用 Servlet
Generic servlet 类是通过扩展创建的
javax.servlet.GenericServlet
GenericServlet 是一个具有服务方法的抽象类。
service()
这意味着子类型或子类应该覆盖超类型中的 service() 方法。
public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
该方法采用 2 个参数
ServletRequest
和
ServletResponse
请求对象接受客户端的请求,而响应对象将响应返回给客户端调用。
HTTP 小服务程序
Http servlet 类是通过扩展创建的
Javax.servlet.http.HttpServlet class.
HTTP servlet 是 GenericServlet 类的扩展抽象类,它提供了 doPost、doGet、doDelete、doTrace 等方法。
HTTP Servlet 类中的方法示例:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException
{ // invoked by the web container and it handles the Get request from client call }
protected long getLastModified(HttpServletRequest req)
{ // This method returns the last time Httpservlet was modified }
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{ // Invoke by the web container to handle the HEAD request }
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{ // invoked by the web and it handles the POST request }
protected void doDelete(HttpServletRequest req, HttpServletResponse res)
{ // Invoked by the web and it handles the DELETE request }
protected void doTrace(HttpServletRequest req, HttpServletResponse res)
{ // Handles the TRACE request }
protected void doOptions(HttpServletRequest req, HttpServletResponse res)
{ // Handles the OPTIONS request }
Servlet 生命周期
servlet 中有状态:
新的、准备好的和结束的。
- 每当创建 servlet 实例时,servlet 就是新的。
- 在调用 init() 方法并执行其任务后,servlet 进入就绪状态。
- 然后,每当 Web 容器调用 destroy() 方法时,它就会进入结束状态。
Web 容器监督 servlet 生命周期如下:
加载 Servlet 类:
- 类加载器在 web 容器接收到请求时加载 servlet 类
- 创建 Servlet 实例:
- 在加载了 Servlet 类之后,web 容器创建了 servlet 的实例,并且它在其生命周期中只有一次。
- 调用 init() 方法:
- init() 方法在 Servlet 实例创建后被 web 容器调用一次
public void init(ServletConfig config) throws ServletException
Web 容器调用 service() 方法:
每次 Web 容器调用 service() 方法时都会调用它,这发生在向 servlet 发出请求之后。
Web 容器调用 destroy() 方法:
在从服务中删除 servlet 实例之前调用 destroy() 方法,这允许 servlet 清理线程等资源。
Public void destroy()
WAR文件
WAR(Web 存档)文件是 Web 项目的文件所在的位置,它可能包含诸如 servlet、jsp、html、css、js、jsp 等文件。
结论
Web 容器有助于创建多个线程来处理对 servlet 的许多请求,从而代替进程带来更好的性能。它是由 JVM 管理的 Robust,这可以防止内存泄漏和垃圾收集的问题。它是安全的,因为它是用Java编写的。