2.4.3 ࡴ㾚䌘⑤ᅠ៤ᑨ⫼
2.5.2 䎳䏾⫼᠋⢊ᗕ
ࠡ䴶ⱘ Action ໘⧚ᅠ⫼᠋ⱏᔩৢˈҙҙᠻ㸠њㅔऩⱘ义䴶䕀থˈᑊ䎳䏾⫼᠋⢊ᗕֵ
ᙃüü䗮ᐌˈᔧϔϾ⫼᠋ⱏᔩ៤ࡳৢˈ䳔㽕ᇚ⫼᠋ⱘ⫼᠋ৡ⏏ࡴЎ Session ⢊ᗕֵᙃDŽ Ўњ䆓䯂 HttpSession ᅲ՟ˈStruts 2 ᦤկњϔϾ ActionContext ㉏ˈ䆹㉏ᦤկњϔϾ getSession ⱘᮍ⊩ˈԚ䆹ᮍ⊩ⱘ䖨ಲؐ㉏ൟᑊϡᰃ HttpSessionˈ㗠ᰃ MapDŽ䖭জᰃᗢМ ಲџਸ਼˛ᅲ䰙Ϟˈ䖭Ϣ Struts 2 ⱘ䆒䅵ᄺ᳝݇ˈStruts 2 Ўњㅔ࣪ Action ㉏ⱘ⌟䆩ˈᇚ Action ㉏Ϣ Servlet API ᅠܼߚ⾏ˈℸ getSession ᮍ⊩ⱘ䖨ಲؐ㉏ൟᰃ Mapˈ㗠ϡᰃ HttpSessionDŽ
㱑✊ ActionContext ⱘ getSession 䖨ಲⱘϡᰃ HttpSession ᇍ䈵ˈԚ Struts 2 ⱘ㋏߫ᢺ
఼Ӯ䋳䋷䆹 Session HttpSession П䯈ⱘ䕀ᤶDŽ
Ўњৃҹ䎳䏾⫼᠋ֵᙃˈ៥Ӏׂᬍ Action ㉏ⱘ execute ᮍ⊩ˈ execute ᮍ⊩Ё䗮䖛 ActionContext䆓䯂 Web ᑨ⫼ⱘ SessionDŽׂᬍৢⱘ execute ᮍ⊩ҷⷕབϟ˖
//໘⧚⫼᠋䇋∖ⱘ execute ᮍ⊩
public String execute() throws Exception {
//ᔧ⫼᠋䇋∖খ᭄ⱘ username ㄝѢ scottˈᆚⷕ䇋∖খ᭄Ў tiger ᯊˈ䖨ಲ success ᄫ ヺІ
//৺߭䖨ಲ error ⱘᄫヺІ
if (getUsername().equals("scott")
&& getPassword().equals("tiger") ) {
//䗮䖛 ActionContext ᇍ䈵䆓䯂 Web ᑨ⫼ⱘ Session
ActionContext.getContext().getSession().put("user" , getUsername());
return SUCCESS;
}
else {
return ERROR;
} }
Ϟ䴶ⱘҷⷕҙᦤկњ Action ㉏ⱘ execute ᮍ⊩ˈ䆹 Action ㉏ⱘ݊Ҫ䚼ߚϢࠡ䴶ⱘ Action
㉏ҷⷕᅠܼϔḋDŽϞ䴶ⱘ Action ㉏䗮䖛 ActionContext 䆒㕂њϔϾ Session ሲᗻ˖userDŽ ЎњẔ偠៥Ӏ䆒㕂ⱘ Session ሲᗻᰃ৺៤ࡳˈ៥Ӏׂᬍ welcome.jsp 义䴶ˈ welcome.jsp 义䴶ЁՓ⫼ JSP 2.0 㸼䖒ᓣ䇁⊩䕧ߎ Session Ёⱘ user ሲᗻDŽϟ䴶ᰃׂᬍৢⱘ welcome.jsp 义䴶ҷⷕ˖
<%@ page language="java" contentType="text/html; charset=GBK"%>
<html>
<head>
<title>៤ࡳ义䴶</title>
33
</head>
<body>
䖢ˈ${sessionScope.user},ᙼᏆ㒣ⱏᔩ!
</body>
</html>
Ϟ䴶ⱘ JSP 义䴶Ϣࠡ䴶ⱘ JSP 义䴶≵᳝ᬍবˈ䰸њՓ⫼њ JSP 2.0 䇁⊩ᴹ䕧ߎ SessionЁⱘ user ሲᗻDŽ݇Ѣ JSP 2.0 㸼䖒ᓣⱘⶹ䆚ˈ䇋খⳟヨ㗙᠔㨫ⱘlj䕏䞣㑻 J2EE ӕ
Ϯᑨ⫼ᅲNJϔкⱘ 2 ゴDŽ
བ 2.1 ᠔⼎义䴶ⱘĀ⫼᠋ৡā䕧ܹḚЁ䕧ܹ scottˈ
Āᆚⷕā䕧ܹḚЁ䕧ܹ tigerˈ✊ৢऩߏĀⱏᔩāᣝ䪂ˈᇚⳟࠄ བ 2.4 ᠔⼎ⱘ义䴶DŽ
Ϟ䴶ⱏᔩ៤ࡳⱘ义䴶ЁˈᏆ㒣䕧ߎⱏᔩ᠔⫼ⱘ⫼᠋ৡ˖
scottˈৃ㾕 Action 䗮䖛 ActionContext 䆒㕂 Session ᰃ៤ࡳⱘDŽ
2.4 ⱏᔩ៤ࡳ义䴶
2.5.3 ⏏ࡴ໘⧚ֵᙃ
ࠄⳂࠡЎℶˈAction ҙҙࠊ䕀থ⫼᠋䇋∖ˈJSP 义䴶ᑊ㦋ᕫ Action ⱘ໘⧚㒧ᵰDŽ ᇍѢ䚼ߚ Web ᑨ⫼㗠㿔ˈ⫼᠋䳔㽕㦋ᕫ䇋∖ Action ⱘ໘⧚㒧ᵰˈ՟བˈ㒓䌁⠽㋏㒳 䳔㽕ᶹ䆶ᶤϾ⾡㉏ϟⱘଚકˈ߭ Action 䇗⫼Ϯࡵ䘏䕥㒘ӊⱘϮࡵ䘏䕥ᮍ⊩ᕫࠄ䆹⾡㉏ϟⱘ
ܼ䚼ଚકˈ㗠 JSP 义䴶߭㦋প䆹 Action ⱘ໘⧚㒧ᵰˈᑊᇚܼ䚼㒧ᵰ䗁ҷ䕧ߎDŽ
ϟ䴶ᇚЎᑨ⫼ࡴϔϾ Actionˈ䆹 Action 䋳䋷㦋পᶤϾ㋏߫ⱘܼ䚼к㈡DŽЎњ䅽䆹 Actionৃҹ㦋প䖭㋏߫ⱘк㈡ˈ៥ӀࡴϔϾϮࡵ䘏䕥㒘ӊˈᅗࣙϔϾϮࡵ䘏䕥ᮍ⊩ˈ 䆹ᮍ⊩ৃҹ㦋পᶤϾ㋏߫ⱘܼ䚼к㈡DŽ
ϟ䴶ᰃ㋏㒳᠔⫼ⱘϮࡵ䘏䕥㒘ӊⱘҷⷕ˖
public class BookService {
//ҹϔϾᐌ䞣᭄㒘ᢳњҢᣕЙᄬټ䆒˄᭄ᑧ˅Ёপߎⱘ᭄
private String[] books = new String[]{
"Spring2.0ᅱ" ,
"䕏䞣㑻 J2EE ӕϮᑨ⫼ᅲ",
"Ѣ J2EE ⱘ Ajax ᅱ",
"Struts,Spring,Hibernateᭈড়ᓔথ"
};
//Ϯࡵ䘏䕥ᮍ⊩ˈ䆹ᮍ⊩䖨ಲܼ䚼к
public String[] getLeeBooks() {
return books;
} }
Ϟ䴶ⱘϮࡵ䘏䕥㒘ӊᅲ䰙Ϟህᰃ MVC ᓣЁⱘ Modelˈᅗ䋳䋷ᅲ⦄㋏㒳Ϯࡵ䘏䕥ᮍ
⊩DŽ⧚䆎ϞˈϮࡵ䘏䕥㒘ӊᅲ⦄Ϯࡵ䘏䕥ᮍ⊩ᯊˈᖙ乏ձ䌪ѢᑩሖⱘᣕЙሖ㒘ӊˈԚℸ໘ ⱘϮࡵ䘏䕥㒘ӊ߭াᰃ䖨ಲϔϾ䴭ᗕⱘᄫヺІ᭄㒘üüЎ䖭াᰃϔ⾡ᢳDŽ
2 ゴ Struts 2 ϟⱘ HelloWorld
public class GetBooksAction implements Action {
//䆹ሲᗻᑊϡ⫼Ѣᇕ㺙⫼᠋䇋∖খ᭄ˈ㗠⫼Ѣᇕ㺙 Action 䳔㽕䕧ߎࠄ JSP 义䴶ֵᙃ private String[] books;
//booksሲᗻⱘ setter ᮍ⊩
public void setBooks(String[] books) {
this.books = books;
}
//booksሲᗻⱘ getter ᮍ⊩
public String[] getBooks() {
return books;
}
//໘⧚⫼᠋䇋∖ⱘ execute ᮍ⊩
public String execute() throws Exception {
//㦋প Session Ёⱘ user ሲᗻ
String user = (String)ActionContext.getContext().getSession().
get("user");
//བᵰ user ሲᗻϡЎぎˈϨ䆹ሲᗻؐЎ scott
if (user != null && user.equals("scott")) {
//߯ᓎ BookService ᅲ՟
BookService bs = new BookService();
//ᇚϮࡵ䘏䕥㒘ӊⱘ䖨ಲؐ䆒㕂៤䆹 Action ⱘሲᗻ setBooks(bs.getLeeBooks());
return SUCCESS;
ᔧ៥Ӏⱘࠊ఼䳔㽕䇗⫼Ϯࡵ䘏䕥ᮍ⊩ᯊˈ៥ӀⳈ߯ᓎњϔϾϮࡵ䘏䕥㒘ӊⱘᅲ
՟ˈ䖭ᑊϡᰃϔ⾡དⱘخ⊩ˈЎࠊ఼ϡᑨ䆹݇ᖗϮࡵ䘏䕥㒘ӊⱘᅲ՟࣪䖛DŽ↨䕗៤
❳ⱘخ⊩ৃҹ߽⫼Ꮉॖᓣᴹㅵ⧚Ϯࡵ䘏䕥㒘ӊ˗ᔧ✊ˈⳂ᳔ࠡ⌕㸠ⱘᮍᓣᰃ߽⫼ձ䌪⊼
ܹüü䖭ᇚৢ䴶ゴ㡖䞠ҟ㒡DŽ
㰩ぐ ᅲ䰙乍ⳂЁϡӮࠊ఼ЁⳈ߯ᓎϮࡵ䘏䕥㒘ӊⱘᅲ՟ˈ㗠ᰃ䗮䖛 Ꮉॖᓣㅵ⧚Ϯࡵ䘏䕥㒘ӊᅲ՟ˈ㗙䗮䖛ձ䌪⊼ܹᇚϮࡵ䘏䕥㒘ӊᅲ՟⊼
ܹࠊ఼㒘ӊDŽ
䆹 Action ໘⧚⫼᠋䇋∖ᯊˈ᮴䳔㦋ᕫ⫼᠋ⱘӏԩ䇋∖খ᭄DŽᇚ䆹 Action 䜡㕂
struts.xml᭛ӊЁˈ䜡㕂䆹 Action ⱘ䜡㕂⠛↉བϟ˖
<!-- ᅮН㦋প㋏㒳Ёкⱘ Actionˈᇍᑨᅲ⦄㉏Ў lee.GetBooksAction -->
<action name="GetBooks" class="lee.GetBooksAction">
<!-- བᵰ໘⧚㒧ᵰ䖨ಲ loginˈ䖯ܹ login.jsp 义䴶 -->
<result name="login">/login.jsp</result>
<!-- བᵰ໘⧚㒧ᵰ䖨ಲ successˈ䖯ܹ showBook.jsp 义䴶 -->
<result name="success">/showBook.jsp</result>
</action>
ᔧ⫼᠋ getBooks.action থ䗕䇋∖ᯊˈ䆹䇋∖ᇚ㹿䕀থ㒭 lee.GetBooksAction ໘⧚DŽ
2.5.4 䕧ߎ໘⧚ֵᙃ
བᵰ⫼᠋≵᳝ⱏᔩˈⳈ getBooks.action থ䗕䇋∖ˈ䆹䇋∖ᇚ㹿䕀থࠄ login.jsp 义 䴶DŽབᵰ⫼᠋Ꮖ㒣ⱏᔩˈgetBooks.action ᇚҢ㋏㒳Ёࡴ䕑ࠄ㋏㒳Ёⱘ᠔᳝кˈᑊᇚ䇋∖
䕀থ㒭 showBook.jsp 义䴶ˈℸ showBook.jsp 义䴶ᖙ乏䋳䋷䕧ߎܼ䚼кDŽ ϟ䴶ヨ㗙ᇚҹ᳔ॳྟⱘᮍᓣ˖JSP 㛮ᴀᴹ䕧ߎܼ䚼кDŽ
㰩ぐ ᅲ䰙ᑨ⫼ЁˈТ㒱ᇍϡӮՓ⫼ヨ㗙䖭⾡ᮍᓣᴹ䕧ߎ Action 䕀থ 㒭 JSP 䕧ߎⱘֵᙃˈԚヨ㗙Ўњ䅽䇏㗙⏙Ἦ Struts 2 ᷛㅒᑧᑩሖ᠔ᅠ៤ ⱘࡼˈᬙℸ໘Փ⫼ JSP 㛮ᴀᴹ䕧ߎܼ䚼кֵᙃDŽ
ᔧ Action 䆒 㕂 њ ᶤ Ͼ ሲ ᗻ ؐ ৢ ˈ Struts 2 ᇚ 䖭 ѯ ሲ ᗻ ؐ ܼ 䚼 ᇕ 㺙 ϔ Ͼ ি خ struts.valueStackⱘ䇋∖ሲᗻ䞠DŽ
㌑䡻 䇏㗙ৃ㛑ᛳࠄ༛ᗾ˖ヨ㗙ᰃབԩⶹ䘧 Struts 2 ᇚ䖭ѯሲᗻؐᇕ㺙
struts.valueStack 䇋∖ሲᗻ䞠ⱘ?䖭ϔᮍ䴶Ϣ㓪㒣偠᳝݇ˈϔᮍ䴶ৃҹ䗮 䖛ᶹⳟ Struts 2 ⱘ⾡᭛ḷˈ᳔䞡㽕ⱘϔ⚍ᰃৃҹ showBook.jsp 义䴶Ё䗮 䖛 getAttributeNames ᮍ⊩ߚᵤ䇋∖Ёⱘܼ䚼ሲᗻDŽ
Ўњ JSP 义䴶Ё䕧ߎ䳔㽕䕧ߎⱘкֵᙃˈ៥Ӏৃҹ䗮䖛བϟҷⷕᴹ㦋পܼࣙ䚼 䕧ߎֵᙃⱘ ValueStack ᇍ䈵DŽ
//㦋পᇕ㺙䕧ߎֵᙃⱘ ValueStack ᇍ䈵
request.getAttribute("struts.valueStack");
2 ゴ Struts 2 ϟⱘ HelloWorld
Ϟ䴶ҷⷕ䖨ಲϔϾ ValueStack ᇍ䈵ˈ䆹ᇍ䈵ᇕ㺙њܼ䚼ⱘ䕧ߎֵᙃDŽ䆹ᇍ䈵ᰃ Struts 2 Փ⫼ⱘϔϾ ValueStack ᇍ䈵ˈৃҹ䗮䖛 OGNL 㸼䖒ᓣ䴲ᐌᮍ֓ഄ䆓䯂䆹ᇍ䈵ᇕ 㺙ⱘֵᙃDŽ
Ң᭄㒧ᵘϞᴹⳟˈValueStack ᳝⚍㉏ԐѢ Map 㒧ᵘˈԚᅗ↨ Map 㒧ᵘࡴᔎ˄
Ўᅗৃҹḍ㸼䖒ᓣᴹᶹ䆶ؐ˅DŽAction ᠔᳝ⱘሲᗻ䛑㹿ᇕ㺙ࠄњ ValueStack ᇍ䈵ЁˈAction Ёⱘሲᗻৡৃҹ⧚㾷Ў ValueStack Ё value ⱘৡᄫDŽ
㟈⧚㾷њ ValueStack ᇍ䈵ⱘ㒧ᵘৢˈ៥Ӏৃҹ䗮䖛བϟҷⷕᴹ㦋প Action Ё䆒㕂ⱘ
ܼ䚼кֵᙃDŽ
//䇗⫼ ValueStack ⱘ fineValue ᮍ⊩ᶹⳟᶤϾ㸼䖒ᓣⱘؐ
vs.findValue("books");
⧚㾷њϞ䴶݇䬂ⱘϸℹˈᭈϾ JSP 义䴶ⱘҷⷕህ↨䕗ᆍᯧњ㾷њDŽϟ䴶ᰃ showBook.jsp 义䴶ⱘҷⷕ˖
<%@ page language="java" contentType="text/html; charset=GBK">
<% @page import="java.util.*,com.opensymphony.xwork2.util.*"%>
<html>
<head>
<title>㗙ᴢ߮ⱘк</title>
</head>
<body>
<table border="1" width="360">
<caption>㗙ᴢ߮ⱘк</caption>
<%
//㦋পᇕ㺙䕧ߎֵᙃⱘ ValueStack ᇍ䈵
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
//䇗⫼ ValueStack ⱘ fineValue ᮍ⊩㦋প Action Ёⱘ books ሲᗻؐ
String[] books = (String[])vs.findValue("books");
//䗁ҷ䕧ߎܼ䚼кֵᙃ
for (String book : books) {
%>
<tr>
<td>кৡ˖</td>
<td><%=book%></td>
</tr>
<%}%>
</table>
</body>
</html>
ϡৃ৺䅸ˈϞ䴶 JSP 义䴶ⱘҷⷕᰃϥ䰟ⱘˈ㗠Ϩ䲒ҹ㓈ᡸˈЎ䞠䴶䭊ጠњ䞣ⱘ Java 㛮ᴀDŽԚᅗᇍѢ䇏㗙⧚㾷 Struts 2 བԩ໘⧚ᇕ㺙 Action ⱘ ValueStack ैᕜ᳝ᐂࡽDŽ
⌣㾜఼Ё getBooks.action থ䗕䇋∖ˈᇚⳟࠄབ 2.5 ᠔⼎ⱘ义䴶DŽ
䗮䖛Ϟ䴶义䴶ˈ៥Ӏⳟࠄ JSP 义䴶Ꮖ㒣䕧ߎњ Struts 2 ࠊ఼ⱘ䖨ಲֵᙃDŽϞ䴶ᭈϾ 䖛ˈᏆ㒣ᅠܼࣙᣀњ Struts 2 Ḛᶊⱘ 3 Ͼ䚼ߚ˖㾚ǃࠊ఼ൟDŽ
37
2.5 JSP 义䴶Ё䕧ߎ Action ⱘ䖨ಲֵᙃ