JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Web Framework » Struts  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by koji at 2008-02-27 11:03
本主題所含的標籤
作者 Struts2 學到屎挫死 - 學習日誌 [精華]
秒殺



版主

發文: 131
積分: 2
於 2008-02-01 16:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟是從 Struts 1.3 跨足到 Struts 2 的初心者
原本以為 Struts 2 只是 Struts 1.3 的更新版
萬萬沒想到原來整體結構差異實在太大了
有幾項東西的變革讓我一開始有點受不了

1. 設定檔的規格完全不同
2. Action 類別完全不同
3. Tag-lib 完全不同
4. Form 的處理方式完全不同
....

不過衝著官網說 Struts 2 比起 Struts 1 設定上更簡單
我也就帶著得腦癌的心理準備開始我的學習之路

以下是小弟很冏的學習心路歷程
讓小弟學起來簡直是 "屎剉死"
因此發帖子讓大家不需要在煎熬一次


秒殺 edited on 2008-02-01 17:14
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-01 16:45 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[心理建設]
金庸小說裡面有很多神功是需要先廢掉武功在學
其實編程之路有很多也是如此
小弟當初從 QuickBasic 走到 C 就有深刻的體會
從 Struts 1 到 Struts 2 也是如此
當初一開始還打算用互相對照法來學習
但是開始發現到觀念根本就不一樣的時候
腦海裡就開始浮現 "欲鍊神功 必先自宮"
原來又是一條要切ㄐㄐ才能學好的路
因此開始轉換心態當作自己從來沒摸過 MVC 來學習了
接下來就讓小弟分享 "砍掉重練" 的過程吧


秒殺 edited on 2008-02-01 18:03
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-01 17:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[安裝失敗]
小弟在充滿好奇的情況下, 一口氣下載了 Struts 2 的各式版本
Example Applications: struts-2.0.11-apps.zip
Blank Application only: struts2-blank-2.0.11.war
Essential Dependencies Only: struts-2.0.11-lib.zip

首先安裝個 Example Application 來玩玩
哇靠! 效果屌的勒, 但是源碼完全看無
效果好看, 但學習曲線不漂亮, 失敗!

再來想說把所有的 jar 都整理好
解開 struts-2.0.11-lib.zip 裡的 jar 全丟到 WEB-INF/lib 去
做個最簡單的 Web Application 試試看
小弟就依樣畫葫蘆, 先超個最簡單的源碼吉設定檔看看
然後興高采烈地啟動 Web Application
什麼!! 為什麼 Web Application 啟動失敗
web.xml 檢查 -> 沒錯
struts.xml 檢查 -> 沒錯
web.xml 做註解重開 -> 啟動成功!!
怪了 web.xml 照抄的耶?
web.xml 拿掉註解在重開 -> 啟動失敗~~ 冏rz

小弟接著去翻了 Tomcat 的 log 檔看不出端倪
就先把一些用不到的 plugin 的 jar 檔先拿掉
重開 -> 啟動成功
靠!! 難道有 Bug 的東西也敢丟出來
後來仔細思考一下然後再爬文
才發現原來有些外掛是要先設定過才能用的勒
其中 spring 的外掛就是那種丟進去會死給你看的
這一類外掛沒用到就別丟進去
此時小弟已經多花了很多冤枉時間在這上面打轉許久了

再來小弟想試試最輕巧的 struts2
把 struts2-blank-2.0.11.war 改個我爽的名字丟上去
噹噹!! 馬上可以跑了喔

[忠告]
沒用到的 jar 盡量別丟進去 lib 裡
不然發生什麼代誌 Debug 老半天也是找不到的
外掛懂了再用


秒殺 edited on 2008-02-01 17:46
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-01 17:24 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[最速入門路線]
看到這裡小弟很抱歉得說, 其實前面通通不需要看
前面的種種只是告訴大家小弟有多冏
所以從這裡開始看就可以了 XD

這裡推薦大家採用最速路線來入門
小弟採用的方式是不用開發工具
單純靠 vi + ant 完成一切的編程

