📜  Servlet – 网络术语

📅  最后修改于: 2022-05-13 01:55:13.559000             🧑  作者: Mango

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编写的。