<?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>JSTL &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/jstl/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Tue, 02 Jul 2019 05:46:18 +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>JSTL &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Struts 1.3 + Spring 3.2 + Hibernate 3.6 安裝筆記</title>
		<link>https://noter.tw/2511/struts-1-3-spring-3-2-hibernate-3-6-%e5%ae%89%e8%a3%9d%e7%ad%86%e8%a8%98/</link>
					<comments>https://noter.tw/2511/struts-1-3-spring-3-2-hibernate-3-6-%e5%ae%89%e8%a3%9d%e7%ad%86%e8%a8%98/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 02 Nov 2012 13:58:30 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jndi]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JSTL]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2511</guid>

					<description><![CDATA[<p>「王者歸來 Java Web 整合開發 (第二版)」小蛙以為買了這本書可以很快速的打通任督二脈，實際上也花了非常多的時間才把環境架起來，還是必須透過其他的書籍或是網路上的資料才足夠(附在本篇末的參考資&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2511/struts-1-3-spring-3-2-hibernate-3-6-%e5%ae%89%e8%a3%9d%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>」小蛙以為買了這本書可以很快速的打通任督二脈，實際上也花了非常多的時間才把環境架起來，還是必須透過其他的書籍或是網路上的資料才足夠(附在本篇末的參考資料中)，這邊粗略的記錄一下整個安裝流程，一直卡關鬱卒到極點，導致一些紀錄可能不那麼完整，正確性有待商榷，但至少在小蛙的環境裡是可以跑的，供參考囉！<strong></strong><br />
<span id="more-2511"></span></p>
<ol>
<li>
<h3>下載 Struts, Spring, Hibernate</h3>
<p>Struts：<a href="http://struts.apache.org/download.cgi#struts1310" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://struts.apache.org/download.cgi#struts1310<span class="wpel-icon wpel-image wpel-icon-6"></span></a><br />
Spring：<a href="http://www.springsource.org/node/3720" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://www.springsource.org/node/3720<span class="wpel-icon wpel-image wpel-icon-6"></span></a><br />
Hibernate：<a href="http://www.hibernate.org/downloads" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://www.hibernate.org/downloads<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li>
<h3>建立 Dynamic Web Project</h3>
<p>在 Eclipse 中的 File<br />
-&gt; New -&gt; Other&#8230;<br />
-&gt; Web -&gt; Dynamic Web Project<br />
-&gt; 輸入完專案名稱後，Next<br />
-&gt; 設定&nbsp;Default output folder: WebContent/WEB-INF/classes<br />
-&gt; Next -&gt;&nbsp;Generate web.xml deployment descriptor 打勾<br />
-&gt; Finish</li>
<li>
<h3>設定Tomcat Context</h3>
<p>在 Tomcat 安裝目錄下/conf/ Server.xml 中設定剛剛的專案，把路徑改成自己的路徑，小蛙沒有把專案建立在 Tomcat 安裝目錄下的 webapps 中</p>
<pre class="brush: xml; gutter: true">&lt;Host name="localhost"  appBase="" unpackWARs="true" autoDeploy="true"&gt;
    &lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b" /&gt;
    &lt;Context path="/" docBase="G:\spring\mvc\WebContent" reloadable="true" /&gt;
&lt;/Host&gt;</pre>
</li>
<li>
<h3>加入JSTL 1.2</h3>
<p>把 jstl-1.2.jar 放在 專案/WebContent/WEB-INF/lib 目錄下，才可以用以下 jstl 功能，之前查到很多像是要把 tld 放在哪哩，要下載一堆有的沒的檔案，後來發現其實從 <a href="http://jstl.java.net/download.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">JSTL 1.2 <span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;下載<span style="color: #ff0000;"><strong>&nbsp;javax.servlet.jsp.jstl-1.2.1.jar</strong></span> 跟&nbsp;<strong><span style="color: #ff0000;">javax.servlet.jsp.jstl-api-1.2.1.jar</span> </strong>就可以了。在有使用到 JSTL 的頁面最上方加入宣告</p>
<pre class="brush: java; gutter: true">&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml" %&gt;</pre>
</li>
<li>
<h3>設置JNDI</h3>
<p>在 Tomcat 安裝目錄/conf/context.xml 中加入</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">小蛙之前不管設定在&nbsp;<span style="color: #ff0000;"><strong>server.xml</strong></span>&nbsp;的&nbsp;<span style="color: #ff0000;"><strong>&lt;GlobalNamingResources&gt;</strong></span>&nbsp;標籤中、設定在&nbsp;<span style="color: #ff0000;"><strong>&lt;Host&gt;</strong></span>&nbsp;標籤下或是設定在&nbsp;<span style="color: #ff0000;"><strong>localhost/context.xml</strong>&nbsp;</span>下都會出現錯誤，所以就乾脆設定在上述路徑的<span style="color: #ff0000;"><strong> context.xml</strong></span> 中。如果用這個方法要把&nbsp;<strong>mysql-connector-java-5.1.22-bin.jar</strong>&nbsp;複製到&nbsp;<strong>Tomcat安裝目錄/conf/&nbsp;</strong>資料夾下。可參考 <a href="http://wazai.net/2418/struts-1-3-spring-3-2-hibernate-3-6-錯誤筆記" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>。</p>
</li>
<li>
<h3>在web.xml中加入外部資源設定</h3>
<p>網路上查到的資料是說要加入該設定，但小蛙沒加也沒有出錯，保險起見還是加上去吧！</p>
<pre class="brush: xml; gutter: true">&lt;description&gt;MySQL Test App&lt;/description&gt;
&lt;resource-ref&gt;
    &lt;description&gt;DB Connection&lt;/description&gt;
    &lt;res-ref-name&gt;jdbc/TestDB&lt;/res-ref-name&gt;
    &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
    &lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;</pre>
</li>
<li>
<h3>加入並檢查必須的Jar檔</h3>
<p>小蛙的 lib 資料夾下包括以下檔案(省得有時候會有少 class 的麻煩 &#8230; 小蛙直接把所有的 jar 丟進去)：</p>
<pre class="brush: text; gutter: true">antlr-2.7.2.jar                           bsf-2.3.0.jar
commons-beanutils-1.8.0.jar               commons-chain-1.2.jar
commons-digester-1.8.jar                  commons-fileupload-1.2.2.jar
commons-io-2.4.jar                        commons-lang3-3.1.jar
commons-logging-1.0.4.jar                 commons-validator-1.3.1.jar
javax.servlet.jsp.jstl-1.2.1.jar          javax.servlet.jsp.jstl-api-1.2.1.jar
mysql-connector-java-5.1.22-bin.jar       oro-2.0.8.jar
spring-aop-3.2.0.M1.jar                   spring-asm-3.2.0.M1.jar
spring-aspects-3.2.0.M1.jar               spring-beans-3.2.0.M1.jar
spring-context-3.2.0.M1.jar               spring-context-support-3.2.0.M1.jar
spring-core-3.2.0.M1.jar                  spring-expression-3.2.0.M1.jar
spring-instrument-3.2.0.M1.jar            spring-instrument-tomcat-3.2.0.M1.jar
spring-jdbc-3.2.0.M1.jar                  spring-jms-3.2.0.M1.jar
spring-orm-3.2.0.M1.jar                   spring-oxm-3.2.0.M1.jar
spring-struts-3.2.0.M1.jar                spring-test-3.2.0.M1.jar
spring-tx-3.2.0.M1.jar                    spring-web-3.2.0.M1.jar
spring-webmvc-3.2.0.M1.jar                spring-webmvc-portlet-3.2.0.M1.jar
struts-core-1.3.10.jar                    struts-el-1.3.10.jar
struts-extras-1.3.10.jar                  struts-faces-1.3.10.jar
struts-mailreader-dao-1.3.10.jar          struts-scripting-1.3.10.jar
struts-taglib-1.3.10.jar                  struts-tiles-1.3.10.jar</pre>
</li>
<li>
<h3>設定讓Struts接管*.do請求</h3>
<p>在 web.xml 加入註解的那段，其他原本的 web.xml 設定別動到。</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0"&gt;
    &lt;!-- Standard Action Servlet Configuration --&gt;
    &lt;servlet&gt;
        &lt;!-- 從這裡開始複製 --&gt;
	&lt;servlet-name&gt;action&lt;/servlet-name&gt;
	&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;config&lt;/param-name&gt;
		&lt;param-value&gt;/WEB-INF/struts-conf.xml&lt;/param-value&gt;
	&lt;/init-param&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;debug&lt;/param-name&gt;
		&lt;param-value&gt;3&lt;/param-value&gt;
	&lt;/init-param&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;detail&lt;/param-name&gt;
		&lt;param-value&gt;3&lt;/param-value&gt;
	&lt;/init-param&gt;
	&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
    &lt;!-- Standard Action Servlet Mapping --&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;action&lt;/servlet-name&gt;
        &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;!-- 複製到這裡 --&gt;
    &lt;/servlet&gt;
&lt;/web-app&gt;</pre>
</li>
<li>
<h3>新增struts-conf.xml</h3>
<p>在專案/WebContent/WEB-INF/ 下新增 struts-conf.xml</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;
&lt;struts-config&gt;
    &lt;!-- 設定放在這邊 --&gt;
&lt;/struts-config&gt;</pre>
</li>
<li>
<h3>測試.do轉向</h3>
<p>在 WebContent 下建立 index.jsp ，測試 Struts 是否能將正常做 .do 轉向。在 struts-conf.xml 中加入</p>
<pre class="brush: xml; gutter: true">&lt;action-mappings&gt;
    &lt;action path="/index" type="org.apache.struts.actions.ForwardAction" parameter="/index.jsp"&gt;&lt;/action&gt;
&lt;/action-mappings&gt;</pre>
<p class="brush: xml; gutter: true">重新啟動 Tomcat，試試看透過 htpp://localhost:8080/index.do 能不能正確轉向到設定的 index.jsp。</p>
</li>
<li>
<h3>設定過濾器，解決中文亂碼-Tomcat預設過濾器 (跟 12. 選一個使用即可)</h3>
<p>在 tomcat 安裝目錄/conf/web.xml，找到下面這段，把它反註解(預設應該是被註解起來的)</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>
<h3>設定過濾器，解決中文亂碼-Spring過濾器 (跟 11. 選一個使用即可)</h3>
<p>在 專案/WebContent/WEB-INF/web.xml 中加入</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>
</li>
<li>
<h3>新增spring-conf.xml</h3>
<p>在 專案/WebContent/WEB-INF/ 下新增 spring-conf.xml</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;
&lt;/beans&gt;</pre>
</li>
<li>
<h3>Spring接合Struts</h3>
<p>在 struts-conf.xml 加入 (有另外的方法是 Listener 這邊不提)</p>
<pre class="brush: xml; gutter: true">&lt;action-mappings&gt;
    &lt;action path="/hello2"&gt;
        &lt;forward name="helloUser" path="/index.jsp"&gt;&lt;/forward&gt;
    &lt;/action&gt;
&lt;/action-mappings&gt;
&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/spring-conf.xml" property="contextConfigLocation"/&gt;
&lt;/plug-in&gt;</pre>
<p class="brush: xml; gutter: true">在 spring-conf.xml 加入 (bean name 要跟上面的 action path 一致)<br />
(範例參考自良葛格學習筆記，userChecker 及 HelloAction 請參考 <strong><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></strong>)</p>
<pre class="brush: xml; gutter: true">&lt;bean id="userChecker" class="com.hans.pojo.UserChecker"&gt;&lt;/bean&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>
<h3>測試使用代理方式與ActionForm</h3>
<p>index.jsp</p>
<pre class="brush: html; gutter: true">&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %&gt;
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang="zh-TW"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;Login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;html:form action="/login"&gt;
		&lt;html:text property="username"&gt;&lt;/html:text&gt;&lt;br /&gt;
		&lt;html:password property="password"&gt;&lt;/html:password&gt;&lt;br /&gt;
		&lt;html:submit&gt;送出&lt;/html:submit&gt; &lt;html:reset&gt;清除&lt;/html:reset&gt;
	&lt;/html:form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p class="brush: html; gutter: true">LoginForm.java</p>
<pre class="brush: java; gutter: true">import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LoginForm extends ActionForm {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		username = null;
		password = null;
	}
}</pre>
<p class="brush: java; gutter: true">LoginAction.java</p>
<pre class="brush: java; gutter: true">import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.hans.struts.action.form.LoginForm;
public class LoginAction extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginForm loginForm = (LoginForm)form;
		if("hans".equals(loginForm.getUsername()) &amp;&amp; "123456".equals(loginForm.getPassword())){
			return mapping.findForward("success");
		}
		return mapping.findForward("error");
	}
}</pre>
<p class="brush: java; gutter: true">struts-conf.xml 加上</p>
<pre class="brush: xml; gutter: true">&lt;!-- 這行沒加會一直提醒找不到 /login --&gt;
&lt;form-beans&gt;
    &lt;form-bean name="LoginForm" type="com.hans.struts.action.form.LoginForm"&gt;&lt;/form-bean&gt;
&lt;/form-beans&gt;
&lt;action-mappings&gt;
    &lt;action path="/index" type="org.apache.struts.actions.ForwardAction" parameter="/index.jsp"&gt;&lt;/action&gt;
    &lt;!-- scope 要寫 --&gt;
    &lt;action path="/login" name="LoginForm" scope="request"&gt;
	&lt;forward name="success" path="/WEB-INF/pages/login_success.jsp"&gt;&lt;/forward&gt;
	&lt;forward name="error" path="/index.do" redirect="true"&gt;&lt;/forward&gt;
    &lt;/action&gt;
&lt;/action-mappings&gt;</pre>
<p class="brush: xml; gutter: true">spring-conf.xml</p>
<pre class="brush: xml; gutter: true">&lt;bean name="/login" class="com.hans.struts.action.LoginAction"&gt;&lt;/bean&gt;</pre>
</li>
<li>
<h3>加入Hibernate</h3>
<p>小蛙的 lib 下包含</p>
<pre class="brush: text; gutter: true">antlr-2.7.6.jar                            bsf-2.3.0.jar
c3p0-0.9.1.jar                             commons-beanutils-1.8.0.jar
commons-chain-1.2.jar                      commons-collections-3.1.jar
commons-digester-1.8.jar                   commons-fileupload-1.2.2.jar
commons-io-2.4.jar                         commons-lang3-3.1.jar
commons-logging-1.0.4.jar                  commons-validator-1.3.1.jar
dom4j-1.6.1.jar                            hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate3.jar                             javassist-3.12.0.GA.jar
javax.servlet.jsp.jstl-1.2.1.jar           javax.servlet.jsp.jstl-api-1.2.1.jar
jta-1.1.jar                                mysql-connector-java-5.1.22-bin.jar
oro-2.0.8.jar                              slf4j-api-1.6.1.jar
spring-aop-3.2.0.M1.jar                    spring-asm-3.2.0.M1.jar
spring-aspects-3.2.0.M1.jar                spring-beans-3.2.0.M1.jar
spring-context-3.2.0.M1.jar                spring-context-support-3.2.0.M1.jar
spring-core-3.2.0.M1.jar                   spring-expression-3.2.0.M1.jar
spring-instrument-3.2.0.M1.jar             spring-instrument-tomcat-3.2.0.M1.jar
spring-jdbc-3.2.0.M1.jar                   spring-jms-3.2.0.M1.jar
spring-orm-3.2.0.M1.jar                    spring-oxm-3.2.0.M1.jar
spring-struts-3.2.0.M1.jar                 spring-test-3.2.0.M1.jar
spring-tx-3.2.0.M1.jar                     spring-web-3.2.0.M1.jar
spring-webmvc-3.2.0.M1.jar                 spring-webmvc-portlet-3.2.0.M1.jar
standard-1.0.6.jar                         struts-core-1.3.10.jar
struts-el-1.3.10.jar                       struts-extras-1.3.10.jar
struts-faces-1.3.10.jar                    struts-mailreader-dao-1.3.10.jar
struts-scripting-1.3.10.jar                struts-taglib-1.3.10.jar
struts-tiles-1.3.10.jar</pre>
</li>
<li>
<h3>設定Hibernate環境</h3>
<p>這邊討厭鬼的這篇文章 &#8211;&nbsp;<a href="http://nerdyworld.pixnet.net/blog/post/22404179" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>Struts2+Spring+Hibernate架構配置教學(Hibernate)上 @ 討厭鬼教學</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a> 寫的非常清楚。</li>
<li>
<h3>測試Hibernate</h3>
<p>先建立一個資料庫環境，資料表隨便設定(不一定要照小蛙的，可以越簡單越好，只要有id, m_id, email, name就好)，note: 這只是一個很無聊的範例，確定一下 Hibernate, Struts, Spring 是否三者已經可以結合使用。小蛙自己的 table 為</p>
<pre class="brush: sql; gutter: true">CREATE TABLE IF NOT EXISTS `member` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `m_id` varchar(50) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(50) NOT NULL,
  `cdate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `oriPlace` varchar(30) DEFAULT NULL,
  `nowPlace` varchar(30) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `m_id` (`m_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;</pre>
<p class="brush: sql; gutter: true">index.jsp</p>
<pre class="brush: html; gutter: true">&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %&gt;
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang="zh-TW"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;Login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;html:form action="/login"&gt;
		&lt;html:text property="username"&gt;&lt;/html:text&gt;&lt;br /&gt;
		&lt;html:password property="password"&gt;&lt;/html:password&gt;&lt;br /&gt;
		&lt;html:submit&gt;送出&lt;/html:submit&gt; &lt;html:reset&gt;清除&lt;/html:reset&gt;
	&lt;/html:form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p class="brush: sql; gutter: true">LoginAction.java</p>
<pre class="brush: java; gutter: true">package com.hans.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.hans.dao.IMemberDao;
import com.hans.entity.Member;
import com.hans.struts.action.form.LoginForm;
public class LoginAction extends Action {
	private IMemberDao dao;
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginForm loginForm = (LoginForm)form;
		if("search".equals(loginForm.getUsername())){
			// 如果是 search 就取出第一筆資料的 mid
			Member m = dao.find(1);
			if(m != null)
				request.setAttribute("ID", m.getMId());
			return mapping.findForward("success");
		}else if("add".equals(loginForm.getUsername())){
			// 如果是 add，就新增一筆 abc, abc@gmail.com 的資料
			Member m = new Member();
			m.setEmail("abc@gmail.com");
			m.setName("abc");
			dao.insert(m);
			request.setAttribute("ID", "新增完成");
			return mapping.findForward("success");
		}
		return mapping.findForward("error");
	}
	public IMemberDao getDao() {
		return dao;
	}
	public void setDao(IMemberDao dao) {
		this.dao = dao;
	}
}</pre>
<p class="brush: sql; gutter: true">IMemberDao.java</p>
<pre class="brush: java; gutter: true">package com.hans.dao;
import com.hans.entity.Member;
public interface IMemberDao {
	public void insert(Member member);
	public Member find(Integer id);
}</pre>
<p class="brush: sql; gutter: true">Member.java (這個是 Hibernate Tool 直接透過資料庫產生的)</p>
<pre class="brush: java; gutter: true">package com.hans.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
 * Member generated by hbm2java
 */