1. 首先建立必要的目錄結構
1
2
3
4
5
6
7
WEB-INF/ 
   build.xml
   classes/ 
      struts.xml
   lib/ 
   src/ 
   web.xml

小弟之所以要這樣將 src 和 build.xml 放這裡
就是因為想在開發階段只需要專注開發不用Care佈署問題

2. 編輯 build.xml
1
2
3
4
5
6
7
8
9
10
11
<project name="Struts2 Project" default="build">
 
   <path id="libraries">
      <fileset dir="lib" includes="*.jar"/>
   </path>
 
   <target name="build">
      <javac srcdir="src" destdir="classes" classpathref="libraries"/>
   </target>
 
</project>

小弟這麼做不過就是為了 "懶" 一個字
因為這樣一來 ant 一下就可以看新的結果了

3. 把基本的 jar 扔到 lib 目錄下
解開 struts2-blank.war 這一包裡的 jar 扔進 WEB-INF/lib 就對了

4. 編輯 web.xml
解開 struts2-blank.war 這一包裡的 web.xml 扔進 WEB-INF 就對了

5. 編輯 struts.xml
解開 struts2-blank.war 這一包裡的 struts.xml 扔進 WEB-INF/classes 就對了
不過這個檔之後要經常修改

到這裡雖然什麼鳥都沒生出來
但是基本環境的雛型就建立好了


秒殺 edited on 2008-02-05 15:39
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-01 18:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[生個蛋出來]
從這裡開始小弟就要讓大家開始能看見網頁了
在編程之前要先介紹一下 Struts2 改革很大的地方

A. Struts2 的 Action 能夠相容 POJO
講白話一點就是什麼鳥都不用繼承的 class 就能當 Action 用
在 Struts1 裡所有的 Action 都要繼承個什麼來著
但是在 Struts2 裡這個不是必要的

B. Struts2 裡傳值到 View 的過程中會直接把整個 Action 當作 Bean 丟到 View 去
而不一定要另外去生個 Bean 給 View
也不用操作 request.getAttribute() 和 request.setAttribute()

1. 既然每一次砍掉重練都要 Hello World 一下, 那就再 Hello 一次吧
請寫下這些源代碼扔到 WEB-INF/src/app/actions 目錄去
1
2
3
4
5
6
7
8
9
10
11
12
13
package app.actions;
 
public class Hello {
 
   public String getMessage() {
      return "World!";
   }
 
   public String execute() {
      return "success";
   }
 
}

看到這裡不用懷疑, 這個沒屁用的 class 真得能當 Action 來用

2. 修改 struts.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 
    <constant name="struts.devMode" value="true"/>
 
    <package name="app" namespace="/" extends="struts-default">
        <action name="hello" class="app.actions.Hello">
            <result>hello.jsp</result>
        </action>
    </package>
 
</struts>

這裡做個簡短的說明

首先假設環境是這樣
伺服器在 localhost 上
port 是 8080
webapp 的名稱是 test

上述的 struts.xml 是說
/hello 這個名稱對應到 app.actions.Hello 這個類別
而預設的結果要套在 hello.jsp 這個 View 上面
也就是說當使用者打了 http://localhost:8080/test/hello.action 這個網址
Struts2 框架會產生一個 app.actions.Hello 的物件
然後把這個物件當作 JavaBean 丟給 Hello.jsp 去排版

3. 撰寫 View 的 JSP 源代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
 
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
<title>Hello World</title>
</head>
 
<body>
Hello <s:property value="message"/>!!
</body>
 
</html>

當 Action 被丟來這裡當 JavaBean 用的時候
先前的 getMessage() 方法就可以用 <s:property value="message"/> 取出來用
這樣, Hello World 的程式就完成囉 ^^


秒殺 edited on 2008-02-04 14:14
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-04 14:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[給新手的話]
小弟曾經是個ASP/PHP/JSP的3P開發人員, 因此過去的Web設計觀念很死板
簡單來說就是一個網址對應到一個網頁
因此當想做的事情一多起來檔案就會快速的變多變亂
想要看整個應用程式的作業流程
幾乎要把所有的檔案翻過一遍才會懂
到這時候小弟才知道原來世界上有個稱為 Web Framework 的東西
可以讓程式變得更井然有序而且容易交接

