提交 a3efb7d3 编写于 作者: W wizardforcel

2019-10-14 20:38:55

上级 c408e1bd
# Project 的 web.xml 文件中的 welcome-file-list 标记
# 项目的`web.xml`文件中的`welcome-file-list`标签
> 原文: [https://beginnersbook.com/2014/04/welcome-file-list-in-web-xml/](https://beginnersbook.com/2014/04/welcome-file-list-in-web-xml/)
你有没见过`web.xml`文件中的`<welcome-file-list>`标签并想知道它是什么?在本文中,我将解释这个标签是什么以及我们使用它的原因。
你有没见过`web.xml`文件中的`<welcome-file-list>`标签并想知道它是什么?在本文中,我将解释这个标签是什么以及我们使用它的原因。
标签&lt; welcome-file-list&gt;如果在浏览器上加载项目时未指定文件名,则用于指定默认情况下需要由服务器调用的文件。
标签`<welcome-file-list>`如果在浏览器上加载项目时未指定文件名,则用于指定默认情况下需要由服务器调用的文件。
对于例如您已经创建了一个名为“MyServletProject”的项目,并且您在项目中定义了很少的 html 页面和 servlet 类。但是在浏览器中你给出了这样的 url:
对于例如您已经创建了一个名为`MyServletProject`的项目,并且您在项目中定义了很少的 html 页面和 servlet 类。但是在浏览器中你给出了这样的 url:
```java
http://localhost:8080/MyServletProject
```
通常我们给出完整的路径:`http://localhost:8080/MyServletProject/index.html`。但是,如果您已经给出了上述路径,那么网络服务器将查找&lt; welcome-file-list&gt;标记在项目的 web.xml 文件中。假设您的 web.xml 文件中包含以下内容:
通常我们给出完整的路径:`http://localhost:8080/MyServletProject/index.html`。但是,如果您已经给出了上述路径,那么网络服务器将查找`<welcome-file-list>`标签在项目的`web.xml`文件中。假设您的`web.xml`文件中包含以下内容:
```java
<web-app>
......@@ -28,12 +28,12 @@ http://localhost:8080/MyServletProject
根据欢迎文件列表,服务器将查找`myhome.htm`页面,如果这不存在,则查找第二个欢迎文件`myindex.html`,依此类推,直到找到有效的欢迎文件。
**注意**:如果&lt; welcome-file-list&gt;标签未在 web.xml 中定义,或者在&lt; welcome-file&gt;中定义的欢迎文件中定义标签不存在然后服务器将按给定的顺序查找以下文件:
**注意**:如果`<welcome-file-list>`标签未在`web.xml`中定义,或者在`<welcome-file-list>`中定义的欢迎文件中定义标签不存在然后服务器将按给定的顺序查找以下文件:
1)index.html
1)`index.html`
2)index.htm
2)`index.htm`
3)index.jsp
3)`index.jsp`
我希望我涵盖了与此标签相关的所有内容。如果您有任何疑问,请随时在下面发表评论。
\ No newline at end of file
# 如何使用 Example 在 web.xml 文件中使用 load-on-startup 标记
# 如何在`web.xml`文件中使用`load-on-startup`标签
> 原文: [https://beginnersbook.com/2017/07/load-on-startup-tag-in-web-xml-file-with-example/](https://beginnersbook.com/2017/07/load-on-startup-tag-in-web-xml-file-with-example/)
默认情况下,在 servlet 容器收到特定 servlet 的请求之前,不会加载 Servlet。这可能会导致第一次访问 servlet 的延迟。为避免访问时间延迟,您可以使用**&lt; load-on-startup&gt; web.xml** 文件中的标记,允许您在服务器启动时强制 servlet 容器加载(实例化并使其 init()调用)servlet。
默认情况下,在 servlet 容器收到特定 servlet 的请求之前,不会加载 Servlet。这可能会导致第一次访问 servlet 的延迟。为避免访问时间延迟,您可以使用`web.xml`文件中的标签`<load-on-startup>`,允许您在服务器启动时强制 servlet 容器加载(实例化并使其`init()`调用)servlet。
## 如何使用&lt; load-on-startup&gt;
## 如何使用`<load-on-startup>`
这是一个示例 web.xml 文件:
这是一个示例`web.xml`文件:
```java
<web-app>
......@@ -22,11 +22,11 @@
</web-app>
```
如果我没有指定&lt; load-on-startup&gt;,那么在收到对 DemoServlet servlet 类的请求之前,Web 容器就不会加载 servlet。由于我已经指定了值&gt; = 0,因此将在启动时加载此 servlet(DemoServlet 类)。
如果我没有指定`<load-on-startup>`,那么在收到对`DemoServlet` servlet 类的请求之前,Web 容器就不会加载 servlet。由于我已经指定了值`>= 0`,因此将在启动时加载此 servlet(`DemoServlet`类)。
> 值&gt; = 0 表示在部署 web-app 时或服务器启动时加载 servlet,如果值
> `>= 0`的值表示在部署 web-app 时或服务器启动时加载 servlet。
### 如何使用&lt; load-on-startup&gt;指定 servlet 加载的顺序标签
### 如何使用`<load-on-startup>`标签指定 servlet 加载的顺序
```java
<web-app>
......@@ -54,6 +54,6 @@
</web-app>
```
在这个例子中,我们在 web.xml 文件中指定了三个 Servlet,因为 servlet 类 DemoServlet1 和 DemoServlet2 具有加载启动值&gt; = 0,它们都将在服务器启动时立即加载。但是,在 DemoServlet1 类之前加载 servlet 类 DemoServlet2,因为它具有较低的启动加载值。
在这个例子中,我们在`web.xml`文件中指定了三个 Servlet,因为 servlet 类`DemoServlet1``DemoServlet2`具有`>= 0`的加载启动值,它们都将在服务器启动时立即加载。但是,在`DemoServlet1`类之前加载 servlet 类`DemoServlet2`,因为它具有较低的启动加载值。
Servlet 类 DemoServlet3 在启动时不会加载,因为它具有负加载启动值。
\ No newline at end of file
Servlet 类`DemoServlet3`在启动时不会加载,因为它具有负加载启动值。
\ No newline at end of file
......@@ -8,7 +8,7 @@
**在 Windows 上安装 Eclipse**
转到此链接 [https://www.eclipse.org/downloads](https://www.eclipse.org/downloads) 。在“获取 Eclipse Oxygen”下单击“下载软件包”下载“Eclipse IDE for Java Developers”。您会在右侧看到两个选项(32 位和 64 位),如果系统是 32 位,则单击 32 位,否则单击 64 位。这将在您的系统上下载压缩文件。
转到此链接 [https://www.eclipse.org/downloads](https://www.eclipse.org/downloads) 。在“获取 Eclipse Oxygen”下单击“下载软件包”下载“Eclipse IDE for Java Developers”。您会在右侧看到两个选项(32 位和 64 位),如果系统是 32 位,则单击 32 位,否则单击 64 位。这将在您的系统上下载压缩文件。
要安装 Eclipse,请解压缩下载的文件并将解压缩的文件夹复制到所需的位置。
......@@ -32,7 +32,7 @@
### 第 1 步:创建项目:
让我们在 Eclipse 中创建一个 Servlet 应用。打开 Eclipse,然后单击文件❯新建❯单击动态 Web 项目
让我们在 Eclipse 中创建一个 Servlet 应用。打开 Eclipse,然后单击“文件❯新建❯动态 Web 项目”
![dynamic web project](img/7d6a95afc58d3205298063a30e300aeb.jpg)
......@@ -42,9 +42,9 @@
![Give project name](img/dfcf0e33331f4170d8f7fd2b6f17ff0c.jpg)
勾选显示**生成 web.xml 部署描述符**
勾选显示**生成`web.xml`部署描述符**的复选框
![Generate web xml](img/d0666b83906f1c0cc9c05eaaf609011a.jpg)的复选框
![Generate web xml](img/d0666b83906f1c0cc9c05eaaf609011a.jpg)
**初始项目结构:**
......@@ -54,10 +54,11 @@
### 第 2 步:创建 Servlet 类:
我们通过扩展 HttpServlet 类来创建一个 Http Servlet。右键单击 src 文件夹并创建一个新的类文件,将该文件命名为 MyServletDemo。文件路径应如下所示:Java Resources / src / default package / MyServletDemo.java
我们通过扩展`HttpServlet`类来创建一个`HttpServlet`。右键单击`src`文件夹并创建一个新的类文件,将该文件命名为`MyServletDemo`。文件路径应如下所示:`Java Resources/src/default package/MyServletDemo.java`
![New Servlet Class](img/bf56449f0ffdcafc2c9ee939b88c9c0e.jpg)
**MyServletDemo.java**
`MyServletDemo.java`
```java
import java.io.*;
......@@ -97,8 +98,9 @@ public class MyServletDemo extends HttpServlet {
### 第 3 步:创建一个 html 页面来调用网页上的 servlet 类
我们正在创建一个 html 文件,一旦我们点击网页上的链接就会调用 servlet。在 WebContent 文件夹中创建此文件。文件的路径应如下所示:WebContent / index.html
**index.html**
我们正在创建一个 html 文件,一旦我们点击网页上的链接就会调用 servlet。在`WebContent`文件夹中创建此文件。文件的路径应如下所示:`WebContent/index.html`
`index.html`
```java
<!DOCTYPE html>
......@@ -114,9 +116,9 @@ public class MyServletDemo extends HttpServlet {
```
**编辑 web.xml 文件**
**编辑`web.xml`文件**
此文件可在此路径 WebContent / WEB-INF / web.xml 中找到。在此文件中,我们将使用特定 URL 映射 Servlet。由于我们在单击 index.html 页面上的链接时调用欢迎页面,因此我们将欢迎页面映射到我们上面创建的 Servlet 类。
此文件可在此路径`WebContent/WEB-INF/web.xml`中找到。在此文件中,我们将使用特定 URL 映射 Servlet。由于我们在单击`index.html`页面上的链接时调用欢迎页面,因此我们将欢迎页面映射到我们上面创建的 Servlet 类。
```java
<web-app>
......@@ -150,7 +152,7 @@ public class MyServletDemo extends HttpServlet {
**运行项目:**
右键单击 index.html,在服务器上运行。
右键单击`index.html`,在服务器上运行。
![Run on Apache tomcat server](img/3bc8cac59e2401b1bbe96846362db7a3.jpg)
......
......@@ -14,7 +14,7 @@ Servlet 生命周期可以描述为 servlet 在其生命周期中从一系列步
## Servlet 的生命周期
Servlet 生命周期包含五个步骤:1)加载 Servlet 2)创建 Servlet 实例 3)调用 init()一次 4)为每个客户端请求重复调用 service()5)调用 destroy()
Servlet 生命周期包含五个步骤:1)加载 Servlet,2)创建 Servlet 实例,3)调用`init()`一次,4)为每个客户端请求重复调用`service()`,5)调用`destroy()`
> 对于那些想知道什么是实例和调用的人来说:实例和对象是一回事。调用方法意味着调用一个方法,它只是一个奇特的词,我们在编程世界中使用而不是调用:)
......@@ -28,11 +28,11 @@ Servlet 生命周期包含五个步骤:1)加载 Servlet 2)创建 Servlet
一旦加载了所有 Servlet 类,servlet 容器就会创建每个 servlet 类的实例。 Servlet 容器每个 servlet 类只创建一个实例,并且对 servlet 的所有请求都在同一个 servlet 实例上执行。
**步骤 3:调用 init()方法**
**步骤 3:调用`init()`方法**
一旦实例化了所有 servlet 类,就会为每个实例化的 servlet 调用 init()方法。此方法初始化 servlet。您可以在部署描述符(web.xml)文件中指定某些 init 参数。例如,如果 servlet 的值&gt; gt = 0,则在 Web 容器启动期间立即调用其 init()方法。
一旦实例化了所有 servlet 类,就会为每个实例化的 servlet 调用`init()`方法。此方法初始化 servlet。您可以在部署描述符(`web.xml`)文件中指定某些`init`参数。例如,如果 servlet 的值`>= 0`,则在 Web 容器启动期间立即调用其`init()`方法。
您可以在 web.xml 文件中指定元素,如下所示:
您可以在`web.xml`文件中指定元素,如下所示:
```java
<servlet>
......@@ -43,22 +43,22 @@ Servlet 生命周期包含五个步骤:1)加载 Servlet 2)创建 Servlet
```
现在,在 Web 容器启动期间将调用相应 servlet 类 **com.beginnersbook.MyServletDemo** 的 init()方法。
现在,在 Web 容器启动期间将调用相应 servlet 类`com.beginnersbook.MyServletDemo``init()`方法。
**注意:init()方法在 servlet 的生命周期中只调用一次。**
**步骤 4:调用 service()方法**
**步骤 4:调用`service()`方法**
每次 Web 服务器收到 servlet 请求时,它都会产生一个调用 service()方法的新线程。如果 servlet 是 GenericServlet,那么请求由 service()方法本身提供,如果 servlet 是 HttpServlet,则 service()方法接收请求并根据请求的类型将其分派给正确的处理程序方法。
每次 Web 服务器收到 servlet 请求时,它都会产生一个调用`service()`方法的新线程。如果 servlet 是`GenericServlet`,那么请求由`service()`方法本身提供,如果 servlet 是`HttpServlet`,则`service()`方法接收请求并根据请求的类型将其分派给正确的处理程序方法。
例如,如果它是 Get Request,则 service()方法会通过使用请求参数调用 doGet()方法将请求分派给 doGet()方法。类似地,诸如 Post,Head,Put 等的请求被 servlet 的 service()方法分派给相应的处理程序 doPost(),doHead(),doPut()等。
例如,如果它是`Get`请求,则`service()`方法会通过使用请求参数调用`doGet()`方法将请求分派给`doGet()`方法。类似地,诸如`Post``Head``Put`等的请求被 servlet 的`service()`方法分派给相应的处理程序`doPost()``doHead()``doPut()`等。
![Servlet Life Cycle](img/99b6d7d7d4ee2cdf7b3dfce261d5405e.jpg)
**注意**:与只调用一次的 init()和 destroy()不同,在 servlet 生命周期中可以多次调用 service()方法。只要不销毁 servlet,就会为每个客户端请求调用 service()方法。
**注意**:与只调用一次的`init()``destroy()`不同,在 servlet 生命周期中可以多次调用`service()`方法。只要不销毁 servlet,就会为每个客户端请求调用`service()`方法。
**在生命周期的所有 5 个步骤中,这是多次执行的唯一步骤。**
**步骤 5:调用 destroy()方法**
**步骤 5:调用`destroy()`方法**
当 servlet 容器关闭时(这通常在我们停止 Web 服务器时发生),它卸载所有 servlet 并为每个初始化的 servlet 调用 destroy()方法。
\ No newline at end of file
当 servlet 容器关闭时(这通常在我们停止 Web 服务器时发生),它卸载所有 servlet 并为每个初始化的 servlet 调用`destroy()`方法。
\ No newline at end of file
# Servlet 的工作
# Servlet 的工作原理
> 原文: [https://beginnersbook.com/2013/05/working-of-servlets/](https://beginnersbook.com/2013/05/working-of-servlets/)
在我开始解释 servlet 如何工作之前,让我们熟悉这三个术语。
**Web 服务器**:它可以处理客户端发送的 HTTP 请求,并通过 HTTP 响应响应请求。
**Web 应用(webapp)**:我在本指南中将其称为 webapp。基本上该项目是您的 Web 应用,它是 servlet 的集合。
**Web 容器**:也称为 Servlet 容器和 Servlet 引擎。它是 Web Server 的一部分,与 Servlet 交互。这是管理 Servlet 生命周期的 Web Server 的主要组件。
> 您会发现本指南的某些部分已在 [servlet 生命周期指南](https://beginnersbook.com/2013/05/servlet-life-cycle/)中介绍,但本指南主要介绍 servlet 应用(webapp)
> 的工作,而不是生命周期的步骤。我强烈建议您阅读本文,深入了解 servlet 的实际工作原理。
> 您会发现本指南的某些部分已在 [servlet 生命周期指南](https://beginnersbook.com/2013/05/servlet-life-cycle/)中介绍,但本指南主要介绍 servlet 应用(webapp)的工作,而不是生命周期的步骤。我强烈建议您阅读本文,深入了解 servlet 的实际工作原理。
## Servlet 如何工作?
1)当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。在此步骤中,Servlet 容器创建 ServletContext 对象。 **ServletContext 是一个接口,它定义了 servlet 可以用来与 servlet 容器**通信的方法集。
1)当 Web 服务器(例如 Apache Tomcat)启动时,servlet 容器部署并加载所有 servlet。在此步骤中,Servlet 容器创建`ServletContext`对象。`ServletContex`是一个接口,它定义了可以用来与 servlet 容器**通信的方法集。
**注****每个 webapp** 只有一个`ServletContext`,这对所有 servlet 都是通用的。`ServletContext`有几个有用的方法,如`addListener()``addFilter()`等。现在我不解释它们,因为我将在一个关于`ServletContext`的单独文本中介绍它们。
**注****每个 webapp** 只有一个 ServletContext,这对所有 servlet 都是通用的。 ServletContext 有几个有用的方法,如 addListener(),addFilter()等。现在我不解释它们,因为我将在一个关于 ServletContext 的单独文本中介绍它们
2)一旦加载了 servlet,servlet 容器就会创建 servlet 类的实例。对于每个实例化的 servlet,调用其`init()`方法
2)一旦加载了 servlet,servlet 容器就会创建 servlet 类的实例。对于每个实例化的 servlet,调用其 init()方法
3)客户端(用户浏览器)向某个端口上的 Web 服务器发送 Http 请求。每次 Web 服务器收到请求时,servlet 容器都会创建`HttpServletRequest``HttpServletResponse`对象。`HttpServletRequest`对象提供对请求信息的访问,`HttpServletResponse`对象允许我们在将 http 响应发送到客户端之前对其进行格式化和更改
3)客户端(用户浏览器)向某个端口上的 Web 服务器发送 Http 请求。每次 Web 服务器收到请求时,servlet 容器都会创建 HttpServletRequest 和 HttpServletResponse 对象。 HttpServletRequest 对象提供对请求信息的访问,HttpServletResponse 对象允许我们在将 http 响应发送到客户端之前对其进行格式化和更改
servlet 容器生成一个新线程,该线程为每个客户端请求调用`service()`方法。`service()`方法根据请求类型将请求调度到正确的处理程序方法
servlet 容器生成一个新线程,该线程为每个客户机请求调用 service()方法。 **service()方法根据请求类型**将请求调度到正确的处理程序方法。
例如,如果服务器收到 Get Request,则 service()方法会通过使用请求参数调用 doGet()方法将请求分派给 doGet()方法。类似地,诸如 Post,Head,Put 等的请求被 servlet 的 service()方法分派给相应的处理程序 doPost(),doHead(),doPut()等。
例如,如果服务器收到`Get`请求,则`service()`方法会通过使用请求参数调用`doGet()`方法将请求分派给`doGet()`方法。类似地,诸如`Post``Head``Put`等的请求被 servlet 的`service()`方法分派给相应的处理程序`doPost()``doHead()``doPut()`等。
![Http Servlet](img/800e239048bf09e4171bc1a7b1b429a7.jpg)
4)当 servlet 容器关闭时,它会卸载所有 servlet 并为每个初始化的 servlet 调用 destroy()方法。
\ No newline at end of file
4)当 servlet 容器关闭时,它会卸载所有 servlet 并为每个初始化的 servlet 调用`destroy()`方法。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册