@Entity
@Table(name = "member", catalog = "letsgo")
public class Member implements java.io.Serializable {
	private Integer id;
	private String MId;
	private String name;
	private Character gender;
	private String email;
	private Date cdate;
	private String oriPlace;
	private String nowPlace;
	private Date birthday;
	public Member() {
	}
	public Member(String email) {
		this.email = email;
	}
	public Member(String MId, String name, Character gender, String email,
			Date cdate, String oriPlace, String nowPlace, Date birthday) {
		this.MId = MId;
		this.name = name;
		this.gender = gender;
		this.email = email;
		this.cdate = cdate;
		this.oriPlace = oriPlace;
		this.nowPlace = nowPlace;
		this.birthday = birthday;
	}
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "m_id", length = 50)
	public String getMId() {
		return this.MId;
	}
	public void setMId(String MId) {
		this.MId = MId;
	}
	@Column(name = "name", length = 20)
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "gender", length = 1)
	public Character getGender() {
		return this.gender;
	}
	public void setGender(Character gender) {
		this.gender = gender;
	}
	@Column(name = "email", nullable = false, length = 50)
	public String getEmail() {
		return this.email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "cdate", length = 19)
	public Date getCdate() {
		return this.cdate;
	}
	public void setCdate(Date cdate) {
		this.cdate = cdate;
	}
	@Column(name = "oriPlace", length = 30)
	public String getOriPlace() {
		return this.oriPlace;
	}
	public void setOriPlace(String oriPlace) {
		this.oriPlace = oriPlace;
	}
	@Column(name = "nowPlace", length = 30)
	public String getNowPlace() {
		return this.nowPlace;
	}
	public void setNowPlace(String nowPlace) {
		this.nowPlace = nowPlace;
	}
	@Temporal(TemporalType.DATE)
	@Column(name = "birthday", length = 10)
	public Date getBirthday() {
		return this.birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}</pre>