如果我還停留在過去一個檔案一個網頁的觀念
那麼當我看到 struts.xml 的檔案時我一定會說
"馬的! 寫個網頁幹嘛那麼麻煩"
但是講出這句話的人可能無意間就把自己的弱點告訴別人了

當自己要著手大型案子的時候 一開始就要先有顧全大局的眼光
要在關鍵之處求方便 而不是在小地方斤斤計較
我想這一點就是 Programmer 和 Developer 的分界吧
這個時代有許多不錯的 Web Framework 可以利用
Struts2, Ruby on Rails, CodeIgniter 小弟認為都是不錯的


秒殺 edited on 2008-02-04 14:35
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-04 18:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[更懶一點]
Struts2 比較繁瑣的地方就是要寫 struts.xml
不過比起 Struts1 有個很大的進步
因為 Struts2 有更多技巧可以用來節省開發時間
其中 Wildcard 和 Codebehind 外掛是很強的利器

傳統的 Web Page 設計網網是一個位址對應一個檔案
但是 Struts 的對應卻是參照 control 的設定檔
如果每一個 Action, View 之間的關係有一定的規則但是量很大
這時候設定檔就會很冗長, 讓人覺得這是一件笨蛋做的事情

舉例來說, 如果你希望 網址 到 Action 之間的關係是一個蘿蔔一個坑
如果網只是 XXX
Action 的類別就是 app.actions.XXX
那麼這樣的設定就可以做到喔
1
2
3
<action name="*" class="app.actions.{1}">
...
</action>

這麼一來當你打了
http://localhost:8080/test/Hello.action
Struts 就會去產生 app.actions.Hello 類別

過去 Struts 令人詬病的地方就是設定檔超多學習起來很痛苦
後來的 Framework 都越來越重視 convention (慣例)
Struts2 保留了設定檔, 也讓我們可以透過萬用字元建立慣例
這樣一來開發 Web 應用程式就不會像過去那麼痛
也不會經常做一些重複的蠢事了

[懶到極點]
Struts2 有個外掛叫做 Codebehind
這個外掛是個慣例工具, 他有兩項功能可以大幅減少開發時間

1. 預設對應
預設對應功能是專為不需要用到 Action 的網址所設計, 可以用在靜態檔案上
2. 預設結果
預設結果功能是Action執行完後自動導引到某一個預設的View
這能夠幫助開發人員在有規則的地方不用再花時間去設定
這部份是接下來會介紹的

Codebehind 外掛不需要進行設定, 只要確定外掛的 jar 檔案在 WEB-INF/lib 目錄中即可
確定外掛有了之後可以把 struts.xml 中 action 的部份改成這樣
1
<action name="*" class="app.actions.{1}"/>

這個action設定只有一行喔
而且完全沒有指定result
假如你的網址是 http://localhost:8080/test/Hello.action
那麼 Struts 就會自動跑去建立 app.actions.Hello 物件來執行 (利用萬用字元)
執行完 app.actions.Hello 之後會自動導引到 Hello.jsp (利用 Codebehind 外掛)
這樣一來只有跟規則不一樣的導引關係才需要設定
可以讓 struts.xml 更為簡潔當然開發也變更輕鬆囉

[建議]
Wildcard (萬用字元) + Codebehind 外掛 = 超級省事


秒殺 edited on 2008-02-05 15:16
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
xin99xin





發文: 3
積分: 0
於 2008-02-22 17:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
喜欢,期待继续!!

reply to postreply to post
试图改变,而不是接受
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
Happy漫步者





發文: 46
積分: 0
於 2008-02-26 20:06 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不错 学习一下 Smile

