最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì)

 更新時(shí)間:2019年07月17日 09:26:39   作者:江南一點(diǎn)雨  
這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

郵件發(fā)送其實(shí)是一個(gè)非常常見(jiàn)的需求,用戶注冊(cè),找回密碼等地方,都會(huì)用到,使用 JavaSE 代碼發(fā)送郵件,步驟還是挺繁瑣的,Spring Boot 中對(duì)于郵件發(fā)送,提供了相關(guān)的自動(dòng)化配置類,使得郵件發(fā)送變得非常容易,本文我們就來(lái)一探究竟!看看使用 Spring Boot 發(fā)送郵件的 5 中姿勢(shì)。

郵件基礎(chǔ)

我們經(jīng)常會(huì)聽(tīng)到各種各樣的郵件協(xié)議,比如 SMTP、POP3、IMAP ,那么這些協(xié)議有什么作用,有什么區(qū)別?我們先來(lái)討論一下這個(gè)問(wèn)題。

SMTP 是一個(gè)基于 TCP/IP 的應(yīng)用層協(xié)議,江湖地位有點(diǎn)類似于 HTTP,SMTP 服務(wù)器默認(rèn)監(jiān)聽(tīng)的端口號(hào)為 25 。看到這里,小伙伴們可能會(huì)想到既然 SMTP 協(xié)議是基于 TCP/IP 的應(yīng)用層協(xié)議,那么我是不是也可以通過(guò) Socket 發(fā)送一封郵件呢?回答是肯定的。

生活中我們投遞一封郵件要經(jīng)過(guò)如下幾個(gè)步驟:

  1. 深圳的小王先將郵件投遞到深圳的郵局
  2. 深圳的郵局將郵件運(yùn)送到上海的郵局
  3. 上海的小張來(lái)郵局取郵件

這是一個(gè)縮減版的生活中郵件發(fā)送過(guò)程。這三個(gè)步驟可以分別對(duì)應(yīng)我們的郵件發(fā)送過(guò)程,假設(shè)從 aaa@qq.com 發(fā)送郵件到 111@163.com :

  1. aaa@qq.com 先將郵件投遞到騰訊的郵件服務(wù)器
  2. 騰訊的郵件服務(wù)器將我們的郵件投遞到網(wǎng)易的郵件服務(wù)器
  3. 111@163.com 登錄網(wǎng)易的郵件服務(wù)器查看郵件

郵件投遞大致就是這個(gè)過(guò)程,這個(gè)過(guò)程就涉及到了多個(gè)協(xié)議,我們來(lái)分別看一下。

SMTP 協(xié)議全稱為 Simple Mail Transfer Protocol,譯作簡(jiǎn)單郵件傳輸協(xié)議,它定義了郵件客戶端軟件與 SMTP 服務(wù)器之間,以及 SMTP 服務(wù)器與 SMTP 服務(wù)器之間的通信規(guī)則。

也就是說(shuō) aaa@qq.com 用戶先將郵件投遞到騰訊的 SMTP 服務(wù)器這個(gè)過(guò)程就使用了 SMTP 協(xié)議,然后騰訊的 SMTP 服務(wù)器將郵件投遞到網(wǎng)易的 SMTP 服務(wù)器這個(gè)過(guò)程也依然使用了 SMTP 協(xié)議,SMTP 服務(wù)器就是用來(lái)收郵件。

而 POP3 協(xié)議全稱為 Post Office Protocol ,譯作郵局協(xié)議,它定義了郵件客戶端與 POP3 服務(wù)器之間的通信規(guī)則,那么該協(xié)議在什么場(chǎng)景下會(huì)用到呢?當(dāng)郵件到達(dá)網(wǎng)易的 SMTP 服務(wù)器之后, 111@163.com 用戶需要登錄服務(wù)器查看郵件,這個(gè)時(shí)候就該協(xié)議就用上了:郵件服務(wù)商都會(huì)為每一個(gè)用戶提供專門(mén)的郵件存儲(chǔ)空間,SMTP 服務(wù)器收到郵件之后,就將郵件保存到相應(yīng)用戶的郵件存儲(chǔ)空間中,如果用戶要讀取郵件,就需要通過(guò)郵件服務(wù)商的 POP3 郵件服務(wù)器來(lái)完成。

最后,可能也有小伙伴們聽(tīng)說(shuō)過(guò) IMAP 協(xié)議,這個(gè)協(xié)議是對(duì) POP3 協(xié)議的擴(kuò)展,功能更強(qiáng),作用類似,這里不再贅述。

準(zhǔn)備工作

