提交 fac8b3e3 编写于 作者: W wizardforcel

2019-11-28 17:08:54

上级 722b7723
......@@ -2,16 +2,16 @@
> 原文: [https://javatutorial.net/java-send-mail-example](https://javatutorial.net/java-send-mail-example)
与 JavaMail API“ pp”无关的(平台和协议)框架,旨在帮助构建消息传递和邮件应用程序。 它是 的可选软件包,可用于 [Java](https://javatutorial.net/install-java-9-eclipse) SE 平台,也包含在 Java EE 平台中。
JavaMail API 使平台和协议无关的框架,旨在帮助构建消息传递和邮件应用程序。 它是可选软件包,可用于 [Java](https://javatutorial.net/install-java-9-eclipse) SE 平台,也包含在 Java EE 平台中。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
JavaMail 在许多情况下都非常有用。 例如,当用户单击“忘记密码”(通过向用户设置的相应电子邮件发送电子邮件),注册网站中的事件(通过电子邮件发送有关该事件的更多详细信息)时,可以使用该功能。
JavaMail 在许多情况下都非常有用。 例如,当用户单击“忘记密码”(通过向用户设置的相应电子邮件发送电子邮件),注册网站中的事件(通过电子邮件发送有关该事件的更多详细信息)时,可以使用该功能。
## JavaMail API 中使用的主要协议
* SMTP
* 流行音乐
* POP
* IMAP
如果您有使用计算机网络的经验,则可能听说过其中的一些(如果不是全部)。 但是,如果您没有计算机网络的经验,那么让我为您分解这些协议。
......@@ -28,7 +28,7 @@ JavaMail 在许多情况下都非常有用。 例如,当用户单击“忘记
传输层的协议为应用程序提供主机到主机的通信服务。
Internet 层是一组方法,协议和规范,用于在必要时通过网络将源数据包从源主机传输到 IP 地址指定的目标主机。
网络层是一组方法,协议和规范,用于在必要时通过网络将源数据包从源主机传输到 IP 地址指定的目标主机。
网络访问层中的协议为系统提供了将数据传递到直接连接的网络上的其他设备的方法。
......@@ -36,15 +36,15 @@ Internet 层是一组方法,协议和规范,用于在必要时通过网络
### SMTP
SMTP 代表简单邮件传输协议。 它是一种标准的 Internet 协议,用于跨 Internet 协议网络的电子邮件传输。 还有本身不是协议的 SMTPS。 SMTPS 本质上是受 SSL 保护的 SMTP 连接。
SMTP 代表简单邮件传输协议。 它是一种标准的互联网协议,用于跨互联网协议网络的电子邮件传输。 还有本身不是协议的 SMTPS。 SMTPS 本质上是受 SSL 保护的 SMTP 连接。
### POP
POP 代表邮局协议,是本地电子邮件客户端用来通过 TCP / IP 连接从远程服务器检索电子邮件的应用程序层 Internet 标准协议。 POP 支持下载和删除访问远程邮箱的要求。
POP 代表邮局协议,是本地电子邮件客户端用来通过 TCP / IP 连接从远程服务器检索电子邮件的应用程序层互联网标准协议。 POP 支持下载和删除访问远程邮箱的要求。
### IMAP
IMAP 代表 Internet 消息访问协议。 电子邮件客户端使用的一种 Internet 标准协议,它通过 TCP / IP 连接从邮件服务器检索电子邮件。 它还允许电子邮件客户端访问远程邮件服务器上的电子邮件。 传入的电子邮件被发送到电子邮件服务器,该服务器将消息存储在收件人的电子邮件框中。
IMAP 代表互联网消息访问协议。 电子邮件客户端使用的一种互联网标准协议,它通过 TCP / IP 连接从邮件服务器检索电子邮件。 它还允许电子邮件客户端访问远程邮件服务器上的电子邮件。 传入的电子邮件被发送到电子邮件服务器,该服务器将消息存储在收件人的电子邮件框中。
## JavaMail 架构
......@@ -58,7 +58,7 @@ IMAP 代表 Internet 消息访问协议。 电子邮件客户端使用的一种
## 使用 JavaMail API 发送电子邮件的示例
在我们开始之前,请确保您已经安装了必要的 [.jar 文件](http://www.java2s.com/Code/Jar/j/Downloadjavamail144jar.htm)。 也可以在 [Oracle 网站](https://javaee.github.io/javamail/)上找到它们。 去那里下载最新版本。 另外,您可能需要下载 [fakeSTMP](http://nilhcem.com/FakeSMTP/index.html) 。 fakeSTMP 用于测试目的。 对于此示例,您需要在计算机上安装 SMTP。
在我们开始之前,请确保您已经安装了必要的[`.jar`文件](http://www.java2s.com/Code/Jar/j/Downloadjavamail144jar.htm)。 也可以在 [Oracle 网站](https://javaee.github.io/javamail/)上找到它们。 去那里下载最新版本。 另外,您可能需要下载 [fakeSTMP](http://nilhcem.com/FakeSMTP/index.html) 。 fakeSTMP 用于测试目的。 对于此示例,您需要在计算机上安装 SMTP。
为了能够通过您的 gmail 帐户发送邮件,您应该在 Google 帐户安全设置中允许使用不安全的应用程序(从 gmail 的角度来说就是您的应用程序)。
......@@ -116,9 +116,9 @@ Session session = Session.getDefaultInstance(properties);
}
```
在这里,我们正在创建一条消息,紧接着设置发送电子邮件的人(在本例中为“ senderEmail”。此后,我们只需使用 message.addRecipient()方法添加目标电子邮件即可。然后,设置邮件的主题 电子邮件(您可以将其设置为任意内容),然后我们设置文本(同样,您可以将其设置为任意内容)。然后,我们只需发送邮件即可。
在这里,我们正在创建一条消息,紧接着设置发送电子邮件的人(在本例中为`senderEmail`。此后,我们只需使用`message.addRecipient()`方法添加目标电子邮件即可。然后,设置邮件的主题 电子邮件(您可以将其设置为任意内容),然后我们设置文本(同样,您可以将其设置为任意内容)。然后,我们只需发送邮件即可。
而已! 我们发送了消息。
好的! 我们发送了消息。
### 完整的代码段:
......
......@@ -2,21 +2,21 @@
> 原文: [https://javatutorial.net/java-volatile-example](https://javatutorial.net/java-volatile-example)
在本教程中,我们将讨论 Java volatile 示例。
在本教程中,我们将讨论 Java `volatile`示例。
## 什么是 Java `volatile`?
Java volatile 关键字用于检查 Java 变量是否为“被存放在基本内存中”。 更具决定性的意义是,将无法从 PC 的主内存中读取每次无法预测的变量,而不是从 CPU 储备中读取,并且每次与不稳定变量保持联系都将与基本内存保持联系,而不是 只需到 CPU 存储。
Java `volatile`关键字用于检查 Java 变量是否为“被存放在基本内存中”。 更具决定性的意义是,将无法从 PC 的主内存中读取每次无法预测的变量,而不是从 CPU 储备中读取,并且每次与不稳定变量保持联系都将与基本内存保持联系,而不是 只需到 CPU 存储。
实际上,由于 Java 5,不稳定的标语确保了除了不可预测因素之外还可以从基本内存中读取内容。 我将在随附领域中对此进行澄清。
## 如何在 Java 中使用`volatile`关键字?
什么是 Java 中的 volatile 变量?何时使用 Java 中的 volatile 变量是 Java 访谈中众所周知的多字符串查询问题? 尽管有许多软件工程师认识到什么是易失性变量,但是他们在第二部分进行了轰炸,例如在 Java 中利用易失性变量的地方很少,因为在 Java 中很少有明确的理解和动手操作的易失性。 在本教学练习中,我们将通过简单说明 Java 中 volatile 变量的情况并检查何时使用 Java 中的 volatile 变量来解决此漏洞。 无论如何,Java 中不可预测的流行语被用作指向 Java 编译器和 Thread 的指针,这些编译器和 Thread 不存储该变量的估计值,而可靠地从主内存中仔细研究了该变量。 因此,如果您需要共享任何因执行而导致读写活动至关重要的因素,例如细读和写 int 或布尔变量,则可以将它们声明为 volatile 变量。
什么是 Java 中的`volatile`变量?何时使用 Java 中的`volatile`变量是 Java 访谈中众所周知的多字符串查询问题? 尽管有许多软件工程师认识到什么是易失性变量,但是他们在第二部分进行了轰炸,例如在 Java 中利用易失性变量的地方很少,因为在 Java 中很少有明确的理解和动手操作的易失性。 在本教学练习中,我们将通过简单说明 Java 中`volatile`变量的情况并检查何时使用 Java 中的`volatile`变量来解决此漏洞。 无论如何,Java 中不可预测的流行语被用作指向 Java 编译器和`Thread`的指针,这些编译器和`Thread`不存储该变量的估计值,而可靠地从主内存中仔细研究了该变量。 因此,如果您需要共享任何因执行而导致读写活动至关重要的因素,例如细读和写`int`或布尔变量,则可以将它们声明为`volatile`变量。
除了 Java 5 以及诸如自动装箱,枚举,泛型和变量争用之类的实际更改之外,Java 还在 Java 内存模型(JMM)中进行了一些调整,从而确保了感知从一个字符串到另一个字符串产生的更改的可能性,就像“以前发生过的事情”一样,它照顾了 出现在一个字符串中的内存组合问题可能“溢出”并被另一字符串看到。
Java volatile 关键字不能与策略或类一起使用,而必须与变量一起使用。 Java volatile 关键字同样确保可感知性和请求,在 Java 5 与任何不稳定变量保持联系之后,再对不稳定变量进行任何读取。 通过 volatile 关键字的路由利用,同样可以预期编译器或 [JVM](https://javatutorial.net/jvm-explained) 从代码的重新排序或移动而不会从同步边界结束它们。
Java `volatile`关键字不能与策略或类一起使用,而必须与变量一起使用。 Java `volatile`关键字同样确保可感知性和请求,在 Java 5 与任何不稳定变量保持联系之后,再对不稳定变量进行任何读取。 通过`volatile`关键字的路由利用,同样可以预期编译器或 [JVM](https://javatutorial.net/jvm-explained) 从代码的重新排序或移动而不会从同步边界结束它们。
```java
/**
......@@ -49,15 +49,15 @@ public static Singleton getInstance(){
2)在主要招募的季节来临时,使我们昏昏欲睡。
如果我们不使 _instance 变量变得比 Thread 更易变,这使 Singleton 无法传递其他字符串,那么这种情况一直到它离开 [Singleton](https://javatutorial.net/java-singleton-design-pattern-example) 正方形为止,所以如果 Thread 一个正在处理的 Singleton 情况,在创建后不久就失去了 CPU,所有其他字符串可能不会观察到 _instance 的估计为无效,因此他们会相信 _instance 仍然无效。
如果我们不使`_instance`变量变得比`Thread`更易变,这使单例无法传递其他字符串,那么这种情况一直到它离开[`Singleton`](https://javatutorial.net/java-singleton-design-pattern-example) 区域为止,所以如果`Thread`一个正在处理的`Singleton`情况,在创建后不久就失去了 CPU,所有其他字符串可能不会观察到`_instance`的估计为无效,因此他们会相信`_instance`仍然无效。
![volatile keyword](img/93a7ec3bc991efd0048e67c54b6e8001.jpg)
Java volatile 示例
Java `volatile`示例
为什么? 由于 Peruser 字符串不做任何保留,并且在作者字符串离开同步的正方形之前,内存不会同步,并且 _instance 的估计在原则上不会刷新。 使用 Java 中的 Volatile 关键字,此问题由 Java 自己负责,并且所有用户字符串均会注意到这种更新。
为什么? 由于`Peruser`字符串不做任何保留,并且在作者字符串离开同步的区域之前,内存不会同步,并且`_instance`的估计在原则上不会刷新。 使用 Java 中的`Volatile`关键字,此问题由 Java 自己负责,并且所有用户字符串均会注意到这种更新。
因此,在摘要中,与 Java 中的同步流行语分开,另外使用 volatile 关键字在字符串之间传递内存的内容。
因此,在摘要中,与 Java 中的同步流行语分开,另外使用`volatile`关键字在字符串之间传递内存的内容。
## `volatile`可见性问题
......@@ -67,7 +67,7 @@ Java 不稳定的流行语确保跨字符串的因素变化的可感知性。
![volatile keyword](img/fec74a0da8bbae76d242c3b6e205d9b9.jpg)
Java volatile 示例
Java `volatile`示例
由于存在非易失性因素,因此没有关于 [Java 虚拟机(JVM)](https://javatutorial.net/jvm-explained)何时将基本存储器中的信息细读到 CPU 存储中或将信息从 CPU 保留区组成的信息写入主存储器的证明。 这可能会引起一些问题,我将在随附的区域中予以澄清。
......
......@@ -18,7 +18,7 @@
不,我不是在谈论现实世界中的容器。 但是,既然您正在考虑它,我不妨作个比喻。 现实生活中的容器的目的是存储需要运输到另一个地方的货物或物品。 现在,这些商品具有不同的存储要求,例如,可能存在牛奶的有效期比例如西红柿短的牛奶。 这就是为什么在现实生活中容器是非常有用的原因–容器保留了内部环境,例如敏感商品和/或物品的温度。 话虽如此,运输业不必担心这些物品,而将重点放在将它们从 A 运送到 B 上。
现在,如果您已经注意了以上段落,那么 Doc​​ker 中的容器就是一回事。 多亏了 Docker 的**容器**,我们可以轻松地将 **容器化应用程序** 组件从一种环境迁移到另一种环境,希望不会出现任何问题。
现在,如果您已经注意了以上段落,那么 Doc​​ker 中的容器就是一回事。 多亏了 Docker 的**容器**,我们可以轻松地将**容器化应用程序**组件从一种环境迁移到另一种环境,希望不会出现任何问题。
就像现实生活中的容器一样,Docker 中的**容器**为我们提供了一个隔离的安全的应用程序组件环境。 与现实生活中的容器相比,应用组件是商品。
......@@ -34,13 +34,13 @@
## 安装 Docker
如果使用 Windows 或 Mac,请在处单击[](https://www.docker.com/products/docker-desktop)
如果使用 Windows 或 Mac,[请单击此处](https://www.docker.com/products/docker-desktop)
安装 Docker 之后,您将拥有以下内容:
1. 用于运行 docker-machine 命令的 Docker Machine
1. 用于运行`docker-machine`命令的 Docker Machine
2. 用于运行 docker 命令的容器引擎
3. Docker Compose 用于运行 docker-compose 命令
3. Docker Compose 用于运行`docker-compose`命令
4. Kitematic,Docker GUI
5. 为 Docker 命令行环境预先配置的 Shell
6. 甲骨文 VirtualBox
......@@ -51,13 +51,13 @@
docker --version
```
要查看更多信息,例如容器,正在运行,已暂停或已停止的容器数,像等,可以键入:
要查看更多信息,例如容器,正在运行,已暂停或已停止的容器数,像等,可以键入:
```java
docker info
```
就是这样! 您的机器上有 Docker。 要编写一个简单的 hello world“程序”,可以键入以下内容:
就是这样! 您的机器上有 Docker。 要编写一个简单的 hello world “程序”,可以键入以下内容:
```java
docker run hello-world
......
......@@ -14,7 +14,7 @@
社区下载 MySQL
在下一页上,您将看到许多列表。 我们感兴趣的是 **MySQL Community 服务器****Connector / J** ,其中 J 代表 Java。
在下一页上,您将看到许多列表。 我们感兴趣的是 **MySQL 社区服务器****Connector/J** ,其中 J 代表 Java。
![Community server and Java development MySQL](img/f144b5b6c5eae479f38a45a033ac9e3d.jpg)
......@@ -22,15 +22,15 @@
## 配置 MySQL 服务器
从下载页面单击 MySQL Community Server 之后,您可以看到不同的安装选项。 选择您的选项并下载。 如果要下载 MSI 安装程序,请单击“转到下载页面”:
从下载页面单击“MySQL Community Server”之后,您可以看到不同的安装选项。 选择您的选项并下载。 如果要下载 MSI 安装程序,请单击“转到下载页面”:
![Download Page MySQL](img/318501579e6b4b5e413fba18672a66f9.jpg)
然后,在下一页上,选择 mysql-installer-community
然后,在下一页上,选择`mysql-installer-community`
![MSI installer MySQL](img/3e9abdcc1bcaf6e017f637a5ef1434d7.jpg)
这将下载一个可执行文件。 下载完成后,双击文件,您将看到安装界面。 接受许可条款和条件后,您将看到子窗口“ **选择安装类型**”。 单击“自定义”,因为我们不需要所有 MySQL 产品。 更具体地说,我们只需要“ MySQL Server – X64”和“ MySQL Workbench – X64”。
这将下载一个可执行文件。 下载完成后,双击文件,您将看到安装界面。 接受许可条款和条件后,您将看到子窗口“**选择安装类型**”。 单击“自定义”,因为我们不需要所有 MySQL 产品。 更具体地说,我们只需要“MySQL Server – X64”和“MySQL Workbench – X64”。
![Products and Features to be installed MySQL](img/675f7f64d554ada764f839632689f9aa.jpg)
......
......@@ -4,14 +4,14 @@
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
在通过 Java 程序测试 MySQL 连接之前,我们需要将 MySQL JDBC 库添加到类路径中。 我们将需要从[下载页面](https://dev.mysql.com/downloads/connector/j/5.1.html)下载 mysql-connector-java-*。jar 文件:
在通过 Java 程序测试 MySQL 连接之前,我们需要将 MySQL JDBC 库添加到类路径中。 我们将需要从[下载页面](https://dev.mysql.com/downloads/connector/j/5.1.html)下载`mysql-connector-java-*.jar`文件:
![Jar file downloads page mySQl for Java](img/d4f148377113c3991b0e0a18b3550d53.jpg)
现在,根据您的工作环境(例如 Eclipse 或命令行),您将必须执行以下任一操作:
1. 如果使用 Eclipse IDE,请将 JAR 文件作为库添加到项目属性中的“构建路径”。
2. 如果使用命令控制台,请在执行应用程序时在-cp 或-classpath 参数中指定 JAR 文件的路径。
2. 如果使用命令控制台,请在执行应用程序时在`-cp``-classpath`参数中指定 JAR 文件的路径。
命令行执行的示例如下所示:
......@@ -21,7 +21,7 @@ java -cp .;/xxx/xxx/xxx/mysql-connector-java-*.jar com.nameapp.ClassName
现在我们已经澄清了这一点,让我们从 Java 类连接到 MySQL 数据库。
在 Eclipse 中创建项目,然后右键单击项目名称并选择**属性**。 之后,导航到“ Java 构建路径”并通过单击“添加外部 JAR ..”添加.jar 文件。 您可以查看以下图像以显示步骤:
在 Eclipse 中创建项目,然后右键单击项目名称并选择“属性”。 之后,导航到“Java 构建路径”并通过单击“添加外部 JAR ..”添加`.jar`文件。 您可以查看以下图像以显示步骤:
(1)
......@@ -51,7 +51,7 @@ show databases;
![show databases mysql java spring](img/f17b47c35b3221310afbf3723fa0fe15.jpg)
如您所见,“ demoapp”显示为数据库。
如您所见,`demoapp`显示为数据库。
现在,最后一步是测试 Java 类与该数据库的连接。
......@@ -87,13 +87,14 @@ public class App
```
**输出:
![Connection established successfully mysql java](img/278c0e9aaa622d0056733ce22bed4a26.jpg)**
**输出:**
![Connection established successfully mysql java](img/278c0e9aaa622d0056733ce22bed4a26.jpg)
现在忽略警告。
**细分**
我们将本地主机的 url 存储在一个名为“ url”的变量中。 **jdbc** 部分是 API, **demoapp** 是数据库的名称。 然后,我们存储用户名和密码。 这里的主要注意事项是,密码必须与安装 MySQL 时选择的密码相同。 之后,我们有一个 Try {} Catch {}块。 如果无法建立数据库连接,则将执行 catch 块。 在 try 块中,我们获得 url 和用户名/密码的连接。 之后,我们只需打印“连接成功建立!”。
我们将本地主机的 url 存储在一个名为`url`的变量中。`jdbc`部分是 API,`demoapp`是数据库的名称。 然后,我们存储用户名和密码。 这里的主要注意事项是,密码必须与安装 MySQL 时选择的密码相同。 之后,我们有一个`Try {} Catch {}`块。 如果无法建立数据库连接,则将执行`catch`块。 在`try`块中,我们获得 url 和用户名/密码的连接。 之后,我们只需打印“连接成功建立!”。
只是一件事-如果您忘记在项目的构建路径中添加.jar 文件,则将无法建立连接,并且 **catch 块**将被执行。 因此,请不要忘记添加 JAR 文件,这一点非常重要。
\ No newline at end of file
只是一件事 - 如果您忘记在项目的构建路径中添加`.jar`文件,则将无法建立连接,并且`catch`块将被执行。 因此,请不要忘记添加 JAR 文件,这一点非常重要。
\ No newline at end of file
......@@ -2,28 +2,30 @@
> 原文: [https://javatutorial.net/how-to-debug-java-with-eclipse](https://javatutorial.net/how-to-debug-java-with-eclipse)
调试–一种使用最多且不可避免的技术。 如果只有一种工具可以使我们使这个有时繁琐的任务变得更加轻松和不那么繁琐……等等。 有。
调试–一种使用最多且不可避免的技术。 如果只有一种工具可以使我们使这个有时繁琐的任务变得更加轻松和不那么繁琐……等等。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
Eclipse 允许在所谓的 **Debug 模式**中启动 Java 程序。 最有用的是它允许您使用调试命令来控制执行流程。
Eclipse 允许在所谓的**调试模式**中启动 Java 程序。 最有用的是它允许您使用调试命令来控制执行流程。
您可以设置行断点,条件断点和/或异常断点。
## 开始调试过程
要在代码中初始化一个断点,请在 Java 编辑器中右键单击左边界,然后选择 Toggle Breakpoint,,如下所示:
要在代码中初始化一个断点,请在 Java 编辑器中右键单击左边界,然后选择“Toggle Breakpoint”,如下所示:
![Setting a breakpoint in java using debugger](img/85e09c9f5e4dd84e41ce7806341d8039.jpg)
您还可以做的是(我想这是一种较快的方法)再次双击左边缘(红色箭头指向的位置)。 无论哪种方法适合您,它们都是完全相同的方法。
就我而言,我在 for 循环的开头添加了一个断点:
就我而言,我在`for`循环的开头添加了一个断点
![Setting a Breakpoint at For Loop](img/0ee42e8e2f40cc82c6bc21f938f7ee37.jpg)
现在是时候在“调试”模式下运行程序了。 有 3 种方法:
* 单击主菜单中的“运行”命令,然后选择“调试”
* F11
*`F11`
* 单击顶部面板上的类似 bug 的图标,然后选择“调试为 Java 应用程序”
![Debug As](img/a30ad8244d8b13a4789458518d1dd699.jpg)
......@@ -32,11 +34,11 @@ Eclipse 允许在所谓的 **Debug 模式**中启动 Java 程序。 最有用的
![Confirming Debug As](img/5115b31f2ce9dd16cb326711f29cc499.jpg)
从上方的图片中选择“ Java 应用程序”后,将提示此屏幕。 单击确定
从上方的图片中选择“Java 应用程序”后,将提示此屏幕。 单击“确定”
![Confirm Perspective Switch](img/829ad1803cea7e9714b14aa0c4101a69.jpg)
之所以会调用此窗口,是因为 Eclipse 想知道在到达停止点后是否要切换到 Debug 透视图。 点击“切换”。
之所以会调用此窗口,是因为 Eclipse 想知道在到达停止点后是否要切换到调试透视图。 点击“切换”。
## 控制调试过程
......@@ -45,21 +47,23 @@ Eclipse 允许在所谓的 **Debug 模式**中启动 Java 程序。 最有用的
![toolbar menu debugger](img/345352678222f19c3e873885773486e1.jpg)
但是,您也可以使用以下键绑定:
![Resume toolbar button](img/9e60be2bbe53df51b7806c39a4929160.jpg):此按钮的作用是恢复程序的执行,直到到达下一个断点。**(F8)**
![Terminate toolbar button](img/af4a2a944fc9c87553e6e062e6476fbd.jpg):终止当前正在运行的服务器,而不是蚀**(CTRL + F2)**
![Resume toolbar button](img/9e60be2bbe53df51b7806c39a4929160.jpg):此按钮的作用是恢复程序的执行,直到到达下一个断点。**(`F8`)**
![Terminate toolbar button](img/af4a2a944fc9c87553e6e062e6476fbd.jpg):终止当前正在运行的服务器,而不是 Eclipse。**(`CTRL + F2`)**
![F5 toolbar menu](img/5f87ea4995ce37647f34ba35236f0ff7.jpg):执行当前突出显示的行并跳过下一行。 重要的是要注意,如果当前突出显示的行是函数调用,则调试器将进入功能**(F5)**
![F5 toolbar menu](img/5f87ea4995ce37647f34ba35236f0ff7.jpg):执行当前突出显示的行并跳过下一行。 重要的是要注意,如果当前突出显示的行是函数调用,则调试器将进入功能**(`F5`)**
![F6 toolbar menu](img/d6b9f9aec9fd9e2d7753e495acc9f330.jpg):执行一种方法,而调试器实际上不会进入该方法,也称为“跳过” **(F6)**
![F6 toolbar menu](img/d6b9f9aec9fd9e2d7753e495acc9f330.jpg):执行一种方法,而调试器实际上不会进入该方法,也称为“跳过”**(`F6`)**
![F7 toolbar menu](img/4b84a4e58a2146b3ce2f506309d3cb78.jpg):完成当前方法的执行并跳回到该方法的调用者。**(F7)**
![F7 toolbar menu](img/4b84a4e58a2146b3ce2f506309d3cb78.jpg):完成当前方法的执行并跳回到该方法的调用者。**(`F7`)**
#### 调试视图
![Debug view](img/65a83db52053ca2e63df4302d8c05e32.jpg)
#### 变量&表达式视图
![Variables view](img/392fbe7471cd4fc8984bb461641705e7.jpg)
![Expression view](img/780260403078a225d12a6de2c7ad6cb5.jpg)
......@@ -80,25 +84,25 @@ Eclipse 允许在所谓的 **Debug 模式**中启动 Java 程序。 最有用的
### 使用这些视图的简单示例
从上面的代码的第 6 行开始(从 for 循环开始),单击 F5 后,我们得到以下结果:
从上面的代码的第 6 行开始(从`for`循环开始),单击`F5`后,我们得到以下结果:
![Step 1](img/37a32d0a2db0add02553a8a75b7b545b.jpg)
因此,点击 F5 后,我们进入循环(第 7 行),如果您查看“变量”视图,则会看到“ i”已初始化为 0(第 6 行)。
因此,点击`F5`后,我们进入循环(第 7 行),如果您查看“变量”视图,则会看到`i`已初始化为 0(第 6 行)。
现在,让我们再次单击 F5
现在,让我们再次单击`F5`
![Step 2 debugger process](img/6b488729a32e9bc1ba265f45d71e72ba.jpg)
没什么变化,因为我们在 exampleVariable 中添加了 1,仅此而已。 现在我们在第 8 行,让我们单击 F5 看看会发生什么。
没什么变化,因为我们在`exampleVariable`中添加了 1,仅此而已。 现在我们在第 8 行,让我们单击`F5`看看会发生什么。
![Step 3 debugger process](img/dec23ad35e2003d21061f808ff4a61d2.jpg)
我们得到了第一输出! 那是因为我们运行了 System.out.println()语句。 当我按 F5 键时,您认为现在会发生什么?
我们得到了第一输出! 那是因为我们运行了`System.out.println()`语句。 当我按`F5`键时,您认为现在会发生什么?
![Step 4 debugger process](img/41e612e64856d6c0f39983658c5c6e6e.jpg)
如果您说“ i”将更改为 1,那么您将是对的! 您可以在右侧看到“ i”随着其值的变化而突出显示。
如果您说`i`将更改为 1,那么您将是对的! 您可以在右侧看到`i`随着其值的变化而突出显示。
那是调试的基本过程。
......@@ -109,9 +113,10 @@ Eclipse 允许在所谓的 **Debug 模式**中启动 Java 程序。 最有用的
与断点不同,观察点用于在文件字段的值发生更改(不指定要更改)时停止执行复制。
您可以通过在“断点属性”中指定监视点来轻松启用监视点。 要访问断点属性,请右键单击您在代码左侧放置的断点,然后选择“断点属性”,如下所示:
![Breakpoint properties](img/52c9936b8bc8078df5ae969215713498.jpg)
然后,您有两个选择。 您可以勾选“视情况而定”,然后选择“在'true'时暂停”或“在值更改时暂停”。 甚至,您可以在下面的空间中指定一个条件,如果条件为 true,它将终止终止。
然后,您有两个选择。 您可以勾选“视情况而定”,然后选择“在‘true’时暂停”或“在值更改时暂停”。 甚至,您可以在下面的空间中指定一个条件,如果条件为`true`,它将终止终止。
![Suspend when 'true'](img/b1df8a89826a372762e003251bf5b71b.jpg)
......
......@@ -2,25 +2,25 @@
> 原文: [https://javatutorial.net/set-java-home-windows-10](https://javatutorial.net/set-java-home-windows-10)
在本教程中,我将向您展示如何**在 **Windows 10** 操作系统中将 JAVA_HOME** 设置为环境变量。
在本教程中,我将向您展示如何**Windows 10** 操作系统中将`JAVA_HOME`设置为环境变量。
## 为什么需要设置`JAVA_HOME`?
许多基于 Java 的程序(例如 Tomcat)都要求将 JAVA_HOME 设置为环境变量才能正常工作。 请注意 JAVA_HOME 应该指向一个 JDK 目录而不是 JRE 目录。 设置环境变量的目的是让程序知道可以在其中找到诸如 javac 之类的目录可执行文件。
许多基于 Java 的程序(例如 Tomcat)都要求将`JAVA_HOME`设置为环境变量才能正常工作。 请注意`JAVA_HOME`应该指向一个 JDK 目录而不是 JRE 目录。 设置环境变量的目的是让程序知道可以在其中找到诸如`javac`之类的目录可执行文件。
## 1.打开高级系统设置
在 Windows 10 中,按 Windows 键+暂停键,这将打开“系统设置”窗口。 转到`Change settings`并选择`Advanced`标签。
在 Windows 10 中,按`Win+Pause`键,这将打开“系统设置”窗口。 转到`Change settings`并选择`Advanced`标签。
**或者:**
打开“ Windows 搜索” –您会在 Windows 徽标旁边找到它
打开“Windows 搜索” – 您会在 Windows 徽标旁边找到它
![open Windows10 search](img/bad6d50665d93d58c5593a416e094d2d.jpg)
打开 Windows 10 搜索
1.在搜索字段中输入– `advanced system settings`
1.在搜索字段中输入 `advanced system settings`
2.单击列表顶部的匹配项
......@@ -36,11 +36,11 @@
系统属性窗口环境变量
在“系统变量”下,单击“新建…”按钮,然后输入 JAVA_HOME 作为“变量名称”,并在“变量值”下输入 Java JDK 目录的路径。
在“系统变量”下,单击“新建…”按钮,然后输入`JAVA_HOME`作为“变量名称”,并在“变量值”下输入 Java JDK 目录的路径。
![Add JAVA_HOME as system variable](img/44e135a2e1716c575481b109c1f77974.jpg)
JAVA_HOME 添加为系统变量
`JAVA_HOME`添加为系统变量
## 3.更新系统路径
......@@ -64,7 +64,7 @@
echo %JAVA_HOME%
```
如果环境变量设置不正确,它将打印出目录 JAVA_HOME 指向的目录或为空行
如果环境变量设置不正确,它将打印出目录`JAVA_HOME`指向的目录或为空行
现在输入:
......@@ -72,8 +72,8 @@ echo %JAVA_HOME%
javac -version
```
如果正确设置了 Path 变量或“无法将 javac 识别为内部或外部命令…”,则将打印出 Java 编译器的版本…否则为
如果正确设置了`Path`变量,则将打印出 Java 编译器的版本,否则为“无法将`javac`识别为内部或外部命令…”
![Test JAVA_HOME and system path](img/be9ca2a22373dec589bda99569efcdec.jpg)
测试 JAVA_HOME 和系统路径
\ No newline at end of file
测试`JAVA_HOME`和系统路径
\ No newline at end of file
......@@ -12,7 +12,7 @@
JavaBeans 由 Sun Microsystem 于 1996 年引入,其定义为
**“ JavaBean 是可重用的,平台无关的组件,可以在构建器工具中直观地对其进行操作。”**
**“JavaBean 是可重用的,平台无关的组件,可以在构建器工具中直观地对其进行操作。”**
在计算中,基于 Java 平台的 JavaBean 是将许多对象封装为单个对象(bean)的类。 使用 Builder 工具,您可以创建和使用 bean 来进行应用程序开发。 简单来说,JavaBean 就是 Java 类。 在其他应用程序中使用这些 JavaBean 时,这些组件的内部工作对应用程序开发人员来说是隐藏的。
......@@ -26,15 +26,15 @@ JavaBean
## JavaBeans 的组件
包含 bean 定义的类称为 JavaBeans 组件。 这些类遵循某些设计约定。 它包括属性,事件,方法和持久性。 有两种类型的组件,基于 GUI 和非基于 GUI。 例如,JButton 是组件的示例,而不是类。
包含 bean 定义的类称为 JavaBeans 组件。 这些类遵循某些设计约定。 它包括属性,事件,方法和持久性。 有两种类型的组件,基于 GUI 和非基于 GUI。 例如,`JButton`是组件的示例,而不是类。
**属性(日期成员):**属性是 Bean 的命名属性,它包括颜色,标签,字体,字体大小,显示大小。 它确定 bean 的外观,行为和状态。
**属性(日期成员)**属性是 Bean 的命名属性,它包括颜色,标签,字体,字体大小,显示大小。 它确定 bean 的外观,行为和状态。
**方法:** JavaBean 中的方法与类中的常规 Java 方法相同。 它没有遵循任何特定的命名约定。 所有属性都应具有 accessor 和 getter 方法。
**方法**:JavaBean 中的方法与类中的常规 Java 方法相同。 它没有遵循任何特定的命名约定。 所有属性都应具有 setter 和 getter 方法。
**事件:JavaBean 中的**事件与 SWING / AWT 事件处理相同。
**事件**:JavaBean 中的事件与 SWING/AWT 事件处理相同。
**持久性:**可序列化的接口使 JavaBean 可以存储其状态。
**持久性**可序列化的接口使 JavaBean 可以存储其状态。
JavaBean 没有参数构造函数。
......@@ -44,11 +44,11 @@ JavaBean 组件
## JavaBeans 属性
对象的用户可以访问 JavaBean 属性,它可以被读取,写入,只读或仅写入。 我们可以借助在 bean 的实现类中编写的 getPropertyName()方法(也称为 getter 或 accessor)和 setPropertyName()方法(即 setter)来访问这些 JavaBeans 属性。
对象的用户可以访问 JavaBean 属性,它可以被读取,写入,只读或仅写入。 我们可以借助在 bean 的实现类中编写的`getPropertyName()`方法(也称为 getter 或 accessor)和`setPropertyName()`方法(即 setter)来访问这些 JavaBeans 属性。
**GetPropertyName():**例如,如果属性名称为标题,则您的方法名称为 geTitle()
`GetPropertyName()`:例如,如果属性名称为标题,则您的方法名称为`geTitle()`
**SetPropertyName():**例如,如果属性名称为标题,则您的方法名称将为 setTitle()
`SetPropertyName()`:例如,如果属性名称为标题,则您的方法名称将为`setTitle()`
## JavaBeans 的示例
......
......@@ -13,6 +13,7 @@ Tomcat 的主要优点是占地面积小,配置简单以及社区参与的历
下表显示了 Tomcat 版本及其规格
| Tomcat 版本 | Servlet | JSP | EL | WebSocket | 所需的最低 Java 版本 |
| --- | --- | --- | --- | --- | --- |
| 3.3.x | 2.2 | 1.1 | – | – | 1.1 |
| 4.1.x | 2.3 | 1.2 | – | – | 1.3 |
| 5.5.x | 2.4 | 2.0 | – | – | 1.4 |
......@@ -22,7 +23,7 @@ Tomcat 的主要优点是占地面积小,配置简单以及社区参与的历
## 下载 Tomcat
转到 [http://tomcat.apache.org/download-80.cgi](http://tomcat.apache.org/download-80.cgi) 并向下滚动到“二进制发行版”->核心”。 对于 Windows,您可以在服务安装程序或 32 位或 64 位 ZIP 版本之间进行选择。 如果您想将 Tomcat 作为 Windows 服务运行而不是安装程序,那么如果要手动运行服务器或与 IDE 集成,请选择 ZIP 下载。
转到 [http://tomcat.apache.org/download-80.cgi](http://tomcat.apache.org/download-80.cgi) 并向下滚动到“二进制发行版 -> 核心”。 对于 Windows,您可以在服务安装程序或 32 位或 64 位 ZIP 版本之间进行选择。 如果您想将 Tomcat 作为 Windows 服务运行而不是安装程序,那么如果要手动运行服务器或与 IDE 集成,请选择 ZIP 下载。
如果您在 Linux 或 OSX 上运行,请下载非 Windows zip,即 zip。
......@@ -30,7 +31,7 @@ Tomcat 的主要优点是占地面积小,配置简单以及社区参与的历
Tomcat 管理器使您可以轻松管理应用程序并监视服务器状态。
要启用它,请在您喜欢的文本编辑器中打开文件` conf/tomcat-users.xml`,然后在`<tomcat-users>``</tomcat-users>`标签之间放置以下行:
要启用它,请在您喜欢的文本编辑器中打开文件`conf/tomcat-users.xml`,然后在`<tomcat-users>``</tomcat-users>`标签之间放置以下行:
```java
<user username="admin" password="admin" roles="manager-gui,admin-gui" />
......@@ -38,11 +39,11 @@ Tomcat 管理器使您可以轻松管理应用程序并监视服务器状态。
当然,您可以根据需要设置用户名和密码。
启动服务器后,可以在 http:// localhost:8080 / manager 下访问管理器应用程序。
启动服务器后,可以在`http://localhost:8080/manager`下访问管理器应用程序。
## 更改 Servlet 编译器以使用 Java 8
默认情况下,即使 Tomcat 8.0 在 Java SE 8 上运行,它也会编译具有 Java SE 6 语言支持的 JavaServer Pages(JSP)。您可以在`conf/web.xml`文件中更改此设置。 在文件中搜索文本`org.apache.jasper.servlet.JspServlet`。 包含此文本的标签下方是两个`&lt;init-param&gt;`标签。 将两个值都从 1.6 更改为 1.8
默认情况下,即使 Tomcat 8.0 在 Java SE 8 上运行,它也会编译具有 Java SE 6 语言支持的 JavaServer Pages(JSP)。您可以在`conf/web.xml`文件中更改此设置。 在文件中搜索文本`org.apache.jasper.servlet.JspServlet`。 包含此文本的标签下方是两个`<init-param>`标签。 将两个值都从 1.6 更改为 1.8
```java
<init-param>
......@@ -57,10 +58,10 @@ Tomcat 管理器使您可以轻松管理应用程序并监视服务器状态。
## 如何启动和停止 Tomcat 服务器
完成所有配置后,需要启动 Tomcat 才能使用它。 如果您使用 Windows 作为托管 OS,则可能需要先阅读本教程[如何在 Windows 10](https://javatutorial.net/set-java-home-windows-10) 中设置 JAVA_HOME,然后再继续启动 Tomcat 服务器。
完成所有配置后,需要启动 Tomcat 才能使用它。 如果您使用 Windows 作为托管 OS,则可能需要先阅读本教程[如何在 Windows 10](https://javatutorial.net/set-java-home-windows-10) 中设置`JAVA_HOME`,然后再继续启动 Tomcat 服务器。
启动 Tomcat 很容易,只需进入`/bin`文件夹并为 Windows 执行`startup.bat`或为 Linux 或 OSX 运行`startup.sh`
您还可以选择从 Eclipse IDE 中启动 tomcat。 请参考本教程,以获取有关[如何从 eclipse 配置和运行 Tomcat 的更多信息](https://javatutorial.net/run-tomcat-from-eclipse)
您还可以选择从 Eclipse IDE 中启动 tomcat。 请参考本教程,以获取有关[如何从 eclipse 配置和运行 Tomcat 的更多信息](https://javatutorial.net/run-tomcat-from-eclipse)
要停止 Tomcat,请在 Windows 操作系统上执行`shutdown.bat`,在 Linux 或 OSX 系统上执行`shutdown.sh`
\ No newline at end of file
......@@ -97,7 +97,7 @@ Glassfish JDBC 资源
Glassfish 创建新的 JDBC 资源
而已! 现在,您可以将 MySQL 数据库与在 Glassfish 服务器上部署的应用程序一起使用了。
好的! 现在,您可以将 MySQL 数据库与在 Glassfish 服务器上部署的应用程序一起使用了。
## 替代配置方法
......
......@@ -236,7 +236,7 @@ public class FileUploadService {
</web-app>
```
而已! 现在,您可以构建和部署 WAR 文件。 如果您使用上面代码中提供的完全相同的名称,则您的服务 URL(假设您在 localhost 上运行)将是: http:// localhost:8080 / FileUploaderRESTService-1 / rest / upload
好的! 现在,您可以构建和部署 WAR 文件。 如果您使用上面代码中提供的完全相同的名称,则您的服务 URL(假设您在 localhost 上运行)将是: http:// localhost:8080 / FileUploaderRESTService-1 / rest / upload
## 文件上传 HTML 表格
......
......@@ -58,7 +58,7 @@ sudo raspi-config
密码为:树莓
而已! 如果需要,现在可以通过键入以下内容来启动图形界面 GUI:
好的! 如果需要,现在可以通过键入以下内容来启动图形界面 GUI:
```java
startx
......
......@@ -46,7 +46,7 @@ PuTTY 是 Windows 的免费 SSH 客户端。 [从官方页面下载](http://www.
![putty-login](img/b98094864984c97809c0e6d974580300.jpg)
而已! 现在您已连接,您可以执行所需的任何 linux 命令。
好的! 现在您已连接,您可以执行所需的任何 linux 命令。
注意:我建议从路由器为 Raspberry 分配一个静态 IP。 这样,您无需在路由器每次为其分配新 IP 时检查 Raspberry 的 IP。
......
......@@ -50,7 +50,7 @@ Java 有多种可用的测试框架,但是,在本教程中,我们将重点
![Test class example](img/0f3a5e694b2885b1685d342f2c3e7ac1.jpg)
而已! 我们只在`exmipeMethod`方法上运行了 2 个测试。
好的! 我们只在`exmipeMethod`方法上运行了 2 个测试。
### 分解
......
......@@ -188,6 +188,6 @@
![Java maven install war file cmd eclipse clean install build](img/ccbb472243ff045ace7419d27d5ee877.jpg)
而已! 我们已经成功使用 Eclipse 和 Terminal 生成了 WAR 文件。
好的! 我们已经成功使用 Eclipse 和 Terminal 生成了 WAR 文件。
如果您有兴趣生成 JAR 文件,我已经有关于该主题的文章。 您可以通过[单击此处](https://javatutorial.net/how-to-create-java-jar-file-with-maven)来遵循它。
\ No newline at end of file
......@@ -84,6 +84,6 @@ public class MyClass {
![eclipse run result](img/23f9e3264b2383914690ed65f0f947e7.jpg)
而已! 我告诉过你它将变得轻松有趣
好的! 我告诉过你它将变得轻松有趣
在我们的下一个教程中,我将向您展示如何在 Eclipse 中使用[快捷键和组合键](https://javatutorial.net/eclipse-shortcuts)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册