<p class="brush: sql; gutter: true">MemberDao.java</p>
<pre class="brush: java; gutter: true">package com.hans.dao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.hans.entity.Member;
public class MemberDao extends HibernateDaoSupport implements IMemberDao {
	@Override
	public void insert(Member member) {
		this.getHibernateTemplate().persist(member);
	}
	@Override
	public Member find(Integer id) {
		List&lt;Member&gt; list = this.getHibernateTemplate().find("from Member");
		if(list.size() &gt; 0)
			return list.get(0);
		return null;
	}
}</pre>
<p class="brush: java; gutter: true">login_success.xml (放在 WEB-INF/pages/ 下)</p>
<pre class="brush: html; gutter: true">&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang="zh-TW"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;Login Success&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;%=request.getAttribute("ID") %&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p class="brush: sql; gutter: true">struts-conf.xml</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;
&lt;struts-config&gt;
    &lt;form-beans&gt;
        &lt;form-bean name="LoginForm" type="com.hans.struts.action.form.LoginForm"&gt;&lt;/form-bean&gt;
    &lt;/form-beans&gt;
	&lt;action-mappings&gt;
                &lt;!-- 直接轉 --&gt;
		&lt;action path="/index" type="org.apache.struts.actions.ForwardAction" parameter="/index.jsp"&gt;&lt;/action&gt;
                &lt;!-- 設定路徑, form-bean, scope 及轉向 --&gt;
		&lt;action path="/login" name="LoginForm" scope="request"&gt;
		    &lt;forward name="success" path="/WEB-INF/pages/login_success.jsp"&gt;&lt;/forward&gt;
		    &lt;forward name="error" path="/index.do" redirect="true"&gt;&lt;/forward&gt;
		&lt;/action&gt;
	&lt;/action-mappings&gt;
	&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/spring-conf.xml" property="contextConfigLocation"/&gt;
	&lt;/plug-in&gt;