reply to postreply to post
Happy漫步者花园-当我们失去的时候,才知道自己曾经拥有过
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-26 23:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[Form大改革]
還記得 Struts 1.x 的 Form 嗎?
對小弟來說那簡直是惡夢一場, 因為當您的網頁多了一個 Form 要填, 接下來會有這些事
1. 設計 Form Bean
2. 設計 Validation Rule
3. 增加 Action 和 Form Bean 的 mapping
4. 設計 Action
Form 的數量如果在 20 個以下感覺還好, 但是當 Form 的數量高達 100 個那簡直是讓人瘋掉
Form Bean 會多出很多腦殘碼, 這些程式碼明明就是固定的東西卻要花掉時間
mapping 的條目不斷增加導致設定檔越來越大, 設定檔越大越難維護
要是其他工程師看不懂, 那麼下次出問題保證加班

Struts 2 大幅改善了這項缺失, 當然就是在 Form Bean 上面動手腳囉
首先 Form Bean 和 Action 合而為一, 這樣一來一個 class 就搞定了
這樣最大的好處是 mapping 設定值就免啦, 改程式的時候就不用走迷宮一直翻設定檔
import 也少了好幾行 (這個常常花掉很多時間找東西)
這樣就非常符合敏捷開發的精神, 用慣例取代設定檔 (convention instead of configuration)
只要你不特別寫設定檔, 那麼 Struts 2 預設就醬子做
因為有了預設的行為, 所以一切都變得更有效率
Struts 1 雖然徹底被 Ruby on Rails, CodeIgniter 等框架打敗
但是 Struts 2 的改革讓這個框架的競爭力重見光明

[隨手一筆]
以下簡單說明 form 和 action 之間的關係
假設有一個 form 長得如此這般 (最陽春的寫法)
1
2
3
4
5
<s:form>
   <s:textfield name="username"/>
   <s:textfield name="password"/>
   <s:submit/>
</s:form>


那麼當您按下 submit 的時候
struts 2 會自動幫您呼叫 action 裡頭的 setUsername 和 setPassword 方法 (如果存在的話)
您只要在 action 裡頭寫了這兩個方法就可以接收 form 的值了
所以 action 的架構大概可以長醬子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Login {
 
   public void setUsername(String s) {
      // TODO ...
   }
 
   public void setPassword(String s) {
      // TODO ...
   }
 
   public String execute() {
      // TODO ...
   }
 
}

採用這樣的設計, 大幅減少了 configuration 的贅碼
也讓程式不用分割過度, 造成銜接的工程師要花大量的時間玩連連看
您爽的話還可以直接把 Action 丟給 Hibernate 去存, 真是懶斃了
Struts 1.x 雖然號稱對長期維護很有幫助
但是小弟認為, 等工程師換人這句話就結束了
Struts 2 的可讀性, 敏捷開發性, 管理設定集中性都具備了

敬請期待, 下一集小弟就把完整的 Login 寫給大家看


秒殺 edited on 2008-02-26 23:47
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-02-27 10:57 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[休息一下]
不好意思小弟本週值班太累了, 會幾天停筆
順便留下值班心得與大家分享, 改編自李後主的虞美人

客戶抱怨何時了?晚上睡多少?主機昨夜又中風,服務不堪回首暫停中。
監控程式應猶在,只是狀態改,問君能有幾多愁?恰似一堆爛攤為君留。


秒殺 edited on 2008-02-27 13:41
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
qrtt1





發文: 1747
積分: 31
於 2008-03-01 22:00 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
秒殺 wrote:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Login {
 
   public void setUsername(String s) {
      // TODO ...
   }
 
   public void setPassword(String s) {
      // TODO ...
   }
 
   public String execute() {
      // TODO ...
   }
 
}



看了您分享的 action 突然好奇是不是不用實作 Action interface 或 ActionSupport
查了一下比較表:
http://struts.apache.org/2.x/docs/comparing-struts-1-and-2.html


the Action interface is not required.
Any POJO object with a execute signature can be used as an Struts 2 Action object.


看起來真是有這麼一回事Big Smile
因為弟常寫 WebWork (Struts 和 WebWork 二個社群去年合併了XD)
所以才會注意到這些事^^

不過這樣寫是否就沒有辦法運用到內建的 validate 機制了?
因為還沒玩過 struts (1 & 2) 隨口問問^^


reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
Happy漫步者





發文: 46
積分: 0
於 2008-03-03 22:45 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感觉Struts2好用很多 在Resin下支持的非常好

reply to postreply to post
Happy漫步者花园-当我们失去的时候,才知道自己曾经拥有过
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
swangs





發文: 27
積分: 0
於 2008-10-20 17:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好可惜啊
秒大寫玩闕之後就沒寫下集了


reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
winddknight





發文: 162
積分: 0
於 2009-02-10 16:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
秒殺 大大 ~ 快醒醒啊 好期待你的下文 ~

reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
zhuxiaoqiu





發文: 2
積分: 0
於 2009-02-16 22:46 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
楼主,你能否把你的文档整理成一个doc档,这样我们可以download下来收藏学习。

reply to postreply to post
努力,就能改变!
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
Jkkc





發文: 11
積分: 0
於 2009-05-01 22:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
秒殺 wrote:
[隨手一筆]
以下簡單說明 form 和 action 之間的關係
假設有一個 form 長得如此這般 (最陽春的寫法)
1
2
3
4
5
<s:form>
   <s:textfield name="username"/>
   <s:textfield name="password"/>
   <s:submit/>
</s:form>


請問這段可以不使用Struts 2的標籤嗎
<s:textfield name="username"/>和<input type="text" name="username" />
結果會是一樣的嗎


reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:Jkkc]
Zombie





發文: 32
積分: 0
於 2009-05-11 16:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Jkkc wrote:
請問這段可以不使用Struts 2的標籤嗎
<s:textfield name="username"/>和<input type="text" name="username" />
結果會是一樣的嗎


如果username沒有預設值的話,這兩段程式碼的寫法差別在於:產生出來的html會不會帶有struts2 預設的theme。
如果username有預設值的話,則<input ../>的寫法,無法帶出預設的值。

struts 2 theme: 針對html, xhtml, ajax css_xhtml 等狀況,struts2 提供了一些預設的theme, 善用theme, 可以讓jsp 中的程式碼更加乾淨,不同layout間的轉換也更加方便。缺點當然就是一定要用<s: />的tag了


reply to postreply to post
If something is ugly or hard, it is wrong
http://grave.dyndns.org/blog/zombie/
http://chuanghs.blogspot.com/
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:Zombie]
Jkkc





發文: 11
積分: 0
於 2009-05-14 23:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Zombie wrote:
如果username沒有預設值的話,這兩段程式碼的寫法差別在於:產生出來的html會不會帶有struts2 預設的theme。
如果username有預設值的話,則<input ../>的寫法,無法帶出預設的值。

struts 2 theme: 針對html, xhtml, ajax css_xhtml 等狀況,struts2 提供了一些預設的theme, 善用theme, 可以讓jsp 中的程式碼更加乾淨,不同layout間的轉換也更加方便。缺點當然就是一定要用<s: />的tag了


感謝你的回答
本來用標準的html標籤,想說改成struts 2試試看
結果發現想要不用<s:/>標籤還是有點困難,變成之前寫好的都得改...


reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:Jkkc]
bluestone





發文: 19
積分: 0
於 2009-05-19 18:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問秒殺版主,網路上有很多關於『Struts2+Spring2+Hibernate3』的文件。請問在相同的Webapps下Struts2可不可以不要整合Spring2,讓他們各跑各的行嗎?
謝謝您~

需要指引的初學者


reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:bluestone]
bluestone