目前國(guó)內(nèi)大部分的郵件服務(wù)商都不允許直接使用用戶名/密碼的方式來(lái)在代碼中發(fā)送郵件,都是要先申請(qǐng)授權(quán)碼,這里以 QQ 郵箱為例,向大家演示授權(quán)碼的申請(qǐng)流程:首先我們需要先登錄 QQ 郵箱網(wǎng)頁(yè)版,點(diǎn)擊上方的設(shè)置按鈕:

然后點(diǎn)擊賬戶選項(xiàng)卡:

在賬戶選項(xiàng)卡中找到開(kāi)啟POP3/SMTP選項(xiàng),如下:

點(diǎn)擊開(kāi)啟,開(kāi)啟相關(guān)功能,開(kāi)啟過(guò)程需要手機(jī)號(hào)碼驗(yàn)證,按照步驟操作即可,不贅述。開(kāi)啟成功之后,即可獲取一個(gè)授權(quán)碼,將該號(hào)碼保存好,一會(huì)使用。

項(xiàng)目創(chuàng)建

接下來(lái),我們就可以創(chuàng)建項(xiàng)目了,Spring Boot 中,對(duì)于郵件發(fā)送提供了自動(dòng)配置類,開(kāi)發(fā)者只需要加入相關(guān)依賴,然后配置一下郵箱的基本信息,就可以發(fā)送郵件了。

首先創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,引入郵件發(fā)送依賴:

創(chuàng)建完成后,項(xiàng)目依賴如下:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

配置郵箱基本信息

項(xiàng)目創(chuàng)建成功后,接下來(lái)在 application.properties 中配置郵箱的基本信息:

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=1510161612@qq.com
spring.mail.password=ubknfzhjkhrbbabe
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true

配置含義分別如下:

  • 配置 SMTP 服務(wù)器地址
  • SMTP 服務(wù)器的端口
  • 配置郵箱用戶名
  • 配置密碼,注意,不是真正的密碼,而是剛剛申請(qǐng)到的授權(quán)碼
  • 默認(rèn)的郵件編碼
  • 配飾 SSL 加密工廠
  • 表示開(kāi)啟 DEBUG 模式,這樣,郵件發(fā)送過(guò)程的日志會(huì)在控制臺(tái)打印出來(lái),方便排查錯(cuò)誤

如果不知道 smtp 服務(wù)器的端口或者地址的的話,可以參考 騰訊的郵箱文檔

https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=371

做完這些之后,Spring Boot 就會(huì)自動(dòng)幫我們配置好郵件發(fā)送類,相關(guān)的配置在 org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration 類中,部分源碼如下:

@Configuration
@ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })
@ConditionalOnMissingBean(MailSender.class)
@Conditional(MailSenderCondition.class)
@EnableConfigurationProperties(MailProperties.class)
@Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
public class MailSenderAutoConfiguration {
}

從這段代碼中,可以看到,導(dǎo)入了另外一個(gè)配置 MailSenderPropertiesConfiguration 類,這個(gè)類中,提供了郵件發(fā)送相關(guān)的工具類:

@Configuration
@ConditionalOnProperty(prefix = "spring.mail", name = "host")
class MailSenderPropertiesConfiguration {
 private final MailProperties properties;
 MailSenderPropertiesConfiguration(MailProperties properties) {
  this.properties = properties;
 }
 @Bean
 @ConditionalOnMissingBean
 public JavaMailSenderImpl mailSender() {
  JavaMailSenderImpl sender = new JavaMailSenderImpl();
  applyProperties(sender);
  return sender;
 }
}

可以看到,這里創(chuàng)建了一個(gè) JavaMailSenderImpl 的實(shí)例, JavaMailSenderImpl 是 JavaMailSender 的一個(gè)實(shí)現(xiàn),我們將使用 JavaMailSenderImpl 來(lái)完成郵件的發(fā)送工作。

做完如上兩步,郵件發(fā)送的準(zhǔn)備工作就算是完成了,接下來(lái)就可以直接發(fā)送郵件了。

具體的發(fā)送,有 5 種不同的方式,我們一個(gè)一個(gè)來(lái)看。

發(fā)送簡(jiǎn)單郵件

簡(jiǎn)單郵件就是指郵件內(nèi)容是一個(gè)普通的文本文檔:

@Autowired
JavaMailSender javaMailSender;
@Test
public void sendSimpleMail() {
 SimpleMailMessage message = new SimpleMailMessage();
 message.setSubject("這是一封測(cè)試郵件");
 message.setFrom("1510161612@qq.com");
 message.setTo("25xxxxx755@qq.com");
 message.setCc("37xxxxx37@qq.com");
 message.setBcc("14xxxxx098@qq.com");
 message.setSentDate(new Date());
 message.setText("這是測(cè)試郵件的正文");
 javaMailSender.send(message);
}

從上往下,代碼含義分別如下:

  1. 構(gòu)建一個(gè)郵件對(duì)象
  2. 設(shè)置郵件主題
  3. 設(shè)置郵件發(fā)送者
  4. 設(shè)置郵件接收者,可以有多個(gè)接收者
  5. 設(shè)置郵件抄送人,可以有多個(gè)抄送人
  6. 設(shè)置隱秘抄送人,可以有多個(gè)
  7. 設(shè)置郵件發(fā)送日期
  8. 設(shè)置郵件的正文
  9. 發(fā)送郵件

最后執(zhí)行該方法,就可以實(shí)現(xiàn)郵件的發(fā)送,發(fā)送效果圖如下:

發(fā)送帶附件的郵件

郵件的附件可以是圖片,也可以是普通文件,都是支持的。

@Test
public void sendAttachFileMail() throws MessagingException {
 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
 helper.setSubject("這是一封測(cè)試郵件");
 helper.setFrom("1510161612@qq.com");
 helper.setTo("25xxxxx755@qq.com");
 helper.setCc("37xxxxx37@qq.com");
 helper.setBcc("14xxxxx098@qq.com");
 helper.setSentDate(new Date());
 helper.setText("這是測(cè)試郵件的正文");
 helper.addAttachment("javaboy.jpg",new File("C:\\Users\\sang\\Downloads\\javaboy.png"));
 javaMailSender.send(mimeMessage);
}

注意這里在構(gòu)建郵件對(duì)象上和前文有所差異,這里是通過(guò) javaMailSender 來(lái)獲取一個(gè)復(fù)雜郵件對(duì)象,然后再利用 MimeMessageHelper 對(duì)郵件進(jìn)行配置,MimeMessageHelper 是一個(gè)郵件配置的輔助工具類,創(chuàng)建時(shí)候的 true 表示構(gòu)建一個(gè) multipart message 類型的郵件,有了 MimeMessageHelper 之后,我們針對(duì)郵件的配置都是由 MimeMessageHelper 來(lái)代勞。

最后通過(guò) addAttachment 方法來(lái)添加一個(gè)附件。

執(zhí)行該方法,郵件發(fā)送效果圖如下:

發(fā)送帶圖片資源的郵件

圖片資源和附件有什么區(qū)別呢?圖片資源是放在郵件正文中的,即一打開(kāi)郵件,就能看到圖片。但是一般來(lái)說(shuō),不建議使用這種方式,一些公司會(huì)對(duì)郵件內(nèi)容的大小有限制(因?yàn)檫@種方式是將圖片一起發(fā)送的)。

@Test
public void sendImgResMail() throws MessagingException {
 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setSubject("這是一封測(cè)試郵件");
 helper.setFrom("1510161612@qq.com");
 helper.setTo("25xxxxx755@qq.com");
 helper.setCc("37xxxxx37@qq.com");
 helper.setBcc("14xxxxx098@qq.com");
 helper.setSentDate(new Date());
 helper.setText("<p>hello 大家好,這是一封測(cè)試郵件,這封郵件包含兩種圖片,分別如下</p><p>第一張圖片:</p><img src='cid:p01'/><p>第二張圖片:</p><img src='cid:p02'/>",true);
 helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy.png")));
 helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy2.png")));
 javaMailSender.send(mimeMessage);
}

這里的郵件 text 是一個(gè) HTML 文本,里邊涉及到的圖片資源先用一個(gè)占位符占著,setText 方法的第二個(gè)參數(shù) true 表示第一個(gè)參數(shù)是一個(gè) HTML 文本。

setText 之后,再通過(guò) addInline 方法來(lái)添加圖片資源。

最后執(zhí)行該方法,發(fā)送郵件,效果如下:

在公司實(shí)際開(kāi)發(fā)中,第一種和第三種都不是使用最多的郵件發(fā)送方案。因?yàn)檎?lái)說(shuō),郵件的內(nèi)容都是比較的豐富的,所以大部分郵件都是通過(guò) HTML 來(lái)呈現(xiàn)的,如果直接拼接 HTML 字符串,這樣以后不好維護(hù),為了解決這個(gè)問(wèn)題,一般郵件發(fā)送,都會(huì)有相應(yīng)的郵件模板。最具代表性的兩個(gè)模板就是 Freemarker 模板和 Thyemeleaf 模板了。