&lt;/struts-config&gt;</pre>
<p class="brush: sql; gutter: true">spring-conf.xml</p>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;
        &lt;!-- 當使用者送出表單到 /login.do 後，注入 dao，該 dao 參考到最下面設定的 memberDao --&gt;
	&lt;bean name="/login" class="com.hans.struts.action.LoginAction"&gt;
	    &lt;property name="dao" ref="memberDao"&gt;&lt;/property&gt;
	&lt;/bean&gt;
	&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;
	&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;
	    &lt;property name="dataSource" ref="dataSource"&gt;&lt;/property&gt;
	    &lt;property name="annotatedClasses"&gt;
	        &lt;list&gt;
	            &lt;value&gt;com.hans.entity.Member&lt;/value&gt;
	        &lt;/list&gt;
	    &lt;/property&gt;
	    &lt;property name="hibernateProperties"&gt;
	        &lt;props&gt;
	            &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQL5Dialect&lt;/prop&gt;
	            &lt;prop key="hibernate.format_sql"&gt;true&lt;/prop&gt;
	            &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;
	        &lt;/props&gt;
	    &lt;/property&gt;
	&lt;/bean&gt;
	&lt;bean id="memberDao" class="com.hans.dao.MemberDao"&gt;
	    &lt;property name="sessionFactory" ref="sessionFactory"&gt;&lt;/property&gt;
	&lt;/bean&gt;
    &lt;context:annotation-config/&gt;