發文: 19
積分: 0
於 2009-09-22 15:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
後來我自己有try出來,關鍵的地方在於web.xml,從這邊解應該比較單純!
(spring我暫時不理他了),讓struts1跟struts2各跑各的應該就可以了~
很多人應該會卡在struts1跟struts2共存時*.jsp會出錯,所以我直接把web.xml貼出來
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <filter>
    <filter-name>struts-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  </filter>
  <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
  </filter>
   <filter>
  <filter-name>struts2</filter-name> 
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
  
  </filter>
  <jsp-config>
      <taglib>
          <taglib-uri>struts-tags</taglib-uri>   
        <taglib-location>/WEB-INF/struts2-core-2.1.6.jar/struts-2.0.dtd</taglib-location>   
     </taglib>  
    </jsp-config>
    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 <filter-mapping> 
  <filter-name>struts2</filter-name> 
  <url-pattern>*.action</url-pattern> 
  </filter-mapping> 
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/form/*</url-pattern>
</filter-mapping>    
   <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>DisplayChart</servlet-name>
      <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
  </servlet>
   <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
  <servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
      <url-pattern>/servlet/DisplayChart</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

(上面的設定都是有效的,不需要的話?請拿掉!但是最前面的struts相關都是有用到的,注意順序喔!)
就這樣,希望大家順利!


bluestone edited on 2009-09-22 15:08
reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:秒殺]
Ponylin





發文: 38
積分: 0
於 2011-04-30 00:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以請問一下,
如果我使用Struts 2.2.1.1框架,在我的JSP頁面中如果要使用 <struts:head theme="ajax" />這個標籤,請問應該要匯入哪些 Struts2所提供的jar檔呢?

目前我的WEB-INF/lib已經有放入以下幾個jar檔
commons-fileupload-1.2.1
commons-io-1.3.2
freemarker-2.3.16
javassist-3.7.ga
ognl-3.0
struts2-core-2.2.1.1
xwork-core-2.2.1.1

以下是我的JSP原始碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="struts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Login Page</title>
  <%-- <struts:head theme="ajax" /> --%>
  <%-- 按照我目前的組態,上一行註解若拿掉,執行時就會產生500錯誤,但有註解就成功執行 --%>
</head>
 
<body>
  <struts:form action="loginPerson">
    <struts:label value="登入系統"></struts:label>
    <struts:textfield name="account" label="帳號" />
    <struts:password name="password" label="密碼" />
    <struts:submit value="登入"></struts:submit>
  </struts:form>
</body>
</html>
 


reply to postreply to post
喜歡自由/前衛爵士樂的Java新手
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:Ponylin]
kenshin520





發文: 109
積分: 0
於 2011-05-04 11:45 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Ponylin wrote:
可以請問一下,
如果我使用Struts 2.2.1.1框架,在我的JSP頁面中如果要使用 <struts:head theme="ajax" />這個標籤,請問應該要匯入哪些 Struts2所提供的jar檔呢?

目前我的WEB-INF/lib已經有放入以下幾個jar檔
commons-fileupload-1.2.1
commons-io-1.3.2
freemarker-2.3.16
javassist-3.7.ga
ognl-3.0
struts2-core-2.2.1.1
xwork-core-2.2.1.1

以下是我的JSP原始碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="struts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Login Page</title>
  <%-- <struts:head theme="ajax" /> --%>
  <%-- 按照我目前的組態,上一行註解若拿掉,執行時就會產生500錯誤,但有註解就成功執行 --%>
</head>
 
<body>
  <struts:form action="loginPerson">
    <struts:label value="登入系統"></struts:label>
    <struts:textfield name="account" label="帳號" />
    <struts:password name="password" label="密碼" />
    <struts:submit value="登入"></struts:submit>
  </struts:form>
</body>
</html>
 



如果你要用struts本身theme=ajax的話,那就需要struts-dojo的Plugin,不過這個plugin已經被depricate了。
還有struts:head是可以直接拿來當作一個head的標籤用的,不需要包在<head>裡。


reply to postreply to post
作者 Re:Struts2 學到屎挫死 - 學習日誌 [Re:kenshin520]
Ponylin





發文: 38
積分: 0
於 2011-05-04 12:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
kenshin520 wrote:
如果你要用struts本身theme=ajax的話,那就需要struts-dojo的Plugin,不過這個plugin已經被depricate了。
還有struts:head是可以直接拿來當作一個head的標籤用的,不需要包在<head>裡。


感謝你的回答!!! 謝謝...


reply to postreply to post
喜歡自由/前衛爵士樂的Java新手
» JWorld@TW »  Web Framework » Struts

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8