使用 Freemarker 作郵件模板

首先需要引入 Freemarker 依賴:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

然后在 resources/templates 目錄下創(chuàng)建一個(gè) mail.ftl 作為郵件發(fā)送模板:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<p>hello 歡迎加入 xxx 大家庭,您的入職信息如下:</p>
<table border="1">
 <tr>
 <td>姓名</td>
 <td>${username}</td>
 </tr>
 <tr>
 <td>工號(hào)</td>
 <td>${num}</td>
 </tr>
 <tr>
 <td>薪水</td>
 <td>${salary}</td>
 </tr>
</table>
<div style="color: #ff1a0e">一起努力創(chuàng)造輝煌</div>
</body>
</html>

接下來(lái),將郵件模板渲染成 HTML ,然后發(fā)送即可。

@Test
public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setSubject("這是一封測(cè)試郵件");
 helper.setFrom("1510161612@qq.com");
 helper.setTo("25xxxxx755@qq.com");
 helper.setCc("37xxxxx37@qq.com");
 helper.setBcc("14xxxxx098@qq.com");
 helper.setSentDate(new Date());
 //構(gòu)建 Freemarker 的基本配置
 Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
 // 配置模板位置
 ClassLoader loader = MailApplication.class.getClassLoader();
 configuration.setClassLoaderForTemplateLoading(loader, "templates");
 //加載模板
 Template template = configuration.getTemplate("mail.ftl");
 User user = new User();
 user.setUsername("javaboy");
 user.setNum(1);
 user.setSalary((double) 99999);
 StringWriter out = new StringWriter();
 //模板渲染,渲染的結(jié)果將被保存到 out 中 ,將out 中的 html 字符串發(fā)送即可
 template.process(user, out);
 helper.setText(out.toString(),true);
 javaMailSender.send(mimeMessage);
}

需要注意的是,雖然引入了 Freemarker 的自動(dòng)化配置,但是我們?cè)谶@里是直接 new Configuration 來(lái)重新配置 Freemarker 的,所以 Freemarker 默認(rèn)的配置這里不生效,因此,在填寫(xiě)模板位置時(shí),值為 templates 。

調(diào)用該方法,發(fā)送郵件,效果圖如下:

使用 Thymeleaf 作郵件模板

推薦在 Spring Boot 中使用 Thymeleaf 來(lái)構(gòu)建郵件模板。因?yàn)?Thymeleaf 的自動(dòng)化配置提供了一個(gè) TemplateEngine,通過(guò) TemplateEngine 可以方便的將 Thymeleaf 模板渲染為 HTML ,同時(shí),Thymeleaf 的自動(dòng)化配置在這里是繼續(xù)有效的 。

首先,引入 Thymeleaf 依賴:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

然后,創(chuàng)建 Thymeleaf 郵件模板:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<p>hello 歡迎加入 xxx 大家庭,您的入職信息如下:</p>
<table border="1">
 <tr>
 <td>姓名</td>
 <td th:text="${username}"></td>
 </tr>
 <tr>
 <td>工號(hào)</td>
 <td th:text="${num}"></td>
 </tr>
 <tr>
 <td>薪水</td>
 <td th:text="${salary}"></td>
 </tr>
</table>
<div style="color: #ff1a0e">一起努力創(chuàng)造輝煌</div>
</body>
</html>

接下來(lái)發(fā)送郵件:

@Autowired
TemplateEngine templateEngine;

@Test
public void sendThymeleafMail() throws MessagingException {
 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setSubject("這是一封測(cè)試郵件");
 helper.setFrom("1510161612@qq.com");
 helper.setTo("25xxxxx755@qq.com");
 helper.setCc("37xxxxx37@qq.com");
 helper.setBcc("14xxxxx098@qq.com");
 helper.setSentDate(new Date());
 Context context = new Context();
 context.setVariable("username", "javaboy");
 context.setVariable("num","000001");
 context.setVariable("salary", "99999");
 String process = templateEngine.process("mail.html", context);
 helper.setText(process,true);
 javaMailSender.send(mimeMessage);
}

調(diào)用該方法,發(fā)送郵件,效果圖如下:

好了,這就是我們今天說(shuō)的 5 種郵件發(fā)送姿勢(shì),不知道你掌握了沒(méi)有呢?

