• 沒有找到結果。

䎳䏾⫼᠋⢊ᗕ

在文檔中 EASY STRUTS2 (頁 34-39)

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 ⱘ䖨ಲֵᙃ

在文檔中 EASY STRUTS2 (頁 34-39)

相關文件