<?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; 記下來</title>
	<atom:link href="https://noter.tw/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Fri, 10 Nov 2023 08:19:29 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>Java &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>NCR &#038;#xxxxx; 處理方式：Java &#038; VBA</title>
		<link>https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/</link>
					<comments>https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 16 Jul 2018 14:54:25 +0000</pubDate>
				<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[&#]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[decimal]]></category>
		<category><![CDATA[NCR]]></category>
		<category><![CDATA[VBA]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=119</guid>

					<description><![CDATA[<p>工作上常常需要把資料庫的東西匯出，但有一些資料是以&#160;NCR (Numeric Character Reference) 的方式儲存或呈現，這些在網頁上看都沒有什麼問題，但在 Excel 裡面&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &#038;#xxxxx; 處理方式：Java &#038; VBA</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>工作上常常需要把資料庫的東西匯出，但有一些資料是以&nbsp;NCR (Numeric Character Reference) 的方式儲存或呈現，這些在網頁上看都沒有什麼問題，但在 Excel 裡面「你好嗎」如果是 NCR 就會看到這樣「你好嗎」，這邊記錄用 VBA 跟 Java 個別的處理方式。</p>



<span id="more-119"></span>



<p>先來搞清楚 NCR 的構成吧！大致上會是以 &amp;# 開頭，中間串接個數字，最後以分號 ; 結尾，大概就是像這樣</p>



<p>你 =&gt;&nbsp;&amp;#20320;<br>好 =&gt;&nbsp;&amp;#22909;<br>嗎 =&gt;&nbsp;&amp;#21966;</p>



<p>上面幾個是 Decimal NCR 十進位制的 NCR，下面放幾個 16 進制的 NCR 來比較看看</p>



<p>你 =&gt;&nbsp;&amp;#x4F60;<br>好 =&gt;&nbsp;&amp;#x597D;<br>嗎 =&gt;&nbsp;&amp;#x55CE;</p>



<p>想要知道 10 進位跟 16 進位 NCR 的請前往<a href="https://zh.wikipedia.org/wiki/字符值引用" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">維基百科<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，小蛙這邊簡單歸納自己的做法：</p>



<ol class="my-li bg-darkblue wp-block-list">
<li>10 進制的 pattern 為 &amp;#(wwwww);&nbsp; &nbsp; -&gt; w 為 10 進制數字</li>



<li>16 進制的 pattern 為 &amp;#x(hhhh);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; h 為 16 進制</li>
</ol>



<h2 class="wp-block-heading para">Java 版本 NCR 處理</h2>



<p>Java code 是大概寫一下，裡面沒有加入任何防呆跟錯誤處理，例如：Integer.parseInt 這邊有可能 parse 到不是 integer 而拋出錯誤，請務必注意(乖小孩要自己加上喔)；或是 pattern 可以寫得更限縮一些。這次主要是要放上 VBA 的 Code，順道把 Java 的一起擺上來<del>作為紀念</del>幫助有需要的人，看出哪裡有問題的就 &#8230; 自己修改囉！也可以在下面留言給小蛙 ~ 感恩！</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">public static String convertDecimalNCRToString(String txt){
	Pattern p = Pattern.compile("&amp;#(.*?);");
	Matcher m = p.matcher(txt);
	while(m.find()){
		String match = m.group(1);
		if(!match.startsWith("x")){
			txt = txt.replaceAll("&amp;#" + m.group(1) + ";", "" + (char)Integer.parseInt(m.group(1)));				
		}else{
			txt = txt.replaceAll("&amp;#" + m.group(1) + ";", "" + (char)Integer.parseInt(m.group(1).replaceFirst("x", ""), 16));
		}
	}
	return txt;
}</pre>



<h2 class="wp-block-heading">VBA 版本 NCR 處理</h2>



<p>放上 VBA 的 Code，大致上的概念是差不多的，不過這裡要注意，小蛙剛好有機會想說寫看看 VBA，New RegExp 用這個類別的時候，不知道怎麼用一直出現未定義的錯誤，後來才知道要去設定 References，<a href="https://stackoverflow.com/a/43128681" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">參考這裡<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。另外，要列出最後一列的寫法是&nbsp;Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row，最後一欄的寫法是 Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column，如果用到的是 excel 內建函數或方法的話，前面要加上&nbsp;WorksheetFunction.。</p>



<p> 2018-07-24 更新：</p>



<p>原本的寫法會造成 〹〹 這種連續 NCR 解析錯誤 Orz&#8230; 加上每次都要設定 References 感覺很麻煩，也改寫成 CreateObject(&#8220;vbscript.regexp&#8221;)，這樣以後可以直接使用，不用再去設定 References。(注意：如果 excel 裡的 NCR 非常多，執行的時候會很慢，請耐心等待) </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">Sub ConvNCR()
    'Dim regex As New RegExp
    Dim regex As Object
    Set regex = CreateObject("vbscript.regexp")
    Dim i, j As Integer
    Dim s As String
    Dim r As String
    
    'pattern of Decimal NCR
    regex.Pattern = "&amp;#((\w+));"
    regex.Global = True
    regex.IgnoreCase = True
    regex.MultiLine = True
          
    For i = 1 To Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
        For j = 1 To Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
            s = Cells(i, j).Value
            r = s
            If Not IsNull(s) Then
                If regex.Test(s) Then
                    c = regex.Execute(s).Count
                    For w = 0 To c - 1
                        t = regex.Execute(s)(w).SubMatches(0)
                        If InStr(t, "x") Then
                           'to deal with hex NCR ሴ
                            t = WorksheetFunction.Hex2Dec(Right(t, 4))
                        End If
                        'relace by real "word"
                        r = Replace(r, regex.Execute(s)(w), WorksheetFunction.Unichar(t), , 1)
                        Cells(i, j).Value = r
                    Next w
                End If
            End If
        Next j
    Next i
End Sub</pre>



<p>以上，有需要的人夾去配吧！最後附上很有用的 <a href="https://r12a.github.io/app-conversion/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">編碼轉換工具<span class="wpel-icon wpel-image wpel-icon-6"></span></a> (iframe 內嵌於<a href="https://noter.tw/12003/unicode-code-converter-特殊字元轉換器/" data-wpel-link="internal">本站</a>) 以及 <a href="https://itw01.com/V48OESL.html" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Javascript 轉換方式<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &#038;#xxxxx; 處理方式：Java &#038; VBA</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java / PHP 插入 emoji 資料到 MariaDB</title>
		<link>https://noter.tw/122/java-php-%e6%8f%92%e5%85%a5-emoji-%e8%b3%87%e6%96%99%e5%88%b0-mariadb/</link>
					<comments>https://noter.tw/122/java-php-%e6%8f%92%e5%85%a5-emoji-%e8%b3%87%e6%96%99%e5%88%b0-mariadb/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Thu, 28 Jun 2018 14:57:34 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[錯誤]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[emoji]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[utf8mb4]]></category>
		<category><![CDATA[useUnicode]]></category>
		<category><![CDATA[characterEncoding]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=122</guid>

					<description><![CDATA[<p>Java 跟 PHP 新增 emoji 字串進去 MySQL / MariaDB 資料庫的時候發生錯誤？這篇可以幫助你喔！</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/122/java-php-%e6%8f%92%e5%85%a5-emoji-%e8%b3%87%e6%96%99%e5%88%b0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>這件事是這樣的，小蛙需要接收一個從 App 過來的表單資料，就在接收後要塞進 MariaDB 的時候，問題就出現了 &#8230;</p>
<p><span id="more-122"></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">Error Code: 1366. Incorrect string value: '\xF0\x9F\x92\xA2' for column 'SOURCE_CONTEXT' at row 1</pre>
<p>一再檢查要塞入的字串感覺沒有什麼問題，試了好幾次之後才發現 &#8230; 原來裡面包含了 emoji 啦！！！</p>
<p>之前跟同事聊天的時候得知，如果要存 emoji 的話要把資料庫的欄位改成 utf8mb4，但是呢 &#8230; 小蛙實在不想動太多，參考資料裡有很多解法，有興趣可以去看看。</p>
<p>小蛙這邊只是把要存 emoji 的欄位改成 utf8mb4，然後 &#8230; php 一執行，還是噴一樣的錯誤出來，嗯 ~ 這個案情不單純，來慢慢 try ~</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">jdbc:mysql://ip:port/db_name?useUnicode=true&amp;characterEncoding=utf8mb4</pre>
<p>試了一些方法之後發現，在 php 的部份連線後，在做任何操作之前先執行</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">mysqli_query( $conn, "SET NAMES 'utf8mb4'");</pre>
<p>ㄟ ~ 竟然好像貌似就可以了！另一個專案需要用 Java 去剖析並塞入有 emoji 的需求，立馬試試</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">ps.executeQuery("SET NAMES 'utf8mb4'");</pre>
<p>哦哦哦哦哦哦哦哦哦哦哦哦哦 ~</p>
<p>有很多文章的教學是根本的解決方法，像是把資料庫各項設定都直接改成 utf8mb4，小蛙不想動到太多，試出這方法，最後總結一下：</p>
<ol class="my-li bg-darkblue">
<li>mysql connector 更新到新版</li>
<li>jdbc:mysql://ip:port/db_name?useUnicode=true&amp;characterEncoding=utf-8&amp;character_set_server=utf8mb4</li>
<li>建立 Statement 或 PreparedStatement 後就立馬執行 SET NAMES &#8216;utf8mb4&#8217;</li>
</ol>
<p>以上，希望幫助到有需要的人！</p>
<h2 class="para">參考資料</h2>
<ol class="my-li bg-darkblue">
<li><a href="https://stackoverflow.com/questions/44591895/utf8mb4-in-mysql-workbench-and-jdbc" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">utf8mb4 in MySQL Workbench and JDBC &#8211; Stack Overflow<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li><a href="https://stackoverflow.com/questions/46140583/caused-by-java-sql-sqlexception-unsupported-character-encoding-utf8mb4" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Caused by: java.sql.SQLException: Unsupported character encoding &#8216;utf8mb4&#8217; &#8211; Stack Overflow<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li><a href="https://stackoverflow.com/questions/47060827/jdbc-and-utf8mb4-encoding-the-emoji-symbol" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">JDBC and utf8mb4 encoding the emoji symbol ? &#8211; Stack Overflow<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li><a href="https://blog.csdn.net/sunny05296/article/details/78488366" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 &#8211; CSDN 博客<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ol>


<p><strong>MySQL / MariaDB / Oracle 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list">
<li><a href="https://noter.tw/12503/mariadb-json_extract-%e5%be%9e-json-%e6%ac%84%e4%bd%8d%e5%8f%96%e5%80%bc/" data-wpel-link="internal">MariaDB JSON_EXTRACT: 從 JSON 欄位取值</a></li>



<li><a href="https://noter.tw/12015/oracle-%e5%88%86%e7%b5%84%e7%b7%a8%e8%99%9f%e8%88%87%e5%85%a8%e6%8e%92%e5%ba%8f%e7%b7%a8%e8%99%9f-row_number-over-partition-by/" data-wpel-link="internal">Oracle, MySQL 分組編號與全排序編號 row_number, over, partition by</a></li>



<li><a href="https://noter.tw/3929/mysql-error-2003-hy000-%E7%84%A1%E6%B3%95%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A/" data-wpel-link="internal">MySQL ERROR 2003 (HY000) 無法遠端連線</a></li>



<li><a href="https://noter.tw/2889/jsp-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a></li>



<li><a href="https://noter.tw/2883/java-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a></li>



<li><a href="https://noter.tw/2306/mysql%E6%8E%92%E7%A8%8Bevent-scheduler/" data-wpel-link="internal">MySQL 排程(Event Scheduler)</a></li>



<li><a href="https://noter.tw/1988/java%E9%80%A3%E7%B5%90%E9%81%A0%E7%AB%AFmysql/" data-wpel-link="internal">Java 連結遠端 MySQL</a></li>



<li><a href="https://noter.tw/4508/mariadb-replication-%E8%A8%AD%E5%AE%9A/" data-wpel-link="internal">MariaDB Replication 設定</a></li>



<li><a href="https://noter.tw/122/java-php-%E6%8F%92%E5%85%A5-emoji-%E8%B3%87%E6%96%99%E5%88%B0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a></li>
</ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/122/java-php-%e6%8f%92%e5%85%a5-emoji-%e8%b3%87%e6%96%99%e5%88%b0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/122/java-php-%e6%8f%92%e5%85%a5-emoji-%e8%b3%87%e6%96%99%e5%88%b0-mariadb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java was started but returned exit code = 13</title>
		<link>https://noter.tw/3437/java-was-started-but-returned-exit-code-13/</link>
					<comments>https://noter.tw/3437/java-was-started-but-returned-exit-code-13/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Thu, 18 Dec 2014 03:43:20 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[code 13]]></category>
		<category><![CDATA[update]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3437</guid>

					<description><![CDATA[<p>前陣子不知道做了什麼更新，今天要開 Eclipse 突然遇到這個錯誤 &#8230; 記錄一下，留給有需要的人，以 Java 更新的速度，應該很常遇到這個問題。 「Java was started b&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3437/java-was-started-but-returned-exit-code-13/" data-wpel-link="internal">Java was started but returned exit code = 13</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>前陣子不知道做了什麼更新，今天要開 Eclipse 突然遇到這個錯誤 &#8230; 記錄一下，留給有需要的人，以 Java 更新的速度，應該很常遇到這個問題。<br />
<span id="more-3437"></span><br />
「<span style="color: #ff0000;"><strong>Java was started but returned exit code = 13</strong></span>」要解決這個錯誤很簡單，Google 了一下就有很多類似的文章，這邊小蛙遇到這個問題自己記錄一下，大致上問題是出在某一次的 Java 更新後，用來啟動 Eclipse 的跟目前 JVM 的版本不符合，例如：一邊是 32 bit，一邊卻是 64 bit 造成的。<br />
小蛙這邊選了最簡單的一種，小蛙用的是 windows 8.1 到 「控制台」 -&gt; 「程式和功能」 -&gt;找到最近的一次 Java 更新，例如「Java 8 Update xx」，把他移除掉。再開啟 Eclipse 就可以了。<br />
參1、參2、參3 有其他更詳細介紹解決方法，不想把最新版更新移除掉的網友可以參考看看。<br />
<strong>參考資料：</strong></p>
<ol>
<li>MyEclipse 10 does not start “Java was started but returned exit code 13” @ stackoverflow<br />
<address><a href="http://stackoverflow.com/questions/11846758/myeclipse-10-does-not-start-java-was-started-but-returned-exit-code-13" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://stackoverflow.com/questions/11846758/myeclipse-10-does-not-start-java-was-started-but-returned-exit-code-13<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>eclipse启动不了，出现“Java was started but returned exit code=13&#8230;&#8230;”对话框 @ 百度知道<br />
<address><a href="http://zhidao.baidu.com/question/224582151.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://zhidao.baidu.com/question/224582151.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>20140827-幫曲仔寫APP-安裝環境篇 @ TK呱呱<br />
<address><a href="http://gienmin.blogspot.tw/2014/08/20140827-app.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://gienmin.blogspot.tw/2014/08/20140827-app.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3437/java-was-started-but-returned-exit-code-13/" data-wpel-link="internal">Java was started but returned exit code = 13</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3437/java-was-started-but-returned-exit-code-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0</title>
		<link>https://noter.tw/3104/java-lang-unsupportedclassversionerror-unsupported-major-minor-version-51-0/</link>
					<comments>https://noter.tw/3104/java-lang-unsupportedclassversionerror-unsupported-major-minor-version-51-0/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 18 Oct 2013 10:06:17 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[java.lang.UnsupportedClassVersionError]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[tomcat]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3104</guid>

					<description><![CDATA[<p>最近在做一些 struts2 的佈署，之前都是在 Windows 下進行，這次要佈署到遠端機器，OS 不同以及環境不同常造成一些怪異問題，這裡記錄一下如果遇到「java.lang.Unsupporte&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3104/java-lang-unsupportedclassversionerror-unsupported-major-minor-version-51-0/" data-wpel-link="internal">java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>最近在做一些 struts2 的佈署，之前都是在 Windows 下進行，這次要佈署到遠端機器，OS 不同以及環境不同常造成一些怪異問題，這裡記錄一下如果遇到「java.lang.UnsupportedClassVersionError」這個問題的解決方案！<br />
<span id="more-3104"></span><br />
在網路上查了一下，會造成這個原因是兩邊的 Java 版本不符，小蛙開發機上的 Java 是選擇 1.7，而遠端機器 Ubuntu 上面只有 Java 1.6，把整個 Struts2 專案的 war 丟進去之後就跑出以下這個錯誤：</p>
<pre>2013/10/17 上午 11:05:44 org.apache.catalina.core.StandardContext filterStart
嚴重的: Exception starting filter struts2
java.lang.UnsupportedClassVersionError: aaa/bbb/action/LoginAction : Unsupported major.minor version 51.0 (unable to load class aaa.bbb.action.LoginAction)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2824)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
        at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:144)
        at com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:108)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:472)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:426)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:543)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:292)
        at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
        at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:250)
        at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
        at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:429)
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:473)
        at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)
        at org.apache.catalina.core.ApplicationFilterConfig.&lt;init&gt;(ApplicationFilterConfig.java:98)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584)
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262)
        at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)</pre>
