<?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>web.xml &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/web-xml/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sat, 07 Nov 2020 15:17:40 +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>web.xml &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</title>
		<link>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/</link>
					<comments>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 14 Oct 2013 15:32:54 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[web.xml]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr.xml]]></category>
		<category><![CDATA[Catalina]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[Remote Address Filter]]></category>
		<category><![CDATA[限制存取]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[tomcat]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3094</guid>

					<description><![CDATA[<p>前面&#160;Solr 教學 (1) – 安裝篇、Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面 講解了 Solr 安裝方式以及頁面安全性設定，這篇文章要記錄透過 tomcat&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>前面&nbsp;<a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (1) – 安裝篇</a>、<a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a> 講解了 Solr 安裝方式以及頁面安全性設定，這篇文章要記錄透過 tomcat 7 內建的 Remote Address Filter 來設定允許連線 IP 的白名單。<br><span id="more-3094"></span>這個方法非常簡單，不過要注意的是 tomcat 版本不同會有不同的設定方法，這邊小蛙的環境是 Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7，以下的方法僅適用於 tomcat 7 這個版本！</p>
<p>在測試這個功能的時候發生一個小插曲，以往設定完馬上就可以用了，這次測試時不管怎麼做都會出現 403 Forbidden 的錯誤，簡直是晴天霹靂，完全摸不著頭緒，已經設定好小蛙自己使用的 IP，還是一樣 403，最扯的是 127.0.0.1 本機測試也還是一樣的情況，在資訊這行經常會遇到靈異現象，可能要買一包綠色乖乖才可以，不過 VPS 主機在美國要怎麼辦呢 &#8230;</p>
<p>後來 &#8230; 突然想到一件事情，小蛙的網站有使用 <a href="https://www.cloudflare.com/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">CloudFlare<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 這個服務來加快網頁速度，CloudFlare 會根據使用者的設定，比如原本的 http://wazai.net/ 假設連結到小蛙的 IP (1.2.3.4)，這個 1.2.3.4 的 IP 是在美國紐約，現在有一個日本來的使用者連結了 http://wazai.net，此刻 CloudFlare 發現日本這邊也有一個 CloudFlare 伺服器，就會將日本的使用者連結到日本的 CloudFlare 伺服器以加快網站速度。</p>
<p>就在這個 moment，真正連到小蛙伺服器的 IP 就變成 CloudFlare 日本伺服器的 IP，而不是真正日本使用者的 IP，當然這邊 CloudFlare 也有提供自訂的 Header 可以取得原始日本使用者的 IP。</p>
<p>到這邊大概懂了 &#8230; 竟然被那麼奇怪的問題卡了那麼久 &#8230; 就是小蛙在測試的時候，也是連結 http://domain:8080/solr ，但真正收到的 IP 卻不是小蛙自己本身的 IP，而是接近小蛙位置的 CloudFlare Server IP，就連在本機 127.0.0.1 的時候也是一樣的狀況 &#8230; CloudFlare 為了避免這個問題，可以在網站上設定可以直接連接的 Domain，例如：domain 透過 CloudFlare，額外新增設定 nocf.domain 來避免使用 CloudFlare。</p>
<p>上教學！有兩種設定方式，一種是 <a href="http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Apache Tomcat 官網範例<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 提到的透過 web.xml 設定 &lt;filter&gt;，第二種是直接在 &lt;Host&gt; &lt;Context&gt; 等 Catalina Container 中設定。</p>
<h4>透過 &lt;filter&gt;</h4>
<ol>
<li>&lt;filter&gt; 過濾器在每個專案下的 web.xml 中設定，在 &lt;web-app&gt; &lt;/web-app&gt; 之間加入 &lt;filter&gt; 設定，IP 的部分設定為 1.2.3.4 改寫成 1\.2\.3\.4，IP 與 IP 之間以「|」分隔。
<div>
<div id="highlighter_286384" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/webapps/solr/WEB-INF/web.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_245018" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">filter</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;Remote Address Filter&lt;/</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-class</code><code class="xml plain">&gt;org.apache.catalina.filters.RemoteAddrFilter&lt;/</code><code class="xml keyword">filter-class</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">init-param</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">param-name</code><code class="xml plain">&gt;allow&lt;/</code><code class="xml keyword">param-name</code><code class="xml plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">param-value</code><code class="xml plain">&gt;127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1&lt;/</code><code class="xml keyword">param-value</code><code class="xml plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">init-param</code><code class="xml plain">&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">filter</code><code class="xml plain">&gt;</code></div>
<div class="line number9 index8 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">filter-mapping</code><code class="xml plain">&gt;</code></div>
<div class="line number10 index9 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;Remote Address Filter&lt;/</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;/*&lt;/</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;</code></div>
<div class="line number12 index11 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">filter-mapping</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>設定完成！重新啟動 tomcat。</li>
</ol>
<h4>&nbsp;</h4>
<h4>透過 &lt;Context&gt;</h4>
<ol>
<li>進入到 solr 個別設定檔，在 &lt;Context&gt; &lt;/Context&gt; 之間加入 &lt;Value /&gt;
<div>
<div id="highlighter_646750" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/conf/Catalina/localhost/solr.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_936594" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">Valve</code> <code class="xml color1">className</code><code class="xml plain">=</code><code class="xml string">"org.apache.catalina.valves.RemoteAddrValve"</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml color1">allow</code><code class="xml plain">=</code><code class="xml string">"127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"</code><code class="xml plain">/&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>IP 設定規則同 &lt;filter&gt; 第一點。</li>
<li>設定完成！重新啟動 tomcat。</li>
</ol>


<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>tomcat 下載檔案卻直接亂碼開啟 at IE 10</title>
		<link>https://noter.tw/3055/tomcat-%e4%b8%8b%e8%bc%89%e6%aa%94%e6%a1%88%e5%8d%bb%e7%9b%b4%e6%8e%a5%e4%ba%82%e7%a2%bc%e9%96%8b%e5%95%9f-at-ie-10/</link>
					<comments>https://noter.tw/3055/tomcat-%e4%b8%8b%e8%bc%89%e6%aa%94%e6%a1%88%e5%8d%bb%e7%9b%b4%e6%8e%a5%e4%ba%82%e7%a2%bc%e9%96%8b%e5%95%9f-at-ie-10/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 02 Sep 2013 12:37:48 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[mime-type]]></category>
		<category><![CDATA[msi]]></category>
		<category><![CDATA[下載檔案]]></category>
		<category><![CDATA[副檔名]]></category>
		<category><![CDATA[檔案格式錯誤]]></category>
		<category><![CDATA[亂碼]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web.xml]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[mime-mapping]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3055</guid>

					<description><![CDATA[<p>上星期五接到一張 ticket 內容大概是網站上提供下載 .msi 的安裝檔案，在經過測試後大部分瀏覽器都可以正常下載檔案，唯獨漏掉測試的 IE 10 會出現問題，IE 10 會把 .msi 檔案當作&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3055/tomcat-%e4%b8%8b%e8%bc%89%e6%aa%94%e6%a1%88%e5%8d%bb%e7%9b%b4%e6%8e%a5%e4%ba%82%e7%a2%bc%e9%96%8b%e5%95%9f-at-ie-10/" data-wpel-link="internal">tomcat 下載檔案卻直接亂碼開啟 at IE 10</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>上星期五接到一張 ticket 內容大概是網站上提供下載 .msi 的安裝檔案，在經過測試後大部分瀏覽器都可以正常下載檔案，唯獨漏掉測試的 IE 10 會出現問題，IE 10 會把 .msi 檔案當作文字檔一般開啟，在頁面上印出一堆亂碼，簡單記錄一下解決方法。<br />
<span id="more-3055"></span><br />
IE 一直以來都不怎麼令小蛙討喜，每次在 IE 不是跑版就是碰到一些奇奇怪怪的問題，相對的也可能習慣用 IE 的開發者來說會覺得 Chrome, Firefox 才是非正道，不管怎樣網站開發人員在相容性部份常常一個頭兩個大！小蛙這邊的系統是 tomcat 架設，在檔案下載 .msi 的部份，Chrome, Firefox 可以正常下載檔案，IE 8, IE 9 也都可以正常下載檔案，不知道為什麼到了 IE 10 就變成無法正常下載檔案了 &#8230;<br />
為了還原這張 ticket 的情況，特地將筆電中的 IE 9 更新到 IE 10，由於 Windows 7 的 IE 10 需要 SP 1 以上才可以安裝 &#8230; 又花了不少時間把 Windows 7 安裝 SP 1 再更新 IE 10，不知道為什麼每次遇到跟 IE 有關的問題都會滿肚子火(個人偏見)，前陣子看到朋友塗鴉牆上寫著「終於找到 IE 的用途了，是拿來下載 Chrome！」要不是有一些 IE only 的服務或是網站，小蛙心想 IE 被安裝在電腦上的比例會更低吧！<br />
離題了，這個問題是 IE 10 下載 tomcat 伺服器上的檔案時，會變成「直接開啟」的狀態，也就是跟下載 txt 檔相同，把 msi 檔案直接印在網頁上，本來小蛙懶得找原因，只想偷懶直接把 .msi 換成 .zip 檔案就可以下載了，後來想想有好幾個頁面要改，有點不甘心，決定還是 google 一下看看。<br />
可以透過簡單設定 tomcat 上的 /usr/local/tomcat/conf/web.xml&nbsp;設定檔來解決這個問題，路徑以 tomcat 安裝目錄為主，只要在 web.xml 中加入以下</p>
<pre class="brush: xml; gutter: true">&lt;mime-mapping&gt;
    &lt;extension&gt;msi&lt;/extension&gt;
    &lt;mime-type&gt;application/x-msi&lt;/mime-type&gt;
&lt;/mime-mapping&gt;</pre>
<p>重新啟動 tomcat 即可！打完收工！<br />
<strong>參考資料：</strong></p>
<ol>
<li>.msi downloading as text @ stackoverflow<br />
<address><a href="http://stackoverflow.com/questions/1079630/msi-downloading-as-text" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://stackoverflow.com/questions/1079630/msi-downloading-as-text<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3055/tomcat-%e4%b8%8b%e8%bc%89%e6%aa%94%e6%a1%88%e5%8d%bb%e7%9b%b4%e6%8e%a5%e4%ba%82%e7%a2%bc%e9%96%8b%e5%95%9f-at-ie-10/" data-wpel-link="internal">tomcat 下載檔案卻直接亂碼開啟 at IE 10</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3055/tomcat-%e4%b8%8b%e8%bc%89%e6%aa%94%e6%a1%88%e5%8d%bb%e7%9b%b4%e6%8e%a5%e4%ba%82%e7%a2%bc%e9%96%8b%e5%95%9f-at-ie-10/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>
	</channel>
</rss>
