

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java筆記 &#8211; Max的程式語言筆記</title>
	<atom:link href="https://stackoverflow.max-everyday.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>https://stackoverflow.max-everyday.com</link>
	<description>我要當一個豬頭，快樂過每一天</description>
	<lastBuildDate>Tue, 09 Dec 2025 16:06:12 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://stackoverflow.max-everyday.com/wp-content/uploads/2017/02/max-stackoverflow-256.png</url>
	<title>Java筆記 &#8211; Max的程式語言筆記</title>
	<link>https://stackoverflow.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Java 21 LTS 下載點比較與建議</title>
		<link>https://stackoverflow.max-everyday.com/2025/12/java-21-lts-download/</link>
					<comments>https://stackoverflow.max-everyday.com/2025/12/java-21-lts-download/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 16:06:10 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=7362</guid>

					<description><![CDATA[對於 Java 21 LTS 版本，Micros...]]></description>
										<content:encoded><![CDATA[
<p>對於 <strong>Java 21 LTS</strong> 版本，<strong>Microsoft OpenJDK</strong>、<strong>Adoptium (Eclipse Temurin)</strong> 或 <strong>Azul Zulu</strong> 等發行版的下載體驗通常比 <strong>Oracle JDK</strong> 官方下載更為方便，因為它們<strong>不需要</strong>您註冊 Oracle 帳戶或登入即可直接下載安裝檔。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Java 21 LTS 下載點比較與建議</h2>



<p>Java JDK (Java Development Kit) 有許多不同的發行版（Distribution），它們都基於相同的 <strong>OpenJDK</strong> 原始碼，但在授權、支援和下載流程上有所不同。</p>



<h3 class="wp-block-heading">1. 建議選項：方便、免註冊的 OpenJDK 發行版</h3>



<p>如果您追求<strong>最方便、免註冊</strong>的下載體驗，並確保在 Ubuntu 環境下使用，以下是最好的選擇：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>發行版 (Vendor)</strong></td><td><strong>方便性/註冊要求</strong></td><td><strong>適用性/特點</strong></td><td><strong>官方下載點</strong></td></tr></thead><tbody><tr><td><strong>Microsoft OpenJDK</strong></td><td><strong>極方便</strong>，不需註冊或登入。</td><td>穩定、可靠，Microsoft 內部產品廣泛使用。提供 DEB 和 RPM 套件，方便 Ubuntu 安裝。</td><td><a target="_blank" rel="noreferrer noopener" href="https://learn.microsoft.com/zh-tw/java/openjdk/download">Microsoft OpenJDK 官方下載</a></td></tr><tr><td><strong>Adoptium (Eclipse Temurin)</strong></td><td><strong>極方便</strong>，不需註冊或登入。</td><td>社群主導，被認為是 OpenJDK 的<strong>事實標準 (De Facto Standard)</strong>。</td><td><a target="_blank" rel="noreferrer noopener" href="https://adoptium.net/">Adoptium Temurin 官方下載</a></td></tr><tr><td><strong>Azul Zulu</strong></td><td><strong>極方便</strong>，不需註冊或登入。</td><td>提供大量架構和版本支援，適用於商業和免費用途。</td><td><a target="_blank" rel="noreferrer noopener" href="https://www.azul.com/downloads/">Azul Zulu 官方下載</a></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">2. 傳統選項：Oracle JDK</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>發行版 (Vendor)</strong></td><td><strong>方便性/註冊要求</strong></td><td><strong>適用性/特點</strong></td><td><strong>官方下載點</strong></td></tr></thead><tbody><tr><td><strong>Oracle JDK</strong></td><td><strong>不方便</strong>，下載 <strong>LTS 版本</strong>（如 Java 21）通常<strong>需要登入</strong>或<strong>註冊 Oracle 帳戶</strong>。</td><td>官方發行版，提供商用支援。個人開發者可免費使用。</td><td><a target="_blank" rel="noreferrer noopener" href="https://www.oracle.com/java/technologies/javase/jdk21-archive-downloads.html">Oracle JDK 官方下載</a></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 在 Ubuntu 上安裝 Java 21 的建議步驟</h2>



<p>在 Ubuntu 環境下，使用 <strong>Microsoft OpenJDK</strong> 或 <strong>Adoptium Temurin</strong> 進行安裝會非常簡單，您可以選擇以下兩種方法之一：</p>



<h3 class="wp-block-heading">方法一：使用包管理工具 (PPA)</h3>



<p>對於 Ubuntu，使用 PPA (Personal Package Archive) 或 Microsoft 提供的套件來源是最方便、最推薦的方式，因為它可以讓您<strong>輕鬆地更新和管理</strong> JDK 版本。</p>



<p><strong>以 Adoptium (Temurin) 為例：</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>添加 Adoptium GPG Key：</strong><br><code>sudo apt update </code><br><code>sudo apt install software-properties-common </code><br><code>sudo mkdir -p /etc/apt/keyrings </code><br><code>wget -q -O - https://adoptium.jfrog.io/adoptium/api/gpg/key/public | gpg --dearmor | sudo tee /etc/apt/keyrings/adoptium.gpg > /dev/null</code></li>



<li><strong>添加 Adoptium 儲存庫：</strong><br><code>echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://adoptium.jfrog.io/adoptium/deb $(awk -F= '/^VERSION_CODENAME/{print $2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list</code></li>



<li><strong>安裝 Temurin 21 JDK：</strong><br><code>sudo apt update </code><br><code>sudo apt install temurin-21-jdk</code></li>
</ol>



<h3 class="wp-block-heading">方法二：直接下載壓縮包 (Tarball)</h3>



<p>您可以直接從 Microsoft 或 Adoptium 網站下載 Linux 的 <code>.tar.gz</code> 壓縮包，然後手動解壓縮並設定環境變數。</p>



<ol start="1" class="wp-block-list">
<li><strong>下載：</strong> 從 Microsoft OpenJDK 網站下載 <strong>Linux x64 .tar.gz</strong> 檔案。</li>



<li><strong>解壓縮：</strong> 將檔案解壓縮到您選擇的目錄（例如 <code>/opt/jdk/</code>）。Bash<code>sudo mkdir -p /opt/jdk/ sudo tar zxvf /path/to/microsoft-jdk-21.0.x-linux-x64.tar.gz -C /opt/jdk/</code></li>



<li><strong>設定 <code>JAVA_HOME</code>：</strong>Bash<code>echo 'export JAVA_HOME=/opt/jdk/jdk-21.0.x' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc</code></li>
</ol>



<p><strong>總結：</strong> 為了方便，請選擇 <strong>Microsoft OpenJDK</strong> 或 <strong>Adoptium Temurin</strong> 的發行版，並盡可能使用 <strong>PPA/APT</strong> 的方式進行安裝。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2025/12/java-21-lts-download/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>安裝 Java 17 與 Java 21的選擇比較</title>
		<link>https://stackoverflow.max-everyday.com/2025/12/install-java-17-or-java-21/</link>
					<comments>https://stackoverflow.max-everyday.com/2025/12/install-java-17-or-java-21/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 16:02:49 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=7360</guid>

					<description><![CDATA[Java 17 和 Java 21 都屬於 LT...]]></description>
										<content:encoded><![CDATA[
<p>Java 17 和 Java 21 都屬於 <strong>LTS (Long-Term Support)</strong> 版本，這意味著它們提供長期的安全更新和支援，是企業級應用程式的理想選擇。主要的區別在於 <strong>Java 21</strong> 引入了多項改變遊戲規則（Game-Changer）的功能。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>特性</strong></td><td><strong>Java 17 (LTS)</strong></td><td><strong>Java 21 (LTS)</strong></td><td><strong>優勢與影響</strong></td></tr></thead><tbody><tr><td><strong>發布時間</strong></td><td>2021 年 9 月</td><td>2023 年 9 月</td><td>Java 21 支援週期更長，獲得免費公開更新直到 2026 年 9 月 (Oracle)。</td></tr><tr><td><strong>關鍵功能</strong></td><td><strong>Sealed Classes</strong>, <strong>Records</strong>, <strong>Pattern Matching for <code>instanceof</code></strong> (定稿)</td><td><strong>Virtual Threads</strong> (Project Loom), <strong>Sequenced Collections</strong>, <strong>Record Patterns</strong> 及 <strong>Pattern Matching for <code>switch</code></strong> (定稿)</td><td><strong>Virtual Threads</strong> 是最大的亮點，能大幅提升高並發、I/O 密集型應用的<strong>可擴展性 (Scalability)</strong>。</td></tr><tr><td><strong>並發/效能</strong></td><td>穩定、優化的 <strong>G1/ZGC</strong> 垃圾收集器。</td><td>包含 <strong>Virtual Threads</strong>，使開發者能輕鬆編寫高並發、高吞吐量的應用，<strong>效能表現更優</strong>。</td><td></td></tr><tr><td><strong>語法/生產力</strong></td><td>引入了現代化的語法特性，使程式碼更簡潔。</td><td>進一步將 Java 程式碼變得<strong>更簡潔</strong>、<strong>更具表達力</strong> (如 Pattern Matching for <code>switch</code>)。</td><td></td></tr><tr><td><strong>生態系統</strong></td><td><strong>目前最廣泛</strong> 被採用的 LTS 版本之一，多數函式庫和框架已完美支援。</td><td>作為最新 LTS，生態系統支援正在快速成熟，但<strong>部分舊版函式庫可能仍需更新</strong>。</td><td></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2696.png" alt="⚖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 優點與缺點比較</h2>



<h3 class="wp-block-heading">1. Java 17</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>優點 (Pros) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f44d.png" alt="👍" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></td><td><strong>缺點 (Cons) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f44e.png" alt="👎" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></td></tr></thead><tbody><tr><td><strong>成熟穩定性高</strong>：已被廣泛採用數年，<strong>生態系統支援極佳</strong>，相容性問題最少。</td><td><strong>缺少 Virtual Threads</strong>：不具備 Java 21 最重要的並發特性，在高並發場景下擴展性受限。</td></tr><tr><td><strong>過渡版本</strong>：對於從 Java 11 遷移的專案，Java 17 是安全且穩健的第一步。</td><td><strong>語言特性較舊</strong>：缺少 <strong>Sequenced Collections</strong>、完整的 <strong>Pattern Matching</strong> 等簡潔語法。</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">2. Java 21</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>優點 (Pros) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f44d.png" alt="👍" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></td><td><strong>缺點 (Cons) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f44e.png" alt="👎" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></td></tr></thead><tbody><tr><td><strong>核心優勢：Virtual Threads</strong>：徹底改變了 Java 處理並發的方式，使您能以同步程式碼的風格，實現極高的非同步效能和吞吐量。</td><td><strong>相容性考量</strong>：由於是較新的 LTS，部分非常舊的或維護不良的第三方函式庫或框架可能尚未完全支援。</td></tr><tr><td><strong>更長的支援週期</strong>：作為最新的 LTS，獲得廠商的<strong>長期支援更久</strong>。</td><td><strong>升級門檻</strong>：從 Java 8 或 Java 11 直接跳到 21，涉及的 API 移除與變化較多，需要更多遷移工作。</td></tr><tr><td><strong>開發效率更高</strong>：<strong>Pattern Matching for <code>switch</code></strong> 和 <strong>Record Patterns</strong> 等新特性使程式碼更精煉、更安全。</td><td><strong>新功能學習成本</strong>：若要充分利用 <strong>Virtual Threads</strong> 或 <strong>Structured Concurrency</strong>，團隊需要花時間學習新的並發模型。</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 建議</h2>



<h3 class="wp-block-heading">建議使用 <strong>Java 21</strong></h3>



<p>對於<strong>所有新專案</strong>和<strong>計劃升級</strong>的現有專案，強烈建議使用 <strong>Java 21</strong>。</p>



<ol start="1" class="wp-block-list">
<li><strong>專案啟動 (Greenfield Projects)</strong>：<strong>直接選擇 Java 21</strong>。享受最新的效能優化和語言特性，尤其是 <strong>Virtual Threads</strong> 在現代微服務和網路應用中帶來的巨大可擴展性優勢。</li>



<li><strong>現有專案升級 (從 Java 8 或 11)</strong>：<strong>直接以 Java 21 為目標</strong>。雖然一次跳躍到 21 可能需要更多的依賴庫更新工作，但長遠來看，跳過 Java 17 可以直接獲得最新的 LTS 功能和最長的支援週期。</li>



<li><strong>高度重視穩定性 (如金融業)</strong>：如果您的專案極度保守，且對依賴庫的穩定性有極高要求，<strong>Java 17</strong> 仍是一個<strong>安全且成熟</strong>的選擇，直到您確認所有關鍵依賴庫都已穩定支援 Java 21。</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2025/12/install-java-17-or-java-21/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 取出字串中的 tag</title>
		<link>https://stackoverflow.max-everyday.com/2024/12/java-get-html-tag/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/12/java-get-html-tag/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 18 Dec 2024 08:20:54 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=6042</guid>

					<description><![CDATA[使用下面的範例就可以取得 tag 清單： 白名單...]]></description>
										<content:encoded><![CDATA[
<p>使用下面的範例就可以取得 tag 清單：</p>



<pre class="wp-block-code"><code>Pattern p = Pattern.compile("&lt;(&#91;^\\s&gt;/]+)");
Matcher m = p.matcher(txt);
while(m.find()) {
String tag = m.group(1);
System.out.println(tag);
}</code></pre>



<p>白名單的比對，可以用 set 效率會比較好，範例：</p>



<pre class="wp-block-code"><code>Set&lt;String> set = new HashSet&lt;String>(); 
set.add("Hello"); 
set.add("Worlds"); 
System.out.println("Set: " + set); 
System.out.println("Does the Set contains 'Hello'? "
           + set.contains("Hello")); 
// Check if the Set contains "Hi" 
System.out.println("Does the Set contains 'Hi'? "
           + set.contains("Hi")); </code></pre>



<p>contains 有的話 = true, 不存在 = false.</p>



<p></p>



<p>資料來源：How to get all html tags in order from html string in Java<br><a href="https://stackoverflow.com/questions/13529394/how-to-get-all-html-tags-in-order-from-html-string-in-java">https://stackoverflow.com/questions/13529394/how-to-get-all-html-tags-in-order-from-html-string-in-java</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/12/java-get-html-tag/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Server Apache Tomcat v9 at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.</title>
		<link>https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 00:24:21 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5900</guid>

					<description><![CDATA[不知道為什麼， web server 一直掛掉，...]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="442" height="384" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-28-at-6.46.46 PM.png?v=1724842289" alt="" class="wp-image-5901"/></figure>
</div>


<p>不知道為什麼， web server 一直掛掉，重開機之後也一樣。</p>



<p>解法： 在 server 分頁裡面 server 第一層，點2下，層開timeout 設定值，修改原本的 45 秒為 60 或 90. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="689" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-1024x689.jpg?v=1724890307" alt="" class="wp-image-5903" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-1024x689.jpg?v=1724890307 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-600x404.jpg?v=1724890307 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-768x517.jpg?v=1724890307 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-1536x1033.jpg?v=1724890307 1536w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/08/Screenshot-2024-08-29-at-8.08.14 AM-2048x1378.jpg?v=1724890307 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>上面是網路上的解決方案，實測無效。</p>



<p>我發生的原因，是在 eclipse 沒有關閉的情況下，升級 tomcat 從 9.0.86 升到 9.0.93, 並直接使用 9.0.86 的 server.xml, 結果就是 tomcat 的舊版本 class 被 cached 住，造成舊版本的 server.xml 設定值在 tomcat 9.0.93 上居然正常的執行，但是在隔了4天之後，太舊的 cached 的 class 被回收走了，系統就掛掉了。</p>



<p>這時候，重開機就是固定會出現錯誤訊息，發生的原因就是 tomcat 9.0.89 版之後 ssl 的寫法修改了。</p>



<p>舊的寫法：</p>



<pre class="wp-block-code"><code>&lt;Connector SSLEnabled="true" clientAuth="false" connectionTimeout="20000" keystoreFile="conf/your-ca.jks" keystorePass="your-password" maxParameterCount="1000" maxThreads="150" port="443" protocol="HTTP/1.1" scheme="https" secure="true"/&gt;</code></pre>



<p>新的寫法：</p>



<pre class="wp-block-code"><code>&lt;Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true"
           maxParameterCount="1000"
           &gt;
    &lt;SSLHostConfig&gt;
        &lt;Certificate certificateKeystorePassword="your-password" certificateKeystoreFile="conf/your-ca.jks"
                     type="RSA" /&gt;
    &lt;/SSLHostConfig&gt;
&lt;/Connector&gt;</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Tomcat 官方說明</h2>



<p>The HTTP Connector<br><a href="https://tomcat.apache.org/tomcat-9.0-doc/config/http.html">https://tomcat.apache.org/tomcat-9.0-doc/config/http.html</a></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code>certificateKeystoreFile</code></td><td>The pathname of the keystore file where you have stored the server certificate and key to be loaded. By default, the pathname is the file <code>.keystore</code> in the operating system home directory of the user that is running Tomcat. If your <code>keystoreType</code> doesn&#8217;t need a file use <code>""</code> (empty string) or <code>NONE</code> for this parameter. Relative paths will be resolved against <code>$CATALINA_BASE</code>. A URI may also be used for this attribute. When using a domain keystore (<code>keystoreType</code> of <code>DKS</code>), this parameter should be the URI to the domain keystore.This attribute is required unless <strong>certificateFile</strong> is specified.</td></tr><tr><td><code>certificateKeystorePassword</code></td><td>The password to use to access the keystore containing the server&#8217;s private key and certificate. If not specified, a default of <code>changeit</code> will be used.</td></tr></tbody></table></figure>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">相關文章</h2>



<p>如何在eclipse升級tomcat 版本<br><a href="https://stackoverflow.max-everyday.com/2023/10/how-to-upgrade-tomcat-version-in-eclipse/">https://stackoverflow.max-everyday.com/2023/10/how-to-upgrade-tomcat-version-in-eclipse/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>javax.net.ssl.SSLHandshakeException: PKIX path building failed</title>
		<link>https://stackoverflow.max-everyday.com/2024/08/javax-net-ssl-sslhandshakeexception-pkix-path-building-failed/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/08/javax-net-ssl-sslhandshakeexception-pkix-path-building-failed/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 28 Aug 2024 08:10:03 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5896</guid>

					<description><![CDATA[在連遠端的 https ，由於是自signed ...]]></description>
										<content:encoded><![CDATA[
<p>在連遠端的 https ，由於是自signed 憑證或憑證的驗證上有出問題，java 程式會卡關。解法，增加一個 function 來略過憑證，範例程式碼如下：</p>



<pre class="wp-block-code"><code>public static String getBase64FromUrl(String fileUrl) {
    InputStream inputStream = null;
    byte&#91;] data = null;
    ByteArrayOutputStream swapStream = null;
    HttpsURLConnection conn = null;
    try {
        URL url = new URL(fileUrl);
        if (fileUrl.contains("https:")){
            SSLContext context = createIgnoreVerifySSL();
            createIgnoreVerifySSL();
            conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(context.getSocketFactory());
            inputStream = conn.getInputStream();
        }else {
            inputStream =  url.openConnection().getInputStream();
        }

        swapStream = new ByteArrayOutputStream();
        byte&#91;] buff = new byte&#91;100];
        int rc = 0;
        while ((rc = inputStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        data = swapStream.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(swapStream);
    }
    return new String(Base64.encodeBase64(data));
}

public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
    SSLContext sc = SSLContext.getInstance("TLS");
    X509TrustManager trustManager = new X509TrustManager() {
        @Override
        public void checkClientTrusted(
                java.security.cert.X509Certificate&#91;] paramArrayOfX509Certificate,
                String paramString) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(
                java.security.cert.X509Certificate&#91;] paramArrayOfX509Certificate,
                String paramString) throws CertificateException {
        }

        @Override
        public java.security.cert.X509Certificate&#91;] getAcceptedIssuers() {
            return null;
        }
    };
    sc.init(null, new TrustManager&#91;]{trustManager}, null);
    return sc;
}</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>HttpsURLConnection 好像不能輸入 url 是 &#8220;http&#8221; 的樣子，可以遇到 http 改用 HttpURLConnection class 即可。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/08/javax-net-ssl-sslhandshakeexception-pkix-path-building-failed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules</title>
		<link>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 01:45:29 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5696</guid>

					<description><![CDATA[在全新的 eclipse 匯入 project ...]]></description>
										<content:encoded><![CDATA[
<p>在全新的 eclipse 匯入 project 之後，無法在 tomcat 裡的 site 被新增為 resource, 顯示錯誤訊息：</p>



<pre class="wp-block-code"><code>Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="592" height="608" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM.png?v=1714441447" alt="" class="wp-image-5697" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM.png?v=1714441447 592w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM-584x600.png?v=1714441447 584w" sizes="(max-width: 592px) 100vw, 592px" /></figure>



<p>解法，設成 Dynamic Web Module 下拉 Version 為 3.0 即可。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="967" height="728" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM.png?v=1714441470" alt="" class="wp-image-5698" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM.png?v=1714441470 967w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM-600x452.png?v=1714441470 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM-768x578.png?v=1714441470 768w" sizes="auto, (max-width: 967px) 100vw, 967px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>eclipse No resources that can be added or removed from the server</title>
		<link>https://stackoverflow.max-everyday.com/2024/04/eclipse-no-resources-that-can-be-added-or-removed-from-the-server/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/04/eclipse-no-resources-that-can-be-added-or-removed-from-the-server/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 01:36:00 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5693</guid>

					<description><![CDATA[在全安裝的 eclipse 匯入舊的專案檔案後，...]]></description>
										<content:encoded><![CDATA[
<p>在全安裝的 eclipse 匯入舊的專案檔案後，雖然新增了 tomcat server, 但是在資源(resource) 對話框，沒有顯示出前的的專案。</p>



<p>解法：</p>



<p>For this you need to update your Project Facets setting.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Project (right click) -&gt; Properties -&gt; Project Facets from left navigation.</p>
</blockquote>



<p>If it is not open&#8230;click on the link, Check the Dynamic Web Module Check Box and select the respective version (Probably 2.4). Click on Apply Button and then Click on OK.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="980" height="733" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.29.19 AM.png?v=1714440873" alt="" class="wp-image-5694" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.29.19 AM.png?v=1714440873 980w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.29.19 AM-600x449.png?v=1714440873 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.29.19 AM-768x574.png?v=1714440873 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /></figure>



<p>預設是匯入 Java project, 把畫面中的 Dynamic Web Module 打勾，就可以用在 Tomcat 了。</p>



<p></p>



<p>資料來源：<br><a href="https://stackoverflow.com/questions/24624782/there-are-no-resources-that-can-be-added-or-removed-from-the-server">https://stackoverflow.com/questions/24624782/there-are-no-resources-that-can-be-added-or-removed-from-the-server</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/04/eclipse-no-resources-that-can-be-added-or-removed-from-the-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The import javax.servlet cannot be resolved</title>
		<link>https://stackoverflow.max-everyday.com/2024/04/the-import-javax-servlet-cannot-be-resolved/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/04/the-import-javax-servlet-cannot-be-resolved/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 01:12:00 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5689</guid>

					<description><![CDATA[在全新安裝的 Eclipse 裡，匯入了專案的檔...]]></description>
										<content:encoded><![CDATA[
<p>在全新安裝的 Eclipse 裡，匯入了專案的檔案後，顯示錯誤訊息：</p>



<pre class="wp-block-code"><code>javax.servlet cannot be resolved</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="582" height="435" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.05.14 AM.png?v=1714439428" alt="" class="wp-image-5690"/></figure>



<p></p>



<h2 class="wp-block-heading">解決辦法：</h2>



<p>只要按照下列步驟在Eclipse中導入就可以了。右擊項目，選擇Properties， 進入下界面，依次點擊：</p>



<pre class="wp-block-code"><code>Java Build Path —&gt; Add Library —&gt; Server Runtime —&gt; Next</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="699" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-1024x699.png?v=1714439498" alt="" class="wp-image-5691" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-1024x699.png?v=1714439498 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-600x410.png?v=1714439498 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-768x525.png?v=1714439498 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM.png?v=1714439498 1117w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/04/the-import-javax-servlet-cannot-be-resolved/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>javascript 遍歷 array</title>
		<link>https://stackoverflow.max-everyday.com/2024/02/javascript-for-each-array/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/02/javascript-for-each-array/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Mon, 19 Feb 2024 13:25:13 +0000</pubDate>
				<category><![CDATA[javascript筆記]]></category>
		<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5441</guid>

					<description><![CDATA[由於 d3js 使用到大量的 array, 需要...]]></description>
										<content:encoded><![CDATA[
<p>由於 d3js 使用到大量的 array, 需要用到 array 內容的轉換，所以來學習如何遍歷 array.</p>



<p>解法：<br><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach</a></p>



<pre class="wp-block-code"><code>const array1 = &#91;'a', 'b', 'c'];

array1.forEach((element) => console.log(element));

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Java 世界遍歷 list 解法：</p>



<pre class="wp-block-code"><code>List&lt;String> list = new ArrayList&lt;>();
list.add("java");
list.add("C");
list.add("C++");
list.add("C#");
list.add("PHP");

/*
 * 一般for迴圈
 */
for (int i = 0; i &lt; list.size(); i++) {
    System.out.println("一般for迴圈：" + list.get(i));
}

/*
 * 增強for迴圈
 */
for (String str : list) {
    System.out.println("增強for迴圈：" + str);
}

/*
 * 迭代器1遍歷
 */
for (Iterator&lt;String> it = list.iterator(); it.hasNext();) {
    System.out.println("迭代器1遍歷：" + it.next());
}

/*
 * 迭代器2遍歷
 */
Iterator&lt;String> it = list.iterator();
while (it.hasNext()) {
    System.out.println("迭代器2遍歷：" + it.next());
}

/*
 * java8 Lambda表示式
 */
list.forEach(s -> {
    System.out.println("java8 Lambda表示式：" + s);
});

/*
 * java8 stream 有序流
 */
list.stream().forEach(s -> {
    System.out.println("java8 stream 有序流：" + s);
});

/*
 * java8 stream 並行流
 */
list.parallelStream().forEach(s -> {
    System.out.println("java8 stream 並行流：" + s);
});
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/02/javascript-for-each-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>取得JSONObject 的Keys</title>
		<link>https://stackoverflow.max-everyday.com/2023/12/java-jsonobject-keyset/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/12/java-jsonobject-keyset/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Fri, 22 Dec 2023 08:34:16 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5237</guid>

					<description><![CDATA[在比對JSONArray 的資料時, 遇到 Se...]]></description>
										<content:encoded><![CDATA[
<p>在比對JSONArray 的資料時, 遇到 Set 是 JSONObject 時, 即使 key / value 一致, 但無法判斷為相同的Object, 會無法判斷是否為子集合。</p>



<p>某一個解法, 遇到 JSONArray 使用 JSONObject 時, 只取第一個 JSONObject 的 key 放入 set 來比對。這個解法需要取出 json object 的 keys, 並拿出第一個來使用, 解法:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>JSONObject get value of first node regardless of name<br><a href="https://stackoverflow.com/questions/33531041/jsonobject-get-value-of-first-node-regardless-of-name">https://stackoverflow.com/questions/33531041/jsonobject-get-value-of-first-node-regardless-of-name</a></p>
</blockquote>



<pre class="wp-block-code"><code> Iterator&lt;String> keys = jsonObject.keys();
 String str_Name=keys.next(); 
 String value = json.optString(str_Name);</code></pre>



<p>其他取得keys 方法:</p>



<pre class="wp-block-code"><code>Iterator&lt;String> iter = response.keys();
while (iter.hasNext()) {
    String key = iter.next();
    JSONObject lightObject = response.getJSONObject(key); 
    System.out.println("key: " + key + ", OBJECT " + lightObject);
}</code></pre>



<p>或</p>



<pre class="wp-block-code"><code>for (final Iterator&lt;String> iter = errors.keys(); iter.hasNext();) {
    final String key = iter.next();
}</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/12/java-jsonobject-keyset/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