<p>解決方法是在 Eclipse -&gt; Project -&gt; Properties -&gt; Java Compiler -&gt; &nbsp;Compiler compliance level 1.6 這裡設定成符合的版本即可，但還是要注意不管是 1.6 or 1.7 如果有使用到特定版本的寫法，可能會出現一些錯誤喔！比較好的方法是讓本機端跟遠端不管是 JDK 或 Tomcat 版本一致才是上策。(參考資料2)<br />
小蛙透過上面的方法設定不同版本的 JDK 後，Project -&gt; Clean 選擇剛剛變更過的專案，卻發生下面的錯誤：</p>
<pre>Java compiler level does not match the version of the installed Java project facet.
Faceted Project Problem (Java Version Mismatch)</pre>
<p>什麼是 Eclipse Project Facet？(from 參考資料1 :&nbsp;<a href="http://tomkuo139.blogspot.tw/2012/01/eclipse-project-facet.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Eclipse Project Facet 功能 @&nbsp;昭佑.天翔<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)</p>
<blockquote><p>Project Facets 只要是方便你 &#8220;快速擴充套件&#8221; 與 &#8220;控管套件版本&#8221;,<br />
只要你在 Project Facets 勾選要擴充的套件,<br />
Eclipse 會自動幫你將相關套件加入到&nbsp;Java Build Path / Web App Libraries&nbsp;(也就是&nbsp;WEB-INF/lib) 目錄中.</p></blockquote>
<p>上面的錯誤是因為我們調整的 Java Compiler 的版本，但是卻跟 Project Facet 設定的不一樣造成的，這邊只要到</p>
<pre>Project -&gt; Properties -&gt; Project Facets -&gt; Java -&gt; 1.6 設定成跟剛剛的 Compiler compliance&nbsp;level 相同即可！</pre>
<p><strong>參考資料：</strong></p>
<ol>
<li>Eclipse Project Facet 功能 @&nbsp;昭佑.天翔<br />
<address><a href="http://tomkuo139.blogspot.tw/2012/01/eclipse-project-facet.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://tomkuo139.blogspot.tw/2012/01/eclipse-project-facet.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Eclipse: java.lang.UnsupportedClassVersionError: Bad version number in .class file<br />
<address><a href="http://www.programcreek.com/2010/05/java-lang-unsupportedclassversionerror-bad-version-number-in-class-file/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.programcreek.com/2010/05/java-lang-unsupportedclassversionerror-bad-version-number-in-class-file/<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3104/java-lang-unsupportedclassversionerror-unsupported-major-minor-version-51-0/" data-wpel-link="internal">java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3104/java-lang-unsupportedclassversionerror-unsupported-major-minor-version-51-0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Struts2 設置筆記 (Hello World 級^^)</title>
		<link>https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/</link>
					<comments>https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 15:22:56 +0000</pubDate>
				<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[struts.xml]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[web.xml]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2905</guid>

					<description><![CDATA[<p>這篇文章是以前過去蛙齋中的文章(現在看到以前的文章覺得小蛙以前怎麼那麼勤勞，每個動作都附一張圖 &#8230;)，最近有一個新的案子使用了 Struts2 開發，對 Struts2 有比較深的了解，先&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/" data-wpel-link="internal">Struts2 設置筆記 (Hello World 級^^)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>這篇文章是以前過去蛙齋中的文章(現在看到以前的文章覺得小蛙以前怎麼那麼勤勞，每個動作都附一張圖 &#8230;)，最近有一個新的案子使用了 Struts2 開發，對 Struts2 有比較深的了解，先把這篇以前的文章記錄下來，之後再慢慢補上 Struts2 相關文章。<br />
<span id="more-2905"></span><br />
對 JSP 一天比一天熟悉，不過還沒擺脫「JSP菜鳥」的封號 &#8230;&nbsp;<img decoding="async" src="//pics.blog.yam.com/images/smiley/msn/taface10.gif" alt="taface10 Struts2 設置筆記 (Hello World 級^^)" title="Struts2 設置筆記 (Hello World 級^^)"> 這一陣子接觸 Struts2 的心得，在這邊記錄下來，免得到時候要重裝卻裝不起來 &gt;&lt; 附帶一提，原來 &#8230; MyEclipse 這麼好用，網路上的一些高手說的一點都沒錯，越便利的 IDE 會讓老手開發起來更快，卻會讓新手變得更白癡。<br />
使用環境：<br />
Tomcat 5.5<br />
MyEclipse 5.5.1 GA<br />
Struts 2.0.11<br />
步驟如下：<br />
1. 下載 Struts2 (<a href="http://struts.apache.org/2.x/index.html" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://struts.apache.org/2.x/index.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)<br />
<a title="000001.png" href="http://lh3.ggpht.com/-GRCzurxDUqg/UaxvSp3c5EI/AAAAAAAAHtA/T46cjzOTFig/s0/000001.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000001.png" src="//lh3.ggpht.com/-GRCzurxDUqg/UaxvSp3c5EI/AAAAAAAAHtA/T46cjzOTFig/w500-o/000001.png" alt="000001.png"></a><br />
2.&nbsp;選這個<br />
<a title="000002.png" href="http://lh3.ggpht.com/-4zesJsml9xA/UaxvSiIgAZI/AAAAAAAAHtE/W4vCvxvJsp0/s0/000002.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000002.png" src="//lh3.ggpht.com/-4zesJsml9xA/UaxvSiIgAZI/AAAAAAAAHtE/W4vCvxvJsp0/w500-o/000002.png" alt="000002.png"></a><br />
3.&nbsp;開啟 MyEclipse<br />
<a title="000003.png" href="http://lh4.ggpht.com/-pGkWJn77Ztg/UaxvSt1VhFI/AAAAAAAAHs8/4MbmG8krpdU/s0/000003.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000003.png" src="//lh4.ggpht.com/-pGkWJn77Ztg/UaxvSt1VhFI/AAAAAAAAHs8/4MbmG8krpdU/w500-o/000003.png" alt="000003.png"></a><br />
4.&nbsp;選擇工作區域<br />
<a title="000004.png" href="http://lh5.ggpht.com/-a4bID0pWmss/UaxvTRJfGII/AAAAAAAAHtY/aJ4zp4vYuJQ/s0/000004.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000004.png" src="//lh5.ggpht.com/-a4bID0pWmss/UaxvTRJfGII/AAAAAAAAHtY/aJ4zp4vYuJQ/w500-o/000004.png" alt="000004.png"></a><br />
5.&nbsp;MyEclipse 視窗<br />
<a title="000005.png" href="http://lh6.ggpht.com/-C1umEcO7Aco/UaxvTJWNPuI/AAAAAAAAHtU/2WAEQdIJwhY/s0/000005.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000005.png" src="//lh6.ggpht.com/-C1umEcO7Aco/UaxvTJWNPuI/AAAAAAAAHtU/2WAEQdIJwhY/w500-o/000005.png" alt="000005.png"></a><br />
<a title="000006.png" href="http://lh3.ggpht.com/-2wt4CCCthAc/UaxvTeY9-EI/AAAAAAAAHtc/DpMRnhp4oy0/s0/000006.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000006.png" src="//lh3.ggpht.com/-2wt4CCCthAc/UaxvTeY9-EI/AAAAAAAAHtc/DpMRnhp4oy0/w500-o/000006.png" alt="000006.png"></a><br />
6.&nbsp;新增專案<br />
<a title="000007.png" href="http://lh4.ggpht.com/-CKLsMnB8D88/UaxvTvDhEVI/AAAAAAAAHto/bCX8pI8hUmU/s0/000007.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000007.png" src="//lh4.ggpht.com/-CKLsMnB8D88/UaxvTvDhEVI/AAAAAAAAHto/bCX8pI8hUmU/w500-o/000007.png" alt="000007.png"></a><br />
<a title="000008.png" href="http://lh5.ggpht.com/-GjP93G0lkHs/UaxvT_wpjFI/AAAAAAAAHtw/Y_uLXxnLRas/s0/000008.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000008.png" src="//lh5.ggpht.com/-GjP93G0lkHs/UaxvT_wpjFI/AAAAAAAAHtw/Y_uLXxnLRas/w500-o/000008.png" alt="000008.png"></a><br />
7.&nbsp;輸入專案名稱(可以隨便打)，其他的直接用預設值不修改<br />
<a title="000009.png" href="http://lh6.ggpht.com/-ewbh0OW1Mkw/UaxvUEGhNYI/AAAAAAAAHt0/JNmQztr3ZGo/s0/000009.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000009.png" src="//lh6.ggpht.com/-ewbh0OW1Mkw/UaxvUEGhNYI/AAAAAAAAHt0/JNmQztr3ZGo/w500-o/000009.png" alt="000009.png"></a><br />
8.&nbsp;按下 finish 後，看到下圖，左邊有多出一個剛剛新建立的專案<br />
<a title="000010.png" href="http://lh4.ggpht.com/-LibugxKKq50/UaxvUWrKU3I/AAAAAAAAHt8/_CFVxhSzpGM/s0/000010.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000010.png" src="//lh4.ggpht.com/-LibugxKKq50/UaxvUWrKU3I/AAAAAAAAHt8/_CFVxhSzpGM/w500-o/000010.png" alt="000010.png"></a><br />
9.&nbsp;網頁直接放在 WebRoot 下面，且包含 META-INF 和 WEB-INF 資料夾<br />
<a title="000011.png" href="http://lh4.ggpht.com/-tyPmRzxNxwA/UaxvUYeSfAI/AAAAAAAAHuE/EsJzEDQqil8/s0/000011.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000011.png" src="//lh4.ggpht.com/-tyPmRzxNxwA/UaxvUYeSfAI/AAAAAAAAHuE/EsJzEDQqil8/w500-o/000011.png" alt="000011.png"></a><br />
10.&nbsp;編輯&nbsp;Tomcat 安裝資料夾<strong>&nbsp;<span style="color: #ff0000;">/conf/server.xml</span>&nbsp;</strong>檔案<br />
<a title="000012.png" href="http://lh3.ggpht.com/-P8CpJTqL5IM/UaxvUux4LyI/AAAAAAAAHuQ/Ny9ebAlUyVk/s0/000012.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000012.png" src="//lh3.ggpht.com/-P8CpJTqL5IM/UaxvUux4LyI/AAAAAAAAHuQ/Ny9ebAlUyVk/w500-o/000012.png" alt="000012.png"></a><br />
11.&nbsp;找到文件最後輸入<span style="color: #ff0000;">&nbsp;<strong>&lt;Context path=&#8221;struts&#8221; docBase=&#8221;C:\Web\blog\WebRoot&#8221; reloadable=&#8221;true&#8221; /&gt;</strong></span>，docBase 看剛剛 MyEclipse 建立專案的時候放在哪，就設置其下的 WebRoot 。注意，下面一定要看到&nbsp;<strong><span style="color: #ff00ff;">&lt;/Host&gt; &lt;/Engine&gt; &lt;/Service&gt; &lt;/Server&gt;</span>&nbsp;</strong>千萬別弄錯。<br />
<a title="000013.png" href="http://lh6.ggpht.com/-tQ28HygrvZQ/UaxvUlPvc5I/AAAAAAAAHuM/R66YzQIQaJs/s0/000013.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000013.png" src="//lh6.ggpht.com/-tQ28HygrvZQ/UaxvUlPvc5I/AAAAAAAAHuM/R66YzQIQaJs/w500-o/000013.png" alt="000013.png"></a><br />
12.&nbsp;在 Tomcat 安裝目錄下 / bin /&nbsp;的<span style="color: #ff0000;">&nbsp;</span><strong><span style="color: #ff0000;">tomcat5.exe</span>&nbsp;</strong>(tomcat5w.exe也可以，看自己習慣)，小蛙把 tomcat5.exe 建立捷徑，拉到開始旁邊的快捷列，重啟 SERVER 快很多 ^^<br />
<a title="000014.png" href="http://lh4.ggpht.com/-jdfty2-2Ykc/UaxvU8x49sI/AAAAAAAAHuU/SxfiSsPHFu8/s0/000014.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000014.png" src="//lh4.ggpht.com/-jdfty2-2Ykc/UaxvU8x49sI/AAAAAAAAHuU/SxfiSsPHFu8/w500-o/000014.png" alt="000014.png"></a><br />
13.&nbsp;啟動 Tomcat，tomcat5.exe會看到下面第一張圖，tomcat5w.exe可以看到第二張圖。<br />
<a title="000015.png" href="http://lh3.ggpht.com/--2GbJmonAnQ/UaxvVetBSUI/AAAAAAAAHuk/b0oHOgVBjMo/s0/000015.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000015.png" src="//lh3.ggpht.com/--2GbJmonAnQ/UaxvVetBSUI/AAAAAAAAHuk/b0oHOgVBjMo/w500-o/000015.png" alt="000015.png"></a><br />
如果要讓 Tomcat 開機自動啟動，選擇 Automatic，這樣每次開機就會自行啟動了，不過小蛙覺得用上一張圖的做法會比較快速且方便。<br />
<a title="000016.png" href="http://lh4.ggpht.com/-sTbtKpjOMEg/UaxvVab67_I/AAAAAAAAHug/k1MaT5ANUeQ/s0/000016.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000016.png" src="//lh4.ggpht.com/-sTbtKpjOMEg/UaxvVab67_I/AAAAAAAAHug/k1MaT5ANUeQ/w500-o/000016.png" alt="000016.png"></a><br />
14.&nbsp;啟動之後，開啟瀏覽器，在網址列輸入&nbsp;<a href="http://localhost/struts/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right"><strong>http://localhost/struts</strong>/<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;(Tomcat 預設 port 為 8080，所以如果沒改過設定的話，這邊要輸入&nbsp;<a href="http://localhost:8080/struts/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right"><strong>http://localhost:8080/struts/</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;)可以看到 「This is my JSP page.」，這是剛剛新增專案的時候，MyEclipse 幫我們建立的 index.jsp 檔案。如果顯示「Internet Explorer 無法顯示網頁」，可能是 Tomcat 沒有啟動成功；如果顯示下圖，可能是路徑OR檔名打錯。<br />
<a title="000017.png" href="http://lh4.ggpht.com/-SWmlcMm4DhA/UaxvW1NAFgI/AAAAAAAAHvQ/vpKlFawnPY0/s0/000017.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000017.png" src="//lh4.ggpht.com/-SWmlcMm4DhA/UaxvW1NAFgI/AAAAAAAAHvQ/vpKlFawnPY0/w500-o/000017.png" alt="000017.png"></a><br />
15.&nbsp;練習一個登入的範例，新增表單，文字、密碼欄位跟按鈕，如下：</p>
<pre class="brush: html; gutter: true">&lt;form name="form1" action="" method="post"&gt;
帳號 ：&lt;input type="text" name="name"&gt;&lt;br&gt;
密碼：&lt;input type="password" name="pass"&gt;&lt;br&gt;
&lt;input type="submit" value="送出"&gt;
&lt;/form&gt;</pre>
<p>HTML 的細節就不再贅述了，其中 action 部份小蛙留空白，等等再來填。在瀏覽器中可以看到<br />
<a title="000018.png" href="http://lh6.ggpht.com/-t_QRuQgizCM/UaxvWMmdw8I/AAAAAAAAHuw/HOI_K-dNpl0/s0/000018.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000018.png" src="//lh6.ggpht.com/-t_QRuQgizCM/UaxvWMmdw8I/AAAAAAAAHuw/HOI_K-dNpl0/w500-o/000018.png" alt="000018.png"></a>16.&nbsp;要使用 struts2 必須先設定&nbsp;<span style="color: #ff0000;"><strong>WEB-INF / web.xml</strong></span>，詳細設定請參閱&nbsp;<span style="color: #3366ff;"><strong><span style="color: #3366ff;"><a href="http://wazai.net/2902/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">中文亂碼總整理 (Tomcat 5.5)<span class="wpel-icon wpel-image wpel-icon-6"></span></a></span></strong><span style="color: #000000;">。</span></span>如果懶得自已 key 可以直接到文章底下載來用，第一個 filter 是解決中文亂碼的問題，第二個 filter 是為了讓 struts2 能夠正常運作。<br />
<a title="000019.png" href="http://lh3.ggpht.com/-APpN_RhByys/UaxvWIUmN3I/AAAAAAAAHu4/s2o2bSOFBF8/s0/000019.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000019.png" src="//lh3.ggpht.com/-APpN_RhByys/UaxvWIUmN3I/AAAAAAAAHu4/s2o2bSOFBF8/w500-o/000019.png" alt="000019.png"></a><br />
17.&nbsp;將下載完的 struts2 解壓縮後，進入<span style="color: #ff0000;">&nbsp;</span><strong><span style="color: #ff0000;">struts-2.0.11 \ lib</span>&nbsp;</strong>下，找到&nbsp;<span style="color: #ff0000;"><strong>commons-logging-1.0.4.jar</strong></span>、<span style="color: #ff0000;"><strong>freemarker-2.3.8.jar</strong></span>、<span style="color: #ff0000;"><strong>ognl-2.6.11.jar</strong></span>、<span style="color: #ff0000;"><strong>struts2-core-2.0.12.jar</strong></span>、<span style="color: #ff0000;"><strong>xwork-2.0.6.jar</strong></span>，將這五個 jar 複製到網站目錄下的&nbsp;<strong><span style="color: #ff0000;">WEB-INF \ lib</span>&nbsp;</strong>裡，以剛剛的例子是&nbsp;<span style="color: #ff0000;"><strong>C:\Web\blog\WebRoot\WEB-INF\lib</strong></span>，(畫面上少一個~&#8221;~)<br />
<a title="000020.png" href="http://lh5.ggpht.com/-jjzrVovMYz0/UaxvWhdW3pI/AAAAAAAAHvM/tVG_3m64VZ4/s0/000020.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000020.png" src="//lh5.ggpht.com/-jjzrVovMYz0/UaxvWhdW3pI/AAAAAAAAHvM/tVG_3m64VZ4/w500-o/000020.png" alt="000020.png"></a><br />
18.&nbsp;在 MyEclipse 左邊的 struts 專案中，按滑鼠右鍵點選&nbsp;<span style="color: #ff0000;"><strong>Refresh(F5)</strong></span><br />
<a title="000021.png" href="http://lh3.ggpht.com/-E2EZkB-6ISk/UaxvW8DfVVI/AAAAAAAAHvU/MvZTa86d92M/s0/000021.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000021.png" src="//lh3.ggpht.com/-E2EZkB-6ISk/UaxvW8DfVVI/AAAAAAAAHvU/MvZTa86d92M/w500-o/000021.png" alt="000021.png"></a><br />
會變成下圖，可以看到剛剛載入的 jar 檔案，到這裡 struts2 的配置就差不多完成囉!! 接著，來試試看 struts2 是否能正常運作<br />
<a title="000022.png" href="http://lh4.ggpht.com/-dM9r1QbPyqQ/UaxvXUgqErI/AAAAAAAAHvk/x3bCvy0m3Jc/s0/000022.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000022.png" src="//lh4.ggpht.com/-dM9r1QbPyqQ/UaxvXUgqErI/AAAAAAAAHvk/x3bCvy0m3Jc/w500-o/000022.png" alt="000022.png"></a><br />
19.&nbsp;struts2 的控制全靠 .action (也就是 form 剛剛留空白要填的部份)，我們將這個登入的 action 叫做 Login.action，把剛剛 form 後面的&nbsp;<strong><span style="color: #ff0000;">action=&#8221;<strong>Login.action</strong>&#8220;</span>&nbsp;</strong>補上。<br />
<a title="000023.png" href="http://lh5.ggpht.com/-Ok5bAmhf0rI/UaxvXeTzadI/AAAAAAAAHvg/w0soqiuHwnI/s0/000023.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000023.png" src="//lh5.ggpht.com/-Ok5bAmhf0rI/UaxvXeTzadI/AAAAAAAAHvg/w0soqiuHwnI/w500-o/000023.png" alt="000023.png"></a><br />
20.&nbsp;在 struts 下的 src 資料夾上按滑鼠右鍵新增 package<br />
<a title="000024.png" href="http://lh3.ggpht.com/-ugeqyFWEwXk/UaxvXt8cyfI/AAAAAAAAHvo/1lkShw5DBPE/s0/000024.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000024.png" src="//lh3.ggpht.com/-ugeqyFWEwXk/UaxvXt8cyfI/AAAAAAAAHvo/1lkShw5DBPE/w500-o/000024.png" alt="000024.png"></a><br />
<a title="000025.png" href="http://lh6.ggpht.com/-8TvMEIARQ4U/UaxvXzgmbPI/AAAAAAAAHvw/CjOmJqoveIM/s0/000025.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000025.png" src="//lh6.ggpht.com/-8TvMEIARQ4U/UaxvXzgmbPI/AAAAAAAAHvw/CjOmJqoveIM/w500-o/000025.png" alt="000025.png"></a><br />
21.&nbsp;假設名字輸入&nbsp;<span style="color: #ff00ff;"><strong>com.local</strong></span><br />
<a title="000026.png" href="http://lh5.ggpht.com/-5BgHidC8htc/UaxvYAE0e0I/AAAAAAAAHv0/KO8Ar9jbmI8/s0/000026.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000026.png" src="//lh5.ggpht.com/-5BgHidC8htc/UaxvYAE0e0I/AAAAAAAAHv0/KO8Ar9jbmI8/w500-o/000026.png" alt="000026.png"></a><br />
22.&nbsp;在新增的 com.local 再新增一個 Class file<br />
<a title="000027.png" href="http://lh4.ggpht.com/-PIIXCGuPx9w/UaxvYbn-eII/AAAAAAAAHv8/2fUhPJIsB4c/s0/000027.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000027.png" src="//lh4.ggpht.com/-PIIXCGuPx9w/UaxvYbn-eII/AAAAAAAAHv8/2fUhPJIsB4c/w500-o/000027.png" alt="000027.png"></a><br />
23.&nbsp;Name 的地方輸入我們要建立 action 的名稱(也就是剛剛的 form 要送出的地方 Login)，接著按右邊的 Browser<br />
<a title="000028.png" href="http://lh5.ggpht.com/-SZSBCnBulw4/UaxvYohW4aI/AAAAAAAAHv4/q95eVqhKfSY/s0/000028.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000028.png" src="//lh5.ggpht.com/-SZSBCnBulw4/UaxvYohW4aI/AAAAAAAAHv4/q95eVqhKfSY/w500-o/000028.png" alt="000028.png"></a><br />
24.&nbsp;在空格裡輸入 actionsupport，是我們要繼承的套件<br />
<a title="000029.png" href="http://lh3.ggpht.com/-XyAJIKbgFaQ/UaxvZIgGkCI/AAAAAAAAHwE/axOFAMp0TGQ/s0/000029.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000029.png" src="//lh3.ggpht.com/-XyAJIKbgFaQ/UaxvZIgGkCI/AAAAAAAAHwE/axOFAMp0TGQ/w500-o/000029.png" alt="000029.png"></a><br />
25.&nbsp;MyEclipse 會自己產生部份程式碼<br />
<a title="000030.png" href="http://lh4.ggpht.com/-JZ3QrXlWAKY/UaxvZZzWHJI/AAAAAAAAHwI/GY_s4B-veW0/s0/000030.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000030.png" src="//lh4.ggpht.com/-JZ3QrXlWAKY/UaxvZZzWHJI/AAAAAAAAHwI/GY_s4B-veW0/w500-o/000030.png" alt="000030.png"></a><br />
26.&nbsp;輸入以下內容</p>
<pre class="brush: java; gutter: true">private String name;
private String pass;
public String execute() throws Exception{
    return SUCCESS;
}
//下面的部份，可以自己寫，也可以直接用 MyEclipse 產生 (所以讓初學者變笨 &gt;&lt; 我就是 ...)
public String getName(){
    return name;
}
public void setName(String name){
    this.name = name;
}
public String getPass(){
    return pass;
}
public void setPass(String pass){
    this.pass = pass;
}</pre>
<p>27.&nbsp;自動產生的方法：<span style="color: #ff0000;"><strong>Source -&gt; Generate Getters and Setters</strong></span><br />
<a title="000031.png" href="http://lh6.ggpht.com/-E5W9xG6UFOI/UaxvZRWMMdI/AAAAAAAAHwU/ComwCfVxibs/s0/000031.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000031.png" src="//lh6.ggpht.com/-E5W9xG6UFOI/UaxvZRWMMdI/AAAAAAAAHwU/ComwCfVxibs/w500-o/000031.png" alt="000031.png"></a><br />
28.&nbsp;可以看到剛剛建立的變數名稱，把它們都打勾，按下OK<br />
<a title="000032.png" href="http://lh5.ggpht.com/-p8K89liJwrg/UaxvZshuvoI/AAAAAAAAHwc/zNHJ3J2pJS4/s0/000032.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000032.png" src="//lh5.ggpht.com/-p8K89liJwrg/UaxvZshuvoI/AAAAAAAAHwc/zNHJ3J2pJS4/w500-o/000032.png" alt="000032.png"></a><br />
29.&nbsp;幾乎所有內容，MyEclipse 都幫忙產生了 @@<br />
<a title="000033.png" href="http://lh3.ggpht.com/-9Rhcqsc0H6U/UaxvZ0rznRI/AAAAAAAAHwg/VLy-DDItNh8/s0/000033.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000033.png" src="//lh3.ggpht.com/-9Rhcqsc0H6U/UaxvZ0rznRI/AAAAAAAAHwg/VLy-DDItNh8/w500-o/000033.png" alt="000033.png"></a><br />
30.&nbsp;再來編輯輸入完帳號密碼後，轉向的頁面(這邊用result.jsp當例子)，在 WebRoot 下按右鍵 -&gt; New -&gt; JSP<br />
<a title="000034.png" href="http://lh5.ggpht.com/-dlhWlgW1lv4/UaxvaBa4bTI/AAAAAAAAHww/oXlDvgXoeC8/s0/000034.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000034.png" src="//lh5.ggpht.com/-dlhWlgW1lv4/UaxvaBa4bTI/AAAAAAAAHww/oXlDvgXoeC8/w500-o/000034.png" alt="000034.png"></a><br />
31.&nbsp;檔名改為&nbsp;<span style="color: #ff00ff;"><strong>result.jsp</strong></span><br />
<a title="000035.png" href="http://lh3.ggpht.com/-P6sQ9BoNJ6c/UaxvaevdLMI/AAAAAAAAHws/h2ru1Q2YZzg/s0/000035.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000035.png" src="//lh3.ggpht.com/-P6sQ9BoNJ6c/UaxvaevdLMI/AAAAAAAAHws/h2ru1Q2YZzg/w500-o/000035.png" alt="000035.png"></a><br />
32.&nbsp;輸入以下內容</p>
<pre class="brush: html; gutter: true">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
&lt;html&gt;
  &lt;head&gt;
  &lt;/head&gt;
  &lt;body&gt;
 姓名為:  &lt;s:property value="name"/&gt; &lt;br&gt;
 密碼是:  &lt;s:property value="pass"/&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p>這邊我們使用 struts2 的標籤(第2行宣告)，<strong><span style="color: #ff0000;">&lt;s:property value=&#8221;name&#8221; /&gt;</span>&nbsp;</strong>表示呼叫 Login.action 中的 getName() 方法來取得 name 的值；<span style="color: #ff0000;"><strong>&lt;s:property value=&#8221;pass&#8221; /&gt;</strong></span>&nbsp;同理。<br />
33.&nbsp;儲存之後，剩下最後一個工作，設定&nbsp;<span style="color: #ff0000;"><strong>struts.xml</strong></span>，這個檔案記錄了 action 跟 jsp 頁面的 mapping，在&nbsp;src 點選右鍵 -&gt; New -&gt; XML<br />
<a title="000036.png" href="http://lh5.ggpht.com/-tkRGvxkWTTE/UaxvaZ2HXjI/AAAAAAAAHw4/NuH1QsMdj00/s0/000036.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000036.png" src="//lh5.ggpht.com/-tkRGvxkWTTE/UaxvaZ2HXjI/AAAAAAAAHw4/NuH1QsMdj00/w500-o/000036.png" alt="000036.png"></a><br />
34.&nbsp;點選 Next，檔名輸入 struts.xml (千萬不能輸入錯誤，包括大小寫)<br />
<a title="000037.png" href="http://lh6.ggpht.com/-9ZXBY0m_thE/Uaxva-9ee-I/AAAAAAAAHxA/7dUgOGkpEAc/s0/000037.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000037.png" src="//lh6.ggpht.com/-9ZXBY0m_thE/Uaxva-9ee-I/AAAAAAAAHxA/7dUgOGkpEAc/w500-o/000037.png" alt="000037.png"></a><br />
<a title="000038.png" href="http://lh4.ggpht.com/-2vpe80i5lh0/UaxvbFZPdDI/AAAAAAAAHxI/lRLg2R0eqVY/s0/000038.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="000038.png" src="//lh4.ggpht.com/-2vpe80i5lh0/UaxvbFZPdDI/AAAAAAAAHxI/lRLg2R0eqVY/w500-o/000038.png" alt="000038.png"></a><br />
35.&nbsp;在 struts.xml 中輸入以下內容</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
&lt;struts&gt;
 &lt;package name="struts2" extends="struts-default"&gt;
  &lt;action name="Login" class="com.local.Login"&gt;
     &lt;result name="success"&gt;/result.jsp&lt;/result&gt;
  &lt;/action&gt;
 &lt;/package&gt;
&lt;/struts&gt;</pre>
<p>36.&nbsp;儲存之後，重新啟動 Tomcat，在網址列輸入&nbsp;<a href="http://localhost/struts/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://localhost/struts/<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;(or&nbsp;<a href="http://localhost:8080/struts/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://localhost:8080/struts/<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)，接著在頁面中輸入帳號跟密碼，送出之後，就可以在 Login.action 指向的 result.jsp 頁面顯示剛剛設定的內容。</p>
<p style="text-align: center;"><a title="000039.png" href="http://lh3.ggpht.com/-XOT5FKoJIJ8/UaxvbOJeCII/AAAAAAAAHxM/ylGGOi7pMuU/s0/000039.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="000039.png" src="//lh3.ggpht.com/-XOT5FKoJIJ8/UaxvbOJeCII/AAAAAAAAHxM/ylGGOi7pMuU/w500-o/000039.png" alt="000039.png"></a>&nbsp;&nbsp;<a title="000040.png" href="http://lh3.ggpht.com/-_UsIGwkTyTw/UaxvbWMFSGI/AAAAAAAAHxQ/pPRWC74ub9M/s0/000040.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="000040.png" src="//lh3.ggpht.com/-_UsIGwkTyTw/UaxvbWMFSGI/AAAAAAAAHxQ/pPRWC74ub9M/w500-o/000040.png" alt="000040.png"></a></p>
<p>37.&nbsp;開發 struts2 的流程，要傳資料的頁面(ex. index.jsp) -&gt; action file -&gt; 接收資料的頁面(ex. reslut.jsp) -&gt; struts.xml (把對應加上去) -&gt; 重新啟動 Tomcat &#8230;<br />
一方面記錄下來 = =，神經大條如我，經常忘記環境怎麼設定；一方面希望對剛接觸 struts2 的網友能夠有幫助(應該照著設定就能把環境弄好)。:D<br />
38. <a href="http://wazai.net/dn/struts2.rar" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">範例檔案下載<span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/" data-wpel-link="internal">Struts2 設置筆記 (Hello World 級^^)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2905/struts2-%e8%a8%ad%e7%bd%ae%e7%ad%86%e8%a8%98-hello-world-%e7%b4%9a/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>中文亂碼總整理 (Tomcat 5.5)</title>
		<link>https://noter.tw/2902/%e4%b8%ad%e6%96%87%e4%ba%82%e7%a2%bc%e7%b8%bd%e6%95%b4%e7%90%86-tomcat-5-5/</link>
					<comments>https://noter.tw/2902/%e4%b8%ad%e6%96%87%e4%ba%82%e7%a2%bc%e7%b8%bd%e6%95%b4%e7%90%86-tomcat-5-5/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 15:21:55 +0000</pubDate>
				<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[亂碼]]></category>
		<category><![CDATA[中文亂碼]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[charset]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2902</guid>

					<description><![CDATA[<p>之前舊的部落格發過幾篇解決 Tomcat 中文亂碼問題的文章，確實是解決了一些中文顯示的問題，但今天在 Struts2 時，又再度遇到中文亂碼的問題，所以想把幾個可能忽略的步驟記錄下來。 其實解決中文&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2902/%e4%b8%ad%e6%96%87%e4%ba%82%e7%a2%bc%e7%b8%bd%e6%95%b4%e7%90%86-tomcat-5-5/" data-wpel-link="internal">中文亂碼總整理 (Tomcat 5.5)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前舊的部落格發過幾篇解決 Tomcat 中文亂碼問題的文章，確實是解決了一些中文顯示的問題，但今天在 Struts2 時，又再度遇到中文亂碼的問題，所以想把幾個可能忽略的步驟記錄下來。</p>



<span id="more-2902"></span>



<p>其實解決中文亂碼，只要把所有的編碼格式都調整成一致，比如說，編輯器預設儲存編碼為 Big5，卻把頁面設定成 <code>&lt;%@ page contentType="text/html; charset=utf-8" %></code>，這樣一來，在瀏覽器開啟的網頁，中文就會是亂碼。(反過來也會是亂碼)。唯有兩者設定都是相同編碼的時候，在網頁上才能正確顯示中文。</p>



<p>上面提到，把所有的編碼都設成 Big5，這麼一來，也符合了「所有編碼都設為相同」的原則，當然包括編輯器預設儲存編碼也是 Big5，如此網頁可以正確顯示中文字，但是 &#8230; 如果後端需要加上 MySQL 資料庫，如何在表單跟 MySQL 之間正確傳遞中文，可能又會是一個花時間的問題，經過幾番折騰之後，決定把所有的編碼都設定為 utf-8 比較方便。</p>


<div id="rank-math-howto" class="rank-math-block" >
<div class="rank-math-howto-description">

</div>

<div class="rank-math-steps ">
<div id="howto-step-643e51f888560" class="rank-math-step">
<h3 class="rank-math-step-title ">編輯器預設儲存編碼 => 設定成 <strong>UTF-8</strong></h3>
<div class="rank-math-step-content "><p>以 EditPlus3 為例，可從「工具」->「偏好項」->「檔案」->「預設編碼模式」改成 UTF-8，<br />注意之前可能存成 Big5 的，可以按另存新檔後，最下面編碼模式可以改變。</p>
</div>
</div>
<div id="howto-step-643e51f888562" class="rank-math-step">
<h3 class="rank-math-step-title ">每個 JSP 頁面 charset 設定成 UTF-8</h3>
<div class="rank-math-step-content "><p>e.g. &lt;%@ page contentType=&#8221;text/html; charset=utf-8&#8243; %></p>
</div>
</div>
<div id="howto-step-643e51f888563" class="rank-math-step">
<h3 class="rank-math-step-title ">MySQL my.ini 設定成</h3>
<div class="rank-math-step-content ">[client]default-character-set=utf8<br />[mysqld]default-character-set=utf8</p>
</div>
</div>
<div id="howto-step-643e51f888564" class="rank-math-step">
<h3 class="rank-math-step-title ">資料庫、資料表及欄位的 <strong>character-set</strong> 設為 utf8，<strong>collation</strong>(校對)設定為utf8_unicode_ci。</h3>
<div class="rank-math-step-content "></div>
</div>
<div id="howto-step-643e51f888565" class="rank-math-step">
<h3 class="rank-math-step-title "><strong>資料庫連結部份</strong>修改</h3>
<div class="rank-math-step-content "><p>Connection con=DriverManager.getConnection(&#8220;jdbc:mysql://localhost/user?useUnicode=true&amp;characterEncoding=utf8&#8221;, &#8220;帳號&#8221;, &#8220;密碼&#8221;);</p>
</div>
</div>
<div id="howto-step-643e51f888566" class="rank-math-step">
<h3 class="rank-math-step-title ">Servlet 部份同樣把 <strong>charset</strong> 設定成 UTF-8</h3>
<div class="rank-math-step-content "><p>e.g. request.setContentType(&#8220;text/html; charset=utf-8&#8221;);</p>
</div>
</div>
<div id="howto-step-643e51f888567" class="rank-math-step">
<h3 class="rank-math-step-title ">GET 亂碼解決</h3>
<div class="rank-math-step-content "><p>在 %TOMCAT_HOME%\conf\server.xml 中，找到&lt;connector port=&#8221;8080&#8243; &#8230; 部分，加上 URIEncoding = &#8220;UTF-8&#8243;，重啟 Tomcat。</p>
</div>
</div>
<div id="howto-step-643e51f888568" class="rank-math-step">
<h3 class="rank-math-step-title ">POST 亂碼解決</h3>
<div class="rank-math-step-content "><p>若是有多個網站，將 %TOMCAT_HOME%\webapps\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class 複製到%TOMCAT_HOME%\shared\classes\filters 下，(若沒有資料夾可以自己新增)，修改 %TOMCAT_HOME%\webapps\(mytest)\WEB-INF\web.xml (mytest 為網站目錄)，加上以下內容 </p>
</div>
</div>
</div>
</div>


<pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;filter> 
  &lt;filter-name>SetCharacterEncoding&lt;/filter-name> 
  &lt;filter-class>filters.SetCharacterEncodingFilter&lt;/filter-class> 
  &lt;init-param> 
    &lt;param-name>encoding&lt;/param-name> 
    &lt;param-value>Big5&lt;/param-value> 
  &lt;/init-param> 
&lt;/filter> 
&lt;filter-mapping> 
  &lt;filter-name>SetCharacterEncoding&lt;/filter-name> 
  &lt;url-pattern>/*&lt;/url-pattern> 
&lt;/filter-mapping></pre>



<p>照著這些步驟做，應該就能有個能正確顯示中文的平台(或許吧！至少小蛙現在的環境就是)如果發現什麼問題，再隨時補上。</p>



<p><strong>2009/07/31 補充：<br></strong>在使用 Prototype.js 的 Updater / Requester function 時，編碼為 big5 傳遞中文會發生亂碼，<br>PHP 的解決方式 -> <code>header("Content-Type:text/html;charset=BIG5");</code><br>JSP 解決方式 ->  <code>response.setHeader("Charset","BIG5"); </code><br>這裡 AJAX 的傳遞方式要用 get。</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2902/%e4%b8%ad%e6%96%87%e4%ba%82%e7%a2%bc%e7%b8%bd%e6%95%b4%e7%90%86-tomcat-5-5/" data-wpel-link="internal">中文亂碼總整理 (Tomcat 5.5)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2902/%e4%b8%ad%e6%96%87%e4%ba%82%e7%a2%bc%e7%b8%bd%e6%95%b4%e7%90%86-tomcat-5-5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JSP 連結 MySQL</title>
		<link>https://noter.tw/2889/jsp-%e9%80%a3%e7%b5%90-mysql/</link>
					<comments>https://noter.tw/2889/jsp-%e9%80%a3%e7%b5%90-mysql/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 15:18:16 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[連結資料庫]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[connector]]></category>
		<category><![CDATA[JSP]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2889</guid>

					<description><![CDATA[<p>Java 連結 MySQL 的方法 記錄用Java連結MySQL資料庫的方法，這篇要介紹JSP如何連結MySQL。這篇文章是從舊部落格移到這邊記錄留存。步驟：安裝MySQL =&#62; 安裝ODBC &#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2889/jsp-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://noter.tw/2883" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Java 連結 MySQL 的方法</a> 記錄用Java連結MySQL資料庫的方法，這篇要介紹JSP如何連結MySQL。這篇文章是從舊部落格移到這邊記錄留存。<br /><span id="more-2889"></span><br />步驟：安裝MySQL =&gt; 安裝ODBC =&gt; 安裝JDBC。</p>
<ul>
<li>
<h2>安裝 MySQL</h2>
<ul>
<li>進入 MySQL 下載頁面，http://dev.mysql.com/downloads/mysql/5.0.html。</li>
<li>依自己的平台選擇下載類型，若是 Win 環境，可下載 Windows Essentials 安裝檔或是不包含安裝檔的 Without installer 這項。</li>
<li>下載完之後，擊點兩下開始安裝。(期間會有些 MySQL Server 的設定)</li>
</ul>
</li>
<li>
<h2>安裝 ODBC</h2>
<ul>
<li>下載 ODBC，http://dev.mysql.com/downloads/connector/odbc/5.1.html。</li>
<li>安裝 ODBC。</li>
<li>安裝完成後，開啟 &#8220;控制台&#8221; -&gt; &#8220;系統管理工具&#8221; -&gt; &#8220;資料來源(ODBC)&#8221;，之後切換到 &#8220;系統資料來源名稱&#8221; 頁面下，看是否有 &#8220;MySQL&#8221;，有的話表示安裝成功。</li>
<li>沒有的話，選擇右邊的 &#8220;新增&#8221; -&gt; &#8220;MySQL ODBC 5.1 Driver&#8221; -&gt; &#8220;完成&#8221;，到這裡會跳出一個 MySQL 設定的視窗，&#8221;Data Source Name&#8221; 隨便輸入，下面包括 &#8220;Server/Port/User/Password&#8221; 都依照安裝 MySQL 時的設定輸入，之後按下 &#8220;Test&#8221;，出現 &#8220;Connection Successful&#8221; 表示整個安裝已經完成了。</li>
</ul>
</li>
<li>
<h2>安裝 JDBC</h2>
<ul>
<li>下載 JDBC，http://dev.mysql.com/downloads/connector/j/5.1.html。</li>
<li>下載完成後解壓縮，找到裡面有個檔名是 &#8220;mysql-connector-java-5.1.6-bin.jar&#8221; 的資料，複製到 Tomcat 安裝目錄下的 &#8220;\shared\lib&#8221; 下。</li>
<li>設計 JSP 文件時，用以下指令就可以連結資料庫。
<pre class="brush: java; gutter: true">String JDBCDriver = "com.mysql.jdbc.Driver";
String strUrl = "jdbc:mysql://localhost:3306/test?user=root&amp;characterEncoding=big5"
Class.forName(JDBCDriver);
Connection con = DriverManager.getConnection(strUrl);</pre>
</li>
</ul>
</li>
</ul>
<p><strong>參考資料：</strong></p>
<ul>
<li style="list-style-type: none;">
<ol>
<li><a href="https://noter.tw/2883" data-wpel-link="internal">Java 連結 MySQL</a></li>
<li><a href="https://noter.tw/1988" data-wpel-link="internal">Java 連結遠端 MySQL</a></li>
</ol>
</li>
</ul>


<p><strong>MySQL / MariaDB / Oracle 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list">
<li><a href="https://noter.tw/12503/mariadb-json_extract-%e5%be%9e-json-%e6%ac%84%e4%bd%8d%e5%8f%96%e5%80%bc/" data-wpel-link="internal">MariaDB JSON_EXTRACT: 從 JSON 欄位取值</a></li>



<li><a href="https://noter.tw/12015/oracle-%e5%88%86%e7%b5%84%e7%b7%a8%e8%99%9f%e8%88%87%e5%85%a8%e6%8e%92%e5%ba%8f%e7%b7%a8%e8%99%9f-row_number-over-partition-by/" data-wpel-link="internal">Oracle, MySQL 分組編號與全排序編號 row_number, over, partition by</a></li>



<li><a href="https://noter.tw/3929/mysql-error-2003-hy000-%E7%84%A1%E6%B3%95%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A/" data-wpel-link="internal">MySQL ERROR 2003 (HY000) 無法遠端連線</a></li>



<li><a href="https://noter.tw/2889/jsp-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a></li>



<li><a href="https://noter.tw/2883/java-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a></li>



<li><a href="https://noter.tw/2306/mysql%E6%8E%92%E7%A8%8Bevent-scheduler/" data-wpel-link="internal">MySQL 排程(Event Scheduler)</a></li>



<li><a href="https://noter.tw/1988/java%E9%80%A3%E7%B5%90%E9%81%A0%E7%AB%AFmysql/" data-wpel-link="internal">Java 連結遠端 MySQL</a></li>



<li><a href="https://noter.tw/4508/mariadb-replication-%E8%A8%AD%E5%AE%9A/" data-wpel-link="internal">MariaDB Replication 設定</a></li>



<li><a href="https://noter.tw/122/java-php-%E6%8F%92%E5%85%A5-emoji-%E8%B3%87%E6%96%99%E5%88%B0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a></li>
</ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2889/jsp-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2889/jsp-%e9%80%a3%e7%b5%90-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 連結 MySQL</title>
		<link>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/</link>
					<comments>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 15:17:32 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[connector]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2883</guid>

					<description><![CDATA[<p>在寫程式需要連結到資料庫的時候，程式中必須要先有 Connector 及 Driver，MySQL 叫做 Connector/J，Oracle 則叫做 OJDBC。這篇文章是從舊部落格轉發過來，純粹當&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>在寫程式需要連結到資料庫的時候，程式中必須要先有 Connector 及 Driver，MySQL 叫做 Connector/J，Oracle 則叫做 OJDBC。這篇文章是從舊部落格轉發過來，純粹當做文件記錄。<br>
<span id="more-2883"></span><br>
1. 到<a href="http://dev.mysql.com/downloads/connector/j/5.0.html" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://dev.mysql.com/downloads/connector/j/5.0.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a>下載connector。 (看是用哪一版本自行更換)<br>
2. 解壓縮後，將 mysql-connector-java-5.0.4-bin.jar 複製到 jre 安裝目錄下的 \lib\ext<br>
例如：C:\Program Files\Java\jre1.5.0_09\lib\ext<br>
<span style="color: #ff0000;"><span style="color: #000000;">3.&nbsp;</span><strong>set classpath=.;C:\Program Files\Java\jre1.5.0_09\lib\ext\mysql-connector-java-5.0.4-bin.jar&nbsp;</strong><span style="color: #000000;">(這一步應該是不需要，只要在 IDE 中把 jar import 進專案就可以了，例如：eclipse 裡面設定 Java Build Path)</span></span><br>
4. 程式碼部分
</p>
<pre class="brush: java; gutter: true">String jdbc = "com.mysql.jdbc.Driver";               // 使用的 Driver
String url = "jdbc:mysql://localhost/資料庫名稱";     // 連結URL
String user = "帳號";
String pass = "密碼";
Class.forName(jdbc);
Connection con = DriverManager.getConnection(url,user,pass);</pre>
<p><span style="color: #ff00ff;">有件事要注意：電腦中同時有 jdk 及 jre，set classpath 及 connector 複製的路徑，當時設定 jdk 中的 jre 路徑， 仍沒辦法使用，改成 jre 才可使用。</span></p>


<p><strong>MySQL / MariaDB / Oracle 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list">
<li><a href="https://noter.tw/12503/mariadb-json_extract-%e5%be%9e-json-%e6%ac%84%e4%bd%8d%e5%8f%96%e5%80%bc/" data-wpel-link="internal">MariaDB JSON_EXTRACT: 從 JSON 欄位取值</a></li>



<li><a href="https://noter.tw/12015/oracle-%e5%88%86%e7%b5%84%e7%b7%a8%e8%99%9f%e8%88%87%e5%85%a8%e6%8e%92%e5%ba%8f%e7%b7%a8%e8%99%9f-row_number-over-partition-by/" data-wpel-link="internal">Oracle, MySQL 分組編號與全排序編號 row_number, over, partition by</a></li>



<li><a href="https://noter.tw/3929/mysql-error-2003-hy000-%E7%84%A1%E6%B3%95%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A/" data-wpel-link="internal">MySQL ERROR 2003 (HY000) 無法遠端連線</a></li>



<li><a href="https://noter.tw/2889/jsp-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">JSP 連結 MySQL</a></li>



<li><a href="https://noter.tw/2883/java-%E9%80%A3%E7%B5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a></li>



<li><a href="https://noter.tw/2306/mysql%E6%8E%92%E7%A8%8Bevent-scheduler/" data-wpel-link="internal">MySQL 排程(Event Scheduler)</a></li>



<li><a href="https://noter.tw/1988/java%E9%80%A3%E7%B5%90%E9%81%A0%E7%AB%AFmysql/" data-wpel-link="internal">Java 連結遠端 MySQL</a></li>



<li><a href="https://noter.tw/4508/mariadb-replication-%E8%A8%AD%E5%AE%9A/" data-wpel-link="internal">MariaDB Replication 設定</a></li>



<li><a href="https://noter.tw/122/java-php-%E6%8F%92%E5%85%A5-emoji-%E8%B3%87%E6%96%99%E5%88%B0-mariadb/" data-wpel-link="internal">Java / PHP 插入 emoji 資料到 MariaDB</a></li>
</ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/" data-wpel-link="internal">Java 連結 MySQL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2883/java-%e9%80%a3%e7%b5%90-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>java.io.IOException: The character &#039; &#039; is an invalid XML character</title>
		<link>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/</link>
					<comments>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sun, 19 May 2013 06:27:21 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java.io.IOException]]></category>
		<category><![CDATA[The character ' ' is an invalid XML character]]></category>
		<category><![CDATA[Xerces]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLChar]]></category>
		<category><![CDATA[特殊字元]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2864</guid>

					<description><![CDATA[<p>小蛙的工作常常需要做一些資料庫匯出成 XML 格式，以 XML 達到交換資料的目的，上星期匯出的時候發現 java.io.IOException: The character &#8216; &#82&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/" data-wpel-link="internal">java.io.IOException: The character &#039; &#039; is an invalid XML character</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>小蛙的工作常常需要做一些資料庫匯出成 XML 格式，以 XML 達到交換資料的目的，上星期匯出的時候發現<span style="color: #ff0000;"><strong> java.io.IOException: The character &#8216; &#8216; is an invalid XML character</strong></span> 這個 Exception，發生錯誤的檔案因為這個特殊字元導致 XML 匯出不完整，上網查了一些解決辦法記錄在這篇文章中。<br />
<span id="more-2864"></span><br />
一開始發生這個例外的時候，並沒有發現匯出的 XML 檔案是不完整的，直到最近再次處理相同資料要給同事進 Solr 的時候才發現這個問題，在 Stack Overflow 看到<a href="http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這篇文章<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，才知道其實要做到驗證字元是否合法的方法， Xerces 套件裡面早已經有了，以下方法來自該篇文章：</p>
<pre class="brush: java; gutter: true">/* from http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java */
public static String stripInvalidXmlCharacters(String input) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i &lt; input.length(); i++) {
        char c = input.charAt(i);
        if (XMLChar.isValid(c)) {
            sb.append(c);
        }
    }
    return sb.toString();
}</pre>
<p>只要新增以上方法，透過 Xerces 中的 XMLChar.charAt(int); 方法就可以驗證該傳入的字元是否合法！<br />
附帶一提，在 Xerces 之前的版本，只需要用到 xerces.jar 就可以了，在比較新的版本似乎要載入以下 JAR 檔：resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar。<br />
<strong>參考資料：</strong></p>
<ol>
<li>The Apache XercesTM Project<br />
<address><a href="http://xerces.apache.org/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://xerces.apache.org/<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>The character &#8216;&#8217; is an invalid XML character exception getting while export data in XML file @ XML forum at JavaRanch<br />
<address><a href="http://www.coderanch.com/t/477874/XML/character-invalid-XML-character-exception" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.coderanch.com/t/477874/XML/character-invalid-XML-character-exception<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Stripping Invalid XML characters in Java @ Stack Overflow<br />
<address><a href="http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>使用SAX處理XML檔案 @ JavaWorld@TW <span style="color: #ff0000;">(連結已失效)</span><br />
<address>http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=492</address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/" data-wpel-link="internal">java.io.IOException: The character &#039; &#039; is an invalid XML character</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2864/java-io-ioexception-the-character-is-an-invalid-xml-character/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記</title>
		<link>https://noter.tw/2418/struts-1-3-spring-3-2-hibernate-3-6-%e9%8c%af%e8%aa%a4%e7%ad%86%e8%a8%98/</link>
					<comments>https://noter.tw/2418/struts-1-3-spring-3-2-hibernate-3-6-%e9%8c%af%e8%aa%a4%e7%ad%86%e8%a8%98/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 02 Nov 2012 13:58:51 +0000</pubDate>
				<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[亂碼]]></category>
		<category><![CDATA[ClassNotFoundException]]></category>
		<category><![CDATA[getDataSource]]></category>
		<category><![CDATA[jndi]]></category>
		<category><![CDATA[Servlet]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2418</guid>

					<description><![CDATA[<p>買了一本「王者歸來 Java Web 整合開發 (第二版)」，書中包含了 JSP + Servlet + Struts + Hibernate + Spring 等的教學及範例，K了一個星期後，發現最&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2418/struts-1-3-spring-3-2-hibernate-3-6-%e9%8c%af%e8%aa%a4%e7%ad%86%e8%a8%98/" data-wpel-link="internal">Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>買了一本「<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010553897" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>王者歸來 Java Web 整合開發 (第二版)</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>」，書中包含了 JSP + Servlet + Struts + Hibernate + Spring 等的教學及範例，K了一個星期後，發現最困難的部份竟然在環境架設上，光是環境架設就花了好長的時間，再來是設定檔，小蛙的 Eclipse 有些設定檔的 auto-complete 跑不出東西，加上每個版本的套件下載下來後的 Jar 檔、設定檔都不相同，不同版本的整合方式也不同 &#8230; 花了很久的時間在環境架設及設定檔上，這篇文章不記錄完整經過(忘的差不多了)，只挑著把過程中要注意的事情及錯誤記錄下來。<br />
<span id="more-2418"></span></p>
<ol>
<li>
<h4>隱藏 .jsp 頁面，對外以 .do 為主</h4>
<p>將 jsp 頁面通通放在 <strong><span style="color: #ff0000;">WEB-INF</span></strong> 底下，可自行建立其他分類資料夾，ex. pages, pages/admin, pages/member &#8230; 等。並且在 <strong><span style="color: #ff0000;">struts-conf.xml</span></strong> 中設定</p>
<pre class="brush: xml; gutter: true">&lt;action-mappings&gt;
    &lt;action path="/index" type="org.apache.struts.actions.ForwardAction" parameter="/WEB-INF/pages/index.jsp"&gt;&lt;/action&gt;
&lt;/action-mappings&gt;</pre>
</li>
<li>
<h4>java.lang&nbsp;ClassNotFoundException 各式各樣怪怪的情況</h4>
<p>這情況太容易出現了，小蛙原本使用 Eclipse IDE 裡面自訂 <span style="color: #3366ff;">User Library</span> 的功能，卻一直報錯，最後把所有會用到的 Spring, Struts Jar 通通放在 <strong><span style="color: #ff0000;">Web/WEB-INF/lib</span></strong> 下，這些怪裡怪氣的錯誤就自己消失了 &#8230;</li>
<li>
<h4>亂碼處理</h4>
<p>這應該是最容易遇到的問題，有幾項前提要先遵守：</p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>R1. &nbsp;必須先將每一頁 JSP 或每一個 Servelt 設定成 <span style="color: #ff0000;"><strong>UTF-8 編碼</strong></span>(小蛙直接用 UTF-8 編碼，可以省掉 BIG5 的一些麻煩)，如果是 Eclipse 專案請確定專案編碼為 UTF-8，有些文字編輯器可以看到目前檔案編碼。</p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>R2. 設定 JSP 表頭：<br />
<span style="color: #ff0000;"><strong>&nbsp; &nbsp; &nbsp; &nbsp; &lt;%@ page language=&#8221;java&#8221; contentType=&#8221;text/html; charset=UTF-8&#8243; pageEncoding=&#8221;UTF-8&#8243;%&gt;</strong></span></p></blockquote>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>R3. html meta：<br />
<span style="color: #ff0000;"><strong>&nbsp; &nbsp; &nbsp; &nbsp; &lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243;&gt;</strong></span></p></blockquote>
<p>以上三個一定要指定同一編碼，確定之後接下來四種方法只要選一種來做就可以了：</p>
<ul>
<li>
<h5>勤勞工人法：</h5>
<p>在每個 JSP 頁面及每個 Servelt 中設定</p>
<pre class="brush: java; gutter: true">request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");</pre>
</li>
<li>
<h5>源頭搞定法：</h5>
<p>使用 tomcat 預設過濾器 (在 <span style="color: #ff0000;"><strong>Tomcat安裝目錄/conf/ web.xml</strong></span> 中解開註解)</p>
<pre class="brush: xml; gutter: true">&lt;filter&gt;
    &lt;filter-name&gt;setCharacterEncodingFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.apache.catalina.filters.SetCharacterEncodingFilter&lt;/filter-class&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;encoding&lt;/param-name&gt;
        &lt;param-value&gt;UTF-8&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;async-supported&gt;true&lt;/async-supported&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
    &lt;filter-name&gt;setCharacterEncodingFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre>
</li>
<li>
<h5>自我肯定法：</h5>
<p>自定義過濾器<br />
<strong>CharacterEncodingFilter.java</strong></p>
<pre class="brush: java; gutter: true">package com.hans.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
	private String characterEncoding;
	@Override
	public void init(FilterConfig config) throws ServletException {
		characterEncoding = config.getInitParameter("encoding");
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding(characterEncoding);
		response.setCharacterEncoding(characterEncoding);
		chain.doFilter(request, response);
	}
	@Override
	public void destroy() {
		characterEncoding = null;
	}
}</pre>
<p>web 下的 <strong>web.xml</strong> 加入對應</p>
<pre class="brush: xml; gutter: true">&lt;filter&gt;
    &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;com.hans.filter.CharacterEncodingFilter&lt;/filter-class&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;encoding&lt;/param-name&gt;
        &lt;param-value&gt;utf-8&lt;/param-value&gt;
    &lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
    &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre>
</li>
<li>
<h5>套件嵌用法：</h5>
<p>使用 Spring 過濾器</p>
<pre class="brush: xml; gutter: true">&lt;filter&gt;
    &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;encoding&lt;/param-name&gt;
            &lt;param-value&gt;utf-8&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;init-param&gt;
        &lt;param-name&gt;forceEncoding&lt;/param-name&gt;
      	&lt;param-value&gt;true&lt;/param-value&gt;
    &lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
    &lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre>
<p>以上幾種方法可以挑選適用於自己的方法來用，勤勞工人法是比較累一點，每一頁都要記得檢查，不然就可能在表單傳遞的時候發生亂碼。</li>
</ul>
</li>
<li>
<h4>JNDI 錯誤</h4>
<pre>javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"</pre>
<p>明明設定上沒有什麼問題，卻發生以上 exception，設定檔如下(MySQL)：</p>
<pre class="brush: xml; gutter: true">&lt;Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
	   maxActive="5" maxIdle="2" maxWait="60"
	   username="your_account" password="your_password" driverClassName="com.mysql.jdbc.Driver"
	   url="jdbc:mysql://your_domain:3306/your_database?characterEncoding=UTF-8"/&gt;</pre>
<p class="brush: xml; gutter: true">不管設定在 <span style="color: #ff0000;"><strong>server.xml</strong></span> 的&nbsp;<span style="color: #ff0000;"><strong>&lt;GlobalNamingResources&gt;</strong></span> 標籤中、設定在 <span style="color: #ff0000;"><strong>&lt;Host&gt;</strong></span> 標籤下或是設定在 <span style="color: #ff0000;"><strong>localhost/context.xml</strong></span> 下都會出現上面的錯誤，如果有遇到這樣問題的網友，試試看設定在 <span style="color: #ff0000;"><strong>Tomcat安裝目錄/conf/context.xml</strong></span> 裡面就不會發生這個錯誤囉！如果用這個方法要把&nbsp;<strong>mysql-connector-java-5.1.22-bin.jar</strong> 複製到&nbsp;<span style="color: #ff0000;"><strong>Tomcat安裝目錄/conf/ </strong></span>資料夾下。</p>
<p class="brush: xml; gutter: true">在 Spring 中加入上述 DataSource，可以供其他部份使用(透過 id 指定)</p>
<pre class="brush: xml; gutter: true">&lt;!-- 吃 tomcat 內部設定的 jndi 不然就要自己設定 --&gt;
&lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;
    &lt;property name="jndiName" value="java:comp/env/jdbc/TestDB"&gt;&lt;/property&gt;
&lt;/bean&gt;</pre>
</li>
<li>
<h4>Struts 標籤設定</h4>
<p>前面提到書上的範例是寫</p>
<pre class="brush: java; gutter: true">&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %&gt;</pre>
<p class="brush: java; gutter: true">Eclipse 頻頻出現錯誤訊息，後來才查到 1.3 版要改成以下才可以使用</p>
<pre class="brush: java; gutter: true">&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %&gt;
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %&gt;</pre>
</li>
<li>
<h4>struts-conf.xml 錯誤</h4>
<p>如果使用 1.3 的表頭檔是沒辦法設定標籤的</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts-config
	PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
	"http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;</pre>
<p class="brush: xml; gutter: true">要把它改成 1.2 版本的，並且要<span style="color: #ff0000;"><strong>注意每個 tag 之間的順序</strong></span>，這邊出錯的時候 Eclipse 會列出順序，照著排就可以了。</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts-config
	PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
	"http://struts.apache.org/dtds/struts-config_1_2.dtd"&gt;</pre>
</li>
<li>
<h4>Action 中使用 getDataSource 錯誤</h4>
<p>書上的範例以及網路上查到的資料都說在 Struts Action 中，可以透過 <strong>getDataSource(request).getConnection();</strong> 的方式來取得連接池的 Connection，實際上試了之後才會發現<span style="color: #ff0000;"><strong> 1.3 根本就沒有 getDataSource 這個方法</strong></span>，繞了好久才找到必須透過以下方式取得剛剛設定在 context.xml 中的 datasource。</p>
<pre class="brush: java; gutter: true">DataSource ds = (DataSource)new InitialContext().lookup("java:comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();</pre>
</li>
<li>
<h4>Spring, Struts 接合</h4>
<p><span style="color: #000000;">接著設定 </span><strong style="color: #000000;">struts-config.xml</strong><span style="color: #000000;"> 加入 </span><strong style="color: #000000;">&lt;controller&gt;</strong><span style="color: #000000;"> 及 </span><strong style="color: #000000;">&lt;plug-in&gt;</strong><span style="color: #000000;"> 標籤，這邊家玩如果有 </span><strong style="color: #000000;">ClassNotFoundException</strong><span style="color: #000000;"> 一樣參考這篇文章第 2 點說明，Eclipse 有報錯要注意 tag 間的順序。</span></p>
<pre class="brush: xml; gutter: true">&lt;controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"&gt;&lt;/controller&gt;
&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;
    &lt;set-property value="/WEB-INF/beans-conf.xml" property="contextConfigLocation"/&gt;
&lt;/plug-in&gt;</pre>
<p class="brush: xml; gutter: true">原本 struts-config.xml 中的 action 設定如下</p>
<pre class="brush: xml; gutter: true">&lt;action-mappings&gt;
    &lt;!-- 這種是預設到特定頁面的，為了隱藏 jsp --&gt;
    &lt;action path="/index" type="org.apache.struts.actions.ForwardAction" parameter="/WEB-INF/pages/index.jsp"&gt;&lt;/action&gt;
    &lt;!-- 接合 Spring 後的寫法，注意 action path (struts) 要跟 bean name (spring) 一致--&gt;
    &lt;action path="/hello2"&gt;
        &lt;forward name="helloUser" path="/WEB-INF/pages/footer.jsp"&gt;&lt;/forward&gt;
    &lt;/action&gt;
&lt;/action-mappings&gt;</pre>
<p class="brush: xml; gutter: true">Spring 設定 beans-conf.xml 如下 (範例參考自<a href="http://caterpillar.onlyfun.net/Gossip/SpringGossip/StrutsSpring.html " target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">良葛格學習筆記<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，userChecker 及 HelloAction 請參考 <a href="http://caterpillar.onlyfun.net/Gossip/SpringGossip/StrutsSpring.html " target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">良葛格學習筆記<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)</p>
<pre class="brush: xml; gutter: true">&lt;bean id="userChecker" class="com.hans.pojo.UserChecker"&gt;&lt;/bean&gt;
&lt;!-- bean name 要跟 struts 裡面設定的 action path 一致 --&gt;
&lt;bean name="/hello2" class="com.hans.struts.action.HelloAction2"&gt;
    &lt;property name="userChecker" ref="userChecker" /&gt;
&lt;/bean&gt;</pre>
</li>
<li><strong>Hibernate &#8211;&nbsp;getHibernateTemplate().find() 錯誤</strong><br />
小蛙讓 MemberDao 繼承&nbsp;HibernateDaoSupport 操作資料庫上比較方便，但透過 HibernateTemplate().find() 查找資料的時候(程式碼如下)</p>
<pre class="brush: java; gutter: true">List&lt;Member&gt; list = this.getHibernateTemplate().find("from Member member");
if(list.size() &gt; 0)
    return list.get(0);</pre>
<p>出現以下錯誤</p>
<pre class="brush: actionscript3; gutter: true">javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: member near line 1, column 29 [from com.hans.entity.Member member]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: member near line 1, column 29 [from com.hans.entity.Member member]</pre>
<p>把 <strong>from Member member</strong> 改成 <strong>from member</strong>，出現下面錯誤</p>
<pre class="brush: shell; gutter: true">javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: member near line 1, column 6 [from member]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: member near line 1, column 6 [from member]</pre>
<p>改成&nbsp;from Member 之後才可正常執行，後來在這篇文章看到原來 &#8230; <span style="color: #ff0000;"><strong>member</strong></span> 是保留字 &#8230; 難怪怎麼試都會錯，還以為自己哪裡有問題。</li>
</ol>
<p><strong>參考資料：</strong></p>
<ol>
<li>Struts+Spring+Hibernate项目框架构建中的问题及解决方法集锦（1） @ Morecans的专栏<br />
<address><a href="http://blog.csdn.net/morecans/article/details/1686416" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://blog.csdn.net/morecans/article/details/1686416<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Spring Gossip: 在 Struts 中整合 Spring @ 良葛格學習筆記<br />
<address><a href="http://caterpillar.onlyfun.net/Gossip/SpringGossip/StrutsSpring.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://caterpillar.onlyfun.net/Gossip/SpringGossip/StrutsSpring.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;</address>
</li>
<li>Hibernate 查詢數據時報錯，請問這是什麽原因呢？急死了！ @ JWorld@TW<br />
<address><a href="http://www.javaworld.com.tw/jute/post/view?bid=41&amp;id=171839" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.javaworld.com.tw/jute/post/view?bid=41&amp;id=171839<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2418/struts-1-3-spring-3-2-hibernate-3-6-%e9%8c%af%e8%aa%a4%e7%ad%86%e8%a8%98/" data-wpel-link="internal">Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2418/struts-1-3-spring-3-2-hibernate-3-6-%e9%8c%af%e8%aa%a4%e7%ad%86%e8%a8%98/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