&lt;/beans&gt;</pre>
<p class="brush: sql; gutter: true">當使用者在 index.do 表單輸入 search，則列出資料表第一筆資料的 m_id，若輸入 add，則新增一筆 email 為 abc@gmail.com 且 name 為 abc 的資料，執行的結果可以自行到資料庫中查看。</p>
</li>
</ol>
<p>到這邊已經把整個基本入門的環境架起來了，剩下的 &#8230; 要加油囉！說起來慚愧，小蛙總共花了 2 個星期才把環境及 Struts, Spring, Hibernate 串聯起來(還不太會使用喔) &#8230; 希望之後越來越順手！！！！過程中有發生錯誤情況，可參考&nbsp;<a href="http://wazai.net/2418/struts-1-3-spring-3-2-hibernate-3-6-錯誤筆記" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記 @ 蛙齋</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>，Good Luck!!!<br />
<strong>參考資料：</strong></p>
<ol>
<li>程式設計SSH分類 @ 討厭鬼教學<br />
<address><a href="http://nerdyworld.pixnet.net/blog/category/429960" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://nerdyworld.pixnet.net/blog/category/429960<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>JSP Standard Tag Library<br />
<address><a href="http://jstl.java.net/download.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://jstl.java.net/download.html<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Struts @ The Apache Software Foundation<br />
<address><a href="http://struts.apache.org/download.cgi#struts1310" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://struts.apache.org/download.cgi#struts1310<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Spring @ SpringSource Community<br />
<address><a href="http://www.springsource.org/node/3720" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.springsource.org/node/3720<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Hibernate @ JBoss Community<br />
<address><a href="http://www.hibernate.org/downloads" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://wazai.net/2306<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
<li>Struts 1.3 + Spring 3.2 + Hibernate 3.6 錯誤筆記 @ 蛙齋<br />
<address><a href="http://wazai.net/2418/struts-1-3-spring-3-2-hibernate-3-6-錯誤筆記" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://wazai.net/2418/struts-1-3-spring-3-2-hibernate-3-6-錯誤筆記<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></address>
</li>
</ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2511/struts-1-3-spring-3-2-hibernate-3-6-%e5%ae%89%e8%a3%9d%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/2511/struts-1-3-spring-3-2-hibernate-3-6-%e5%ae%89%e8%a3%9d%e7%ad%86%e8%a8%98/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