本文案例已經(jīng)上傳到 GitHub:https://github.com/lenve/javaboy-code-samples (本地下載)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java多線程之同步工具類CountDownLatch

    Java多線程之同步工具類CountDownLatch

    這篇文章主要介紹了Java多線程之同步工具類CountDownLatch,CountDownLatch是一個(gè)同步工具類,它允許一個(gè)或多個(gè)線程一直等待,直到其他線程執(zhí)行完后再執(zhí)行。例如,應(yīng)用程序的主線程希望在負(fù)責(zé)啟動(dòng)框架服務(wù)的線程已經(jīng)啟動(dòng)所有框架服務(wù)之后執(zhí)行,下面一起來(lái)學(xué)習(xí)學(xué)習(xí)內(nèi)容吧
    2021-10-10
  • SpringBoot 防止接口惡意多次請(qǐng)求的操作

    SpringBoot 防止接口惡意多次請(qǐng)求的操作

    這篇文章主要介紹了SpringBoot 防止接口惡意多次請(qǐng)求的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Java?SWT中常見(jiàn)彈出框?qū)嵗偨Y(jié)

    Java?SWT中常見(jiàn)彈出框?qū)嵗偨Y(jié)

    剛開(kāi)始寫(xiě)Java工具的小伙伴可能不知道怎么寫(xiě)消息對(duì)話框,在這里總結(jié)一些常用的幾種消息彈出框,下面這篇文章主要給大家介紹了關(guān)于Java?SWT中常見(jiàn)彈出框的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 基于Spring Security實(shí)現(xiàn)對(duì)密碼進(jìn)行加密和校驗(yàn)

    基于Spring Security實(shí)現(xiàn)對(duì)密碼進(jìn)行加密和校驗(yàn)

    我們?cè)谌腴T(mén)案例中,其實(shí)已經(jīng)是一個(gè)非常簡(jiǎn)單的認(rèn)證,但是用戶名是寫(xiě)死的,密碼也需要從控制臺(tái)查看,很顯然實(shí)際中并不能這么做,下面的學(xué)習(xí)中,我們來(lái)實(shí)現(xiàn)基于內(nèi)存模型的認(rèn)證以及用戶的自定義認(rèn)證,密碼加密等內(nèi)容,需要的朋友可以參考下
    2024-07-07
  • Mybatis配置錯(cuò)誤:java.lang.ExceptionInInitializerError

    Mybatis配置錯(cuò)誤:java.lang.ExceptionInInitializerError

    這篇文章主要介紹了Mybatis配置錯(cuò)誤:java.lang.ExceptionInInitializerError的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot項(xiàng)目中通過(guò)@Value給參數(shù)賦值失敗的解決方案

    SpringBoot項(xiàng)目中通過(guò)@Value給參數(shù)賦值失敗的解決方案

    springboot項(xiàng)目中通過(guò)@Value給屬性附值失敗,給參數(shù)賦值失敗,打印為空值,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    這篇文章主要介紹了java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 總結(jié)十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù)

    總結(jié)十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù)

    Java是世界上最流行的程序語(yǔ)言,從1995年問(wèn)世以來(lái),Java的生態(tài)系統(tǒng)在一直在蓬勃的發(fā)展著。下面這篇文章主要總結(jié)了十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • 解決Maven 項(xiàng)目報(bào)錯(cuò) java.httpservlet和synchronized使用方法

    解決Maven 項(xiàng)目報(bào)錯(cuò) java.httpservlet和synchronized使用方法

    下面小編就為大家?guī)?lái)一篇解決Maven 項(xiàng)目報(bào)錯(cuò) java.httpservlet和synchronized使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Java中的迭代和遞歸詳解

    Java中的迭代和遞歸詳解

    這篇文章主要給大家介紹了關(guān)于Java中的迭代和遞歸,文章顯示分別介紹了Java中的迭代和遞歸,而后又介紹了迭代和遞歸的區(qū)別以及數(shù)形遞歸的相關(guān)內(nèi)容,文中介紹的很詳細(xì),相信會(huì)對(duì)大家學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒。
    2016-11-11

最新評(píng)論

齐河县| 织金县| 两当县| 左贡县| 合川市| 黔南| 五大连池市| 海盐县| 开阳县| 连城县| 天祝| 香港 | 台南市| 收藏| 延川县| 中方县| 襄樊市| 石家庄市| 姚安县| 济阳县| 武乡县| 习水县| 绩溪县| 玉树县| 广饶县| 嘉峪关市| 五华县| 五莲县| 隆尧县| 玉屏| 陆河县| 伊吾县| 宁城县| 青阳县| 丁青县| 宕昌县| 巴林左旗| 泌阳县| 陇川县| 玉门市| 马边|