* ȸ¿ø°¡ÀÔ * ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ ã±â ID Password
Last Modified : 2008.07.02

Struts - First Steps

http://www.michael-thomas.com/tech/apache/struts/struts_eclipse_myhelloworld.htm
À§¿¡ ¸µÅ©µÈ ¿ø±ÛÀº Struts ¸¦ ½ÃÀÛÇÏ·Á´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ¼º°øÀûÀΠù¹øÂ° ¿¹Á¦¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù.
¾Æ·¡ÀÇ ±ÛÀº ¿ø±ÛÀ» ÇØ¼®ÇÑ ³»¿ëÀÔ´Ï´Ù.

1. Struts ´Ù¿î·Îµå & ¿¹Á¦ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ¼³Ä¡

http://struts.apache.org/download.html ¿¡¼­ General Availability (GA) Releases Áß 1.x ¹öÀüÀ» Ŭ¸¯ÇÏ¿© (ÇöÀç 1.3.8) Full Distribution À» ´Ù¿î·Îµå ÇÕ´Ï´Ù. ( ÆÄÀϸí struts-1.3.8-all.zip )
¾ÐÃàÀ» Ç®¸é ¾Æ·¡¿Í °°Àº µð·ºÅ丮°¡ »ý±é´Ï´Ù.

¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÖ´Â apps µð·ºÅ丮¿¡¼­ struts-blank-1.3.8.war ¿øº»Àº ¹é¾÷Çϰí Ä«ÇǺ»Àº ÆÄÀϸíÀ» mystruts-helloworld.war ¶ó°í ¹Ù²ß´Ï´Ù.
ÀÌ ÆÄÀÏÀ» Tomcat ÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» µî·ÏÇÕ´Ï´Ù.
µÎ °¡Áö ¹æ¹ýÀÌ Àִµ¥ Çϳª´Â mystruts-helloworld.war ÆÄÀÏÀ» ´Ü¼øÈ÷ {TOMCAT_HOME}/webapps µð·ºÅ丮¿¡ ÆÄÀÏÀ» µÎ´Â °ÍÀÔ´Ï´Ù.
µÎ¹øÂ° ¹æ¹ýÀº ¼öµ¿À¸·Î Tomcat ¿¡ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î µî·ÏÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
[ ÂüÁ¶ : "»õ·Î¿î ÀÚ¹Ù À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼º" ]
¸ÕÀú mystruts-helloworld.war ÆÄÀÏÀ» Àû´çÇÑ µð·ºÅ丮¿¡ ¾ÐÃàÀ» DZ´Ï´Ù.
( ¿¹, C:/www/jsp/mystruts-helloworld )

- mystruts-helloworld ¾ÖÇø®ÄÉÀÌ¼Ç ÆÄÀÏ ±¸Á¶

open all | close all

´ÙÀ½À¸·Î {TOMCAT_HOME}/conf/Catalina/localhost µð·ºÅ丮¿¡ mystruts-helloworld.xml ÆÄÀÏÀ» ¾Æ·¡ ³»¿ëÀ¸·Î ¸¸µì´Ï´Ù.

mystruts-helloworld.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context
    docBase="C:/www/jsp/mystruts-helloworld"
    reloadable="true">
</Context>

http://localhost:8080/mystruts-helloworld À» ¹æ¹®ÇÏ¿© mystruts-helloworld À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼º°øÀûÀ¸·Î ·ÎµåµÇ¾ú´ÂÁö È®ÀÎÇÕ´Ï´Ù.

À̸§Àº mystruts-helloworld ÀÌÁö¸¸ Áö±Ý±îÁö´Â struts-blank-1.3.8.war ¿¹Á¦ À¥ ¾ÖÇø®ÄÉÀ̼ǰú °°½À´Ï´Ù.

2. Eclipse ¿¡¼­ mystructs-helloworld ÇÁ·ÎÁ§Æ® »ý¼º & ¼³Á¤

Eclipse ¿¡¼­ mystruts-helloworld ÀÛ¾÷Çϱâ À§ÇÑ ¼³Á¤À» ÇϰڽÀ´Ï´Ù.

1) ÇÁ·ÎÁ§Æ® »ý¼º

¸Þ´º¿¡¼­ File, New, Project À» Â÷·Ê·Î ¼±ÅÃ

´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼­ Java Project ¸¦ ¼±ÅÃ, Next ¹öư

¾Æ·¡ ±×¸²Ã³·³ ¼³Á¤ ÈÄ, Next ¹öư

Default output folder ¸¦ ¾Æ·¡ ±×¸²°ú °°ÀÌ ¼³Á¤, Finish ¹öư

2) Build Path ¼³Á¤

Package ºä¿¡¼­ »õ·Î »ý¼ºÇÑ ÇÁ·ÎÁ§Æ® mystruts-helloworld ¸¦ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ¸·Î ¼±ÅÃÇÑ ÈÄ ³ªÅ¸³ª´Â ÄÁÅØ½ºÆ® ¸Þ´º¿¡¼­ ¾Æ·¡ ±×¸²°ú °°ÀÌ Build Path, Configure Build Path.. ¸¦ Â÷·Ê·Î ¼±ÅÃ

Libraries ÅÇÀ» ¼±ÅÃ, "Add External JARs..." ¸Þ´º¸¦ ÀÌ¿ëÇÏ¿© ¾Æ·¡ ¾ÆÄ«ÀÌºê ÆÄÀÏ Ãß°¡

  • mystruts-helloworld/WEB-INF/lib ¿¡ ÀÖ´Â ¸ðµç ¾ÆÄ«ÀÌºê ÆÄÀÏ
  • {TOMCAT_HOME}/common/lib/servlet-api.jar

3) ¼Ò½º Æú´õ ¼³Á¤

Package ºä¿¡¼­ mystruts-helloworld ÇÁ·ÎÁ§Æ®¸¦ ¸¶¿ì½º·Î ¼±ÅÃ, ¸Þ´º¿¡¼­ File, New, Source Folder Â÷·Ê·Î ¼±ÅÃ

"New Source Folder" ´ÙÀ̾ó·Î±× ¹Ú½ºÀÇ Folder Name À» WEB/src ·Î ¼³Á¤

4) MessageResources.properties ÆÄÀÏ À§Ä¡ º¯°æ - struts-config.xml ÆíÁý

MessageResources.properties ÆÄÀÏÀº /WEB-INF/classes Æú´õ¿¡ ÀÖ½À´Ï´Ù.
ÀÌ ÆÄÀÏÀº ÀÚÁÖ ¼öÁ¤ÇØ¾ß ÇÏ´Â ÆÄÀÏÀ̹ǷΠ/WEB-INF/src ¿¡ º¹»çÇÕ´Ï´Ù.
ÀÌÁ¦ Eclipse ¿¡¼­ ¼öÁ¤Çϸé output Æú´õ·Î ¼³Á¤µÈ /WEB-INF/classes ¿¡ º¹»çµË´Ï´Ù.

5) web.xml ¼öÁ¤

¾Æ·¡´Â struts-blank À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ web.xml ÆÄÀÏ ³»¿ëÀ¸·Î Struts ¼³Á¤¿¡¼­ ÇÙ½ÉÀÌ µÇ´Â ºÎºÐÀÔ´Ï´Ù.

<!-- Standard Action Servlet Configuration -->

<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>
  <load-on-startup>2</load-on-startup>
</servlet>

<!-- Standard Action Servlet Mapping -->

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- The Usual Welcome File List -->

<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

action À̶õ À̸§À¸·Î org.apache.struts.action.ActionServlet ¼­ºí¸´À» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
ÃʱâÈ­ ÆÄ¶ó¹ÌÅͷμ­ config ¶õ À̸§À¸·Î /WEB-INF/struts-config.xml ÆÄÀÏÀ» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
load-on-startup ¿¤¸®¸ÕÆ®ÀÇ ³»¿ëÀÌ 2¶ó´Â ¾ç¼ö °ªÀÔ´Ï´Ù.
ÀÌ °ªÀÌ ¾ç¼öÀ̹ǷΠÀ¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ·ÎµåµÉ ¶§ ActionServlet ÀÇ init ¸Þ¼Òµå°¡ ½ÇÇàµË´Ï´Ù.
ActionServlet ÀÇ init ¸Þ¼Òµå´Â struts-config.xml ÆÄÀÏÀÇ ³»¿ëÀ» ¸Þ¸ð¸®¿¡ ¿Ã¸³´Ï´Ù.
±×·¸±â ¶§¹®¿¡ Áï, ActionServlet ÀÌ struts-config.xml ÆÄÀÏ ÀÚü¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ¾Æ´Ï±â¿¡ struts-config.xml ÀÇ ³»¿ëÀÌ º¯°æµÇ¸é º¯°æµÈ ³»¿ëÀÌ ¾ÖÇø®ÄÉÀ̼ǿ¡ ¹Ý¿µµÇ±â À§Çؼ­´Â ÇØ´ç ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ·ÎµåÇØ¾ß ÇÕ´Ï´Ù.
¼­ºí¸´ ¸ÅÇÎ ¼³Á¤Àº *.do ÀÎ ¿äûÀº ¸ðµÎ action ¶õ À̸§ÀÇ ¼­ºí¸´ÀÌ ¸Ã´Â´Ù°í ¼³Á¤ÇÑ °ÍÀÔ´Ï´Ù.
ÀÌ ¼³Á¤À¸·Î ÀÎÇØ *.do ¿äûÀÌ ¿À¸é Tomcat Àº ActionServlet¿¡°Ô ÇØ´ç ¿äûÀ» Àü´ÞÇÕ´Ï´Ù.

3. mystruts-helloworld À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î º»°ÝÀûÀÎ ÆíÁý

1) Welcome.jsp ÆíÁý

/index.jsp ´Â http://localhost:8080/mystruts-helloworld ¹æ¹®ÇßÀ» ¶§ º¸¿©Áö´Â ÆäÀÌÁöÀÔ´Ï´Ù.
web.xml ¿¡¼­ welcome-file-list ¿¡¼­ index.jsp ¶ó°í ¼³Á¤ÀÌ µÇ¾î Àֱ⠶§¹®¿¡ / ·Î ¿äûÇϸé index.jsp ÆÄÀÏ·Î ¿äûÀÌ Àü´ÞµË´Ï´Ù.
/index.jsp ÆÄÀÏÀ» ¿­°í Äڵ带 ºÐ¼®Çϵµ·Ï ÇϰڽÀ´Ï´Ù.

<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:redirect forward="welcome" />

<logic:redirect forward="welcome" /> ´Â structs-config.xml ÀÇ global-forwards ¿¤¸®¸ÕÆ®ÀÇ ÀÚ½Ä ¿¤¸®¸ÕÆ®ÀÎ forward ¿¤¸®¸ÕÆ®ÀÇ name ¼Ó¼ºÀÌ welcome À¸·Î Á¤ÀÇµÈ °÷À¸·Î ¸®´ÙÀÌ·ºÆ® Ç϶ó´Â ÄÚµåÀÔ´Ï´Ù.
struts-config.xml ¿¡¼­ welcome ºÎºÐÀ» ã½À´Ï´Ù.

<!-- Global Forward Definitions -->

<global-forwards>
  <!-- Default forward to "Welcome" action -->
  <!-- Demonstrates using index.jsp to forward -->
  <forward
      name="welcome"
      path="/Welcome.do"/>
</global-forwards>

index.jsp ¿¡¼­ forward="welcome" ÀÌ ºÎºÐÀº struts-config.xml ÀÇ <global-forwards> ¼³Á¤ÀÌ Àû¿ëµÇ¾î °á±¹ /Welcome.do ¸¦ ¿äûÇÏ°Ô µË´Ï´Ù.
ÀÌÁ¦ Welcome.do ¿äûÀ» ´ëÇÑ ¼³Á¤À» struts-config.xml ÆÄÀÏ¿¡¼­ ã½À´Ï´Ù.
action mappings ¿¤¸®¸ÕÆ®ÀÇ ÀÚ½Ä ¿¤¸®¸ÕÆ® action ¿¡¼­ ¼Ó¼º path="Welocme" À̶ó°í µÇ¾î ÀÖ´Â ºÎºÐÀÌ ÀÖ½À´Ï´Ù. ( Welcome.do °¡ ¾Æ´Ñ ÀÌÀ¯´Â do °¡ »ý·«ÇÏ¿© ¾²±â ¶§¹®ÀÔ´Ï´Ù. )
action ¿¤¸®¸ÕÆ®ÀÇ ÀÚ½Ä ¿¤¸®¸ÕÆ® forward ÀÇ ¼Ó¼º°ªÀÌ forward="/pages/Welcome.jsp" ¶ó°í µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

<action-mappings>
<!-- Default "Welcome" action -->
<!-- Forwards to Welcome.jsp -->
  <action
    path="/Welcome"
    forward="/pages/Welcome.jsp"/>
	
    ... Áß°£ »ý·« ...
    
    
</action-mappings>	

»ç¿ëÀÚ°¡ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ / ¿äûÇϸé index.jsp ½ÇÇàµÇ´Âµ¥ index.jsp ÆäÀÌÁö¿¡¼­´Â Welcome.jsp ÆäÀÌÁö·Î ¸®´ÙÀÌ·ºÆ®Çϰí ÀÖ½À´Ï´Ù.
ÀÌÁ¦ ¿ì¸®´Â / ¸¦ ¹æ¹®ÇßÀ» ¶§ º¸¿©Áö´Â ÆäÀÌÁö´Â index.jsp °¡ ¾Æ´Ï°í /pages/Welcome.jsp ¶ó´Â °ÍÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ »õ·Î¿î ³»¿ëÀ» ³ªÅ¸³»±â À§Çؼ­ /pages/Welcome.jsp ÆÄÀÏÀÇ </body> Àü¿¡ ´ÙÀ½À» Ãß°¡ÇÕ´Ï´Ù.

<p>
  <html:link action="/Logon"><bean:message key="welcome.logonlink" /></html:link>
  <bean:message key="welcome.logonmessage" />
</p>
<p>
  <html:link action="/Help"><bean:message key="welcome.helplink" /></html:link>
  <bean:message key="welcome.helpmessage" />
</p>

ÆÄÀÏÀ» ÀúÀåÇÏ°í ´Ù½Ã À¥ ¾ÖÇø®ÄÉÀ̼Ç(http://localhost:8080/mystruts-helloworld)À» ¹æ¹®ÇÕ´Ï´Ù.

javax.servlet.ServletException: Missing message for key "welcome.logonlink"

À§¿Í °°Àº ¿¡·¯ ¸Þ½ÃÁö°¡ ³ªÅ¸³³´Ï´Ù.
¼­ºí¸´ ÄÁÅ×À̳ʰ¡ welcome.logonlink ¿¡ ¾Ë¸ÂÀº °ªÀ» MessageResources.properties ¿¡¼­ ãÁö ¸øÇ߱⠶§¹®ÀÔ´Ï´Ù.
¼­ºí¸´ ÄÁÅ×À̳ʰ¡ jsp ÆÄÀÏÀ» ¼­ºñ½ºÇϱâ À§ÇØ ÇØ¼®ÇÒ ¶§ ÅÂ±× bean:message ºÎºÐ¿¡ À̸£¸é resource ÇÁ·ÎÆÛƼÆÄÀÏ, MessageResources.properties ¿¡¼­ ÇØ´çÇϴ Ű°ªÀ» ã¾Æ ´ëÀÔÇÏ¿© ÇØ¼®ÇÏ·Á°í ½ÃµµÇÕ´Ï´Ù.
µû¶ó¼­ MessageResources.properties ¿¡ ÇØ´çÇϴ Ű°ªÀ» µî·ÏÇØ¾ß ÇÕ´Ï´Ù.
´ÙÀ½ Äڵ带 MessageResources.properties ÆÄÀÏÀÇ ÇÏ´Ü¿¡ Ãß°¡ÇÕ´Ï´Ù.

welcome.logonlink=Logon
welcome.logonmessage=-logon page for the webapp "mystruts-helloworld"(jsp).
welcome.helplink=Help
welcome.helpmessage=-help instructions (html).

ÆÄÀÏÀ» ÀúÀåÇÑ ÈÄ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸®°Å³ª Tomcat À» Àç½ÃÀÛÇÑ ÈÄ ´Ù½Ã ¹æ¹®ÇÕ´Ï´Ù.
¿¡·¯°¡ º¸ÀÌÁö ¾Ê¾Æ¾ß ¾Ê´Â °É È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº MessageResources.properties ÆÄÀÏ¿¡¼­ Ãß°¡°¡ ¾Æ´Ñ ±âÁ¸ÀÇ ³»¿ëÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇØ º¸°Ú½À´Ï´Ù.

welcome.title=My Struts Hello World
welcome.heading=Welcome to "My Struts Hello World"
welcome.message=This web app is an example of a "Hello World" type Struts application.

ÆÄÀÏÀ» ÀúÀåÇÑ ÈÄ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸³´Ï´Ù. (¶Ç´Â Tomcat À» Àç½ÃÀÛÇÕ´Ï´Ù.)
¼öÁ¤ÀÌ ³¡³ª°í ´Ù½Ã ¹æ¹®ÇÏ¸é ¾Æ·¡¿Í °°ÀÌ È­¸éÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

2) Help ¸µÅ© ¼öÁ¤ - help.html

À§ È­¸é¿¡¼­ (Welcome.jsp) Help ¸µÅ©¸¦ Ŭ¸¯ÇÏ¸é ¾Æ·¡¿Í °°Àº ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù.
¾ÆÁ÷ Help ¸µÅ©¿¡ ´ëÇØ ¾î¶°ÇÑ ÀÛ¾÷µµ ÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÔ´Ï´Ù.

org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url

Tomcat log È®ÀÎ

ÀÌ¿Í °°Àº ¿¡·¯ ¸Þ½ÃÁö´Â {TOMCAT_HOME}/logs ¿¡ À§Ä¡ÇÑ catalina·Î ½ÃÀÛÇÏ´Â ·Î±× ÆÄÀÏ¿¡¼­µµ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

help.html »ý¼º

pages Æú´õ¿¡ ¾Æ·¡¿Í °°Àº help.html ÆÄÀÏÀ» ¸¸µì´Ï´Ù.

/pages/help.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitonal.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR" />
<title>Help Screen</title>
</head>  
  
<body>
  <h1>Help Screen</h1>
  <p>Help info goes here.</p>
</body>
  
</html>
struct-config.xml ¿¡¼­ action-mappings Ãß°¡

action-mappings ºÎºÐÀ» ã¾Æ¼­ </action-mappings> ÅÂ±× ¹Ù·Î Àü¿¡ ¾Æ·¡ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

<!-- Display the "Help" documentation -->
<action
  path="/Help"
  forward="/pages/help.html"/>
Help ¸µÅ© Å×½ºÆ®

À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸®°í
http://localhost:8080/mystruts-helloworld
¸¦ ¹æ¹®ÇÑ ÈÄ Help ¸µÅ©¸¦ Ŭ¸¯ÇÕ´Ï´Ù.
help.html ÆäÀÌÁö°¡ º¸ÀÌ´ÂÁö È®ÀÎÇÕ´Ï´Ù.

2. Logon ¸µÅ© ¼öÁ¤ - logon.jsp

(1) logon.jsp ÆÄÀÏ »ý¼º

pages Æú´õ¿¡ logon.jsp ¶ó´Â ÆÄÀÏÀ» ¾Æ·¡ ³»¿ë°ú °°ÀÌ ¸¸µì´Ï´Ù.

/pages/logon.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitonal.dtd">

<html:html>
<head>
<title><bean:message key="logon.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

<html:errors/>

<logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
  <font color="red">
    ERROR:  Application resources not loaded -- check servlet container
    logs for error messages.
  </font>
</logic:notPresent>

<h3><bean:message key="logon.heading"/></h3>
<p><bean:message key="logon.message"/></p>

</body>
</html:html>
(2) struct-config.xml ¿¡¼­ action-mappings Ãß°¡

action-mappings ºÎºÐ¿¡¼­ ¾×¼ÇÀ» Ãß°¡ÇÕ´Ï´Ù.

<!-- Display the "Logon" page -->
<action
  path="/Logon"
  forward="/pages/logon.jsp"/>
(3) WEB-INF/src/java/MessageResources.properties Ű Ãß°¡

logon.jsp ÆÄÀÏ ¼Ò½º¿¡¼­ °­Á¶µÈ ºÎºÐ¿¡ ´ëÇÑ Å°¸¦ ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ ¾Æ·¡¿Í °°ÀÌ Ãß°¡ÇÕ´Ï´Ù.

logon.title=Logon Screen
logon.heading=Logon Screen
logon.message=Enter your user name and password then click "Submit"<br />(Note:test/password)
(4) web.xml ¼öÁ¤ - Struts Tag ¶óÀ̺귯¸® »ç¿ëÇϱâ À§ÇØ

logon.jsp ÆÄÀÏ ¼Ò½º¸¦ º¸¸é ¾Æ·¡¿Í °°ÀÌ Struts ÅÂ±× ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ´Â Äڵ带 º¼ ¼ö ÀÖ½À´Ï´Ù.

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

struts-logic.tld, struts-bean.tld, struts-html.tld ¸¦ struts¸¦ ¾ÐÃàÀ» Ǭ Æú´õ¿¡¼­ ã¾Æ /WEB-INF µð·ºÅ丮¿¡ º¹»çÇÕ´Ï´Ù.
web.xml ÆÄÀÏÀ» ¿­°í </web-app> ¹Ù·Î Àü¿¡ ¾Æ·¡ ³»¿ëÀ» Ãß°¡ÇÕ´Ï´Ù.

  <!-- Struts Tag Library Descriptors -->
  <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-html</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-logic</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>

¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸®°í Logon ¸µÅ©¸¦ Ŭ¸¯ÇÏ¿© ´ÙÀ½ È­¸é¿¡ ³ª¿À´ÂÁö È®ÀÎÇÕ´Ï´Ù.

3. Logon Æû Ãß°¡ - logon.jsp ¿¡¼­ »ç¿ëÀÚ Á¤º¸¸¦ ÀԷ¹ޱâ À§ÇÑ Æû ÅÂ±× Ãß°¡

logon.jsp ÆäÀÌÁö¿¡¼­ »ç¿ëÀÚ À̸§ ( User Name ) °ú ÆÐ½º¿öµå ( Password ) ¸¦ ÀÔ·Â ¹Þ±â À§ÇØ Æû ű׸¦ Ãß°¡ÇÕ´Ï´Ù.
¾Æ·¡ÀÇ Struts ÅÂ±× ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇϰڽÀ´Ï´Ù.

  • html:form
  • html:text
  • html:password
  • html:submit
  • html:reset
(1) ÆûÅÂ±× Ãß°¡

´ÙÀ½ ¼Ò½º Äڵ带 </body> ¹Ù·Î Àü¿¡ Ãß°¡ÇÕ´Ï´Ù.

<html:form 
   action="/LogonSubmit" 
   focus="username">

<table>
  <tr>
    <td><bean:message key="logon.username"/></td>
    <td><html:text property="username" size="16" maxlength="18"/></td>
  </tr>
  <tr>
    <td><bean:message key="logon.password"/></td>
    <td>
     <html:password property="password" size="16" maxlength="18" redisplay="false"/>
    </td>
  </tr>
  <tr>
    <td> </td>
    <td><html:submit property="Submit" value="Submit"/> <html:reset/></td>
  </tr>
</table>  
         
</html:form>
(2) MessageResources.properties ¼öÁ¤ - Ű Ãß°¡

»¡°­»öÀ¸·Î °­Á¶µÈ ۸¦ ÇÁ·ÎÆÛƼ ÆÄÀÏ, MessageResources.properties ¿¡ Ãß°¡ÇÕ´Ï´Ù.

logon.username=User Name
logon.password=Password
(3) struts-config.xml ¼öÁ¤ - action-mappings Ãß°¡

action-mappings ºÎºÐ¿¡ ¾×¼ÇÀ» Ãß°¡ÇÕ´Ï´Ù.

- LogonSubmit ¾×¼Ç Ãß°¡
<!-- Process a user logon -->
<action path="/LogonSubmit"
	   type="com.michaelthomas.mystrutshelloworld.LogonAction"
	   name="logonForm"
	   scope="request"
	   input="/Logon.do"
	   validate="true">
 <forward name="success"  path="/MainMenu.do"/>
 <forward name="failure"  path="/Logon.do"/>
	   
</action>

¼³Á¤´ë·Î¶ó¸é,
LogonAction ÀÌ success À» ¸®ÅÏÇϸé /MainMenu.do ·Î, faliure ¸¦ ¸®ÅÏÇϸé /Logon.do ·Î À̵¿ÇÏ°Ô µË´Ï´Ù.

(4) struts-config.xml, validation.xml ¼öÁ¤ - DynaValidation »ç¿ëÇϱâ À§ÇØ
<!-- Logon form bean -->
<form-bean  name="logonForm"  type="org.apache.struts.validator.DynaValidatorForm">
  <form-property name="username" type="java.lang.String" initial=""/>
  <form-property name="password" type="java.lang.String" initial=""/>
</form-bean>

À§ ³»¿ëÀ» struts-config.xml ÀÇ <form-beans> ºÎºÐ¿¡ Ãß°¡ÇÕ´Ï´Ù.
Æû(Form)À» °Ë»çÇϱâ À§Çؼ­ DynaValidation À̶ó´Â Struts Validator¸¦ »ç¿ëÅä·Ï ÇÏ´Â ¼³Á¤ÀÔ´Ï´Ù.
DynaValidation ¾²¸é ActionForm ¸¦ µû·Î ¸¸µéÁö ¾Ê¾Æµµ µË´Ï´Ù.
À§¿¡¼­ ó·³ XML ÆÄÀÏ ¼³Á¤¸¸À¸·Î µû·Î ActioForm Àڹ٠Ŭ·¡½º¸¦ ¾øÀÌ Æû¿¡ ´ëÇÑ ±âº»ÀûÀÎ °Ë»ç°¡ °¡´ÉÇÏ´Ù´Â ¾ê±âÀÔ´Ï´Ù.
/WEB-INF/validation.xml ÆÄÀÏÀ» ¿ÀÇÂÇϰí À§¿¡¼­ ¼³Á¤ÇÑ <form name="logonForm"> ºÎºÐÀ» ã¾Æ¼­ ¾Æ·¡ º¼µåü·Î µÇ¾î ÀÖ´Â °Í°ú °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

<form name="logonForm">
  <field
      property="username"
      depends="required">
          <arg key="logon.username"/>
  </field>
  <field
      property="password"
      depends="required,mask">
          <arg key="logon.password"/>
          <var>
              <var-name>mask</var-name>
              <var-value>^[0-9a-zA-Z]*$</var-value>
          </var>
  </field>
</form>
(5) Logon Valitaion Å×½ºÆ®

ÅèĹÀ» Àç°¡µ¿Çϰí Welcome.jsp ÆäÀÌÁö¿¡¼­ Logon ¸µÅ©¸¦ Ŭ¸¯ÇÕ´Ï´Ù.
2°³ÀÇ ÅØ½ºÆ®Çʵ忡 °ªÀ» ³ÖÁö ¾Ê°í "Submit" ¹öưÀ» Ŭ¸¯ÇÕ´Ï´Ù.
Validator °¡ ÀÛµ¿ÇÏ¸é »ç¿ëÀÚ°¡ º¸´Â ÆäÀÌÁö¿¡ ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³ª°Ô µË´Ï´Ù.

  • User Name is required.
  • Password is required.

¸¸¾à À§¿Í °°Àº ¸Þ½ÃÁö°¡ ¾Æ´Ï¶ó

  • null is required.
  • null is required.

¿Í °°ÀÌ ³ªÅ¸³­´Ù¸é /WEB-INF/validation.xml ÆÄÀÏÀ» ¿­°í
<arg key="logonForm.username"/> À» <arg key="logon.username"/> À¸·Î
<arg key="logonForm.password"/> À» <arg key="logon.password"/> À¸·Î
º¯°æÇÑ µÇ¾î ÀÖ´ÂÁö È®ÀÎÇÕ´Ï´Ù.

(6) Validation ÀÛµ¿ ¿ø¸® ¼³¸í & ¿¡·¯ ¸Þ½ÃÁö ¼öÁ¤
  • User Name is required.
  • Password is required.

¾Æ¹«°Íµµ ÀÔ·ÂÇÏÁö ¾Ê°í Submit ¹öưÀ» Ŭ¸¯Çϸé À§¿Í °°Àº ¿¡·¯ ¸Þ½ÃÁö¸¦ ÆäÀÌÁö¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¸Þ½ÃÁö´Â /pages/logon.jsp ¿¡¼­ Ãâ·ÂÇϰí ÀÖ°í, ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϴ ű״ <html:errors/> ÀÔ´Ï´Ù.
ÀÌ·± ¸Þ½ÃÁö´Â ¾î¶»°Ô È­¸é¿¡ Ãâ·ÂµÇ´Â °É±î¿ä?
DynaValidator ´Â ¸Þ½ÃÁö¸¦ ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­ ¾ò½À´Ï´Ù.
MessageResources.properties ÇÁ·ÎÆÛƼ ÆÄÀÏÀ» ¿ÀÇÂÇÏ°í ´ÙÀ½ Ű¿¡ ÁÖ¸ñÇØ¼­ º¸¼¼¿ä.

errors.required={0} is required.

MessageResources.properties ´Â »ç¿ëÀÚ¸í°ú ÆÐ½º¿öµå¿¡ ´ëÇÑ À¯È¿¼º °Ë»ç ¸Þ½ÃÁö°¡ ÀÖ¾î¾ß ÇÏ´Â °÷ÀÔ´Ï´Ù.

  • User Name is required.
  • Password is required.

¸Þ½ÃÁö¿¡¼­ ´Ü¾î "User Name" °ú "Password" ´Â validation.xml ÆÄÀÏ ³»¿¡ arg ¿¤¸®¸ÕÆ®ÀÇ key ¼Ó¼º°ª¿¡ ÇØ´çÇÕ´Ï´Ù. <arg key="logon.username"/> ¿¡¼­ logon.username À» MessageResources.properties ¿¡¼­ ãÀ¸¸é ۰ªÀÌ User Name ÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ °ªÀÌ errors.required={0} is required. ¿¡¼­ {0} ÀÇ ÀÎÀÚ·Î ÀÛ¿ëÇÑ °ÍÀÔ´Ï´Ù.
{0} is required. ¿¡¼­ {0}¿¡ logon.username °ú logon.password Ű °ªÀÌ ÀÎÀÚ·Î ÀÛ¿ëÇØ¼­ °á±¹Àº ¿ì¸®°¡ È®ÀÎÇÑ UserName is required. ¿Í °°Àº ¸Þ½ÃÁö¸¦ º¸°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
errors.required={0} is required ¸Þ½ÃÁö°¡ Àû¿ëµÈ ÀÌÀ¯´Â validatiion.xml ¾È¿¡ ´äÀÌ ÀÖ½À´Ï´Ù.

<form name="logonForm">
  <field
      property="username"
      depends="required">
          <arg key="logon.username"/>
  </field>
  <field
      property="password"
      depends="required,mask">
          <arg key="logon.password"/>
          <var>
              <var-name>mask</var-name>
              <var-value>^[0-9a-zA-Z]*$</var-value>
          </var>
  </field>
</form>

depends ¼Ó¼º¿¡ required ¶ó°í ¼³Á¤µÇ¾ú±â ¶§¹®¿¡ ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­
errors.requird={0} is required. °¡ ÀÛµ¿ÇÑ °ÍÀÔ´Ï´Ù.

ÀÌÁ¦ User Name is required. Password is required ¶ó´Â Åü¸í½º·± ¸Þ½ÃÁö ¿Ü¿¡ Á»´õ Ä£¼÷ÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ·Á ÇÕ´Ï´Ù.
¿¡·¯ ¸Þ½ÃÁöÀÇ header ¸Þ½ÃÁö¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

errors.header=<h3><font color="red">Validation Error</font></h3><p>You must correct the following error(s) before proceeding:</p><UL>
(7) ·Î±×ÀÎ ½ÇÆÐ½Ã Áö½Ã ¸Þ½ÃÁö ¼öÁ¤ ÈÄ Å×½ºÆ®

¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ·ÎµåÇÑ ÈÄ ·Î±×ÀÎ ÆäÀÌÁö·Î °¡¼­ ¾Æ¹«·± °ªÀ» ³ÖÁö ¾Ê°í Submit ¹öưÀ» Ŭ¸¯ÇÕ´Ï´Ù.
´ÙÀ½°ú °°Àº ¸Þ½ÃÁö¸¦ ³ª¿À´ÂÁö È®ÀÎÇÕ´Ï´Ù.

°è¼ÓÇØ¼­ ÅØ½ºÆ® Çʵå Áß Çϳª¿¡¸¸ °ªÀ» ÀÔ·ÂÇϰí Submit ¹öưÀ» Ŭ¸¯ÇÕ´Ï´Ù.
¿¡·¯ ¸Þ½ÃÁö°¡ ¾î¶»°Ô º¯°æµÇ¾ú´ÂÁö È®ÀÎÇÕ´Ï´Ù.

Validation - validation.xml

Validation ¿¡ °ü·ÃµÈ ÆÄÀÏÀº validation.xml °ú validation_rules.xml ÆÄÀÏÀÌ ÀÖ½À´Ï´Ù.
validation.xml ÆÄÀÏ¿¡¼­ <formset> ºÎºÐÀÇ Ã¹¹øÂ° ű״ <form name="logonForm"> ÀÔ´Ï´Ù.
struts-blank ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀÇ validation.xml ÀÇ form ¿¤¸®¸ÕÆ®ÀÇ À̸§ÀÌ ¿ì¸®°¡ »ç¿ëÇÏ´Â ActionForm ÀÎ logonForm °ú ÀÏÄ¡ÇÕ´Ï´Ù. (±×·¡¼­ Ãß°¡°¡ ¾Æ´Ñ ¼öÁ¤À» ÇÑ °ÍÀÔ´Ï´Ù.)

¾ð¾î¿¡ ´ëÇØ¼­ Ưº°È÷ ¸í½ÃµÇÁö ¾Ê´Â´Ù¸é µðÆúÆ® form ű×ÀÇ ¾ð¾î´Â ¿µ¾îÀÔ´Ï´Ù.
<formset language="fr"> À̰ÍÀº ¾ð¾î°¡ ÇÁ¶û½º¾îÀÏ ¶§ »ç¿ëµË´Ï´Ù.

struts-config.xml ÀÇ plug-in ¿¤¸®¸ÕÆ®¸¦ ã¾Æº¾´Ï´Ù.
Validation ÇÁ·¹ÀÓ¿öÅ©°¡ Ç÷¯±×ÀÎÀ¸·Î ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

<formset> ÀÌ ºÎºÐ¿¡ ¿©·¯ºÐÀÌ À¯È¿¼º °Ë»ç¸¦ ¿øÇÏ´Â Æû(form)¿¡ ´ëÇÑ ³»¿ëÀ» Ãß°¡ÇÏ¿© »ç¿ëÇÕ´Ï´Ù.
<form name="logonForm"> <arg key="logon.username"/> ´Â Validator ¿¡°Ô ¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­ Űlogon.username Ű¿¡ ÇØ´çÇÏ´Â °ªÀ» ã¾Æ¼­ errors.required={0} is required. ¿¡¼­ {0}ÀÇ ¾Æ±Ô¸ÕÆ®·Î Àü´ÞÇÏ¿© Validation ¸Þ½ÃÁö¸¦ ¸¸µé°Ô ÇÕ´Ï´Ù.
¸¸¾à logon.username °ªÀÌ ¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ ÀÖÁö ¾Ê´Ù¸é null is required. ¿Í °°Àº ¸Þ½ÃÁö¸¦ º¸°Ô µÉ °ÍÀÔ´Ï´Ù.
ÀÌ¿Í °°Àº ¿¡·¯¸¦ ÀϺη¯ ³»°í È®ÀÎÇØ º¸µµ·Ï ÇÕ´Ï´Ù.

(8) UserName, Password Çʵ忡 ¸ðµÎ ÀÔ·Â ÈÄ Å×½ºÆ® - LogonSubmit.do

´Ù½Ã ·Î±×ÀÎ ÆäÀÌÁö·Î À̵¿Çؼ­ À̹ø¿¡´Â ÅØ½ºÆ® Çʵ忡 ¸ðµÎ ÀÔ·ÂÇÑ ´ÙÀ½¿¡ Submit ¹öưÀ» Ŭ¸¯ÇÕ´Ï´Ù.
´ÙÀ½°ú °°Àº ¿¡·¯¸¦ È®ÀÎÇÕ´Ï´Ù.

java.lang.ClassNotFoundException: com.michaelthomas.mystrutshelloworld.LogonAction

http://localhost:8080/mystruts-helloworld/Logon.do ¸¦ ´Ù½Ã ¹æ¹®Çؼ­, ¼­ºí¸´ ÄÁÅ×À̳ʰ¡ ¸¸µç html Äڵ带 À¥ºê¶ó¿ìÀúÀÇ "¼Ò½º º¸±â" ¸¦ ÀÌ¿ëÇÏ¿© ¾Æ·¡ Äڵ带 È®ÀÎÇÕ´Ï´Ù.

<form name="logonForm" method="post" action="/mystruts-helloworld/LogonSubmit.do">

Logon.do ¿¡¼­ Submit ¹öưÀ» ´­·ÈÀ» ¶§ LogonSubmit.do ¸¦ ¿äûÇÏ°Ô µË´Ï´Ù.
ÀÌ ¿äû¿¡ ´ëÇØ ÀÏÀ» Çϴ Ŭ·¡½º°¡ LogonAction Ŭ·¡½ºÀÔ´Ï´Ù.
ÇÏÁö¸¸, LogonAction ÀÌ ÀÏÀ» Çϱâ Àü¿¡ Struts´Â struts-config.xml ¿¡¼­ action ¿¡¼­ ¼³Á¤(validate="true")´ë·Î Validation üũ¸¦ ¸ÕÀú ¼öÇàÇÕ´Ï´Ù.
ÀÌ Validation üũ°¡ Åë°úµÇ¸é ±×Á¦¼­¾ß LogonAction ÀÇ execute ¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù.
struts-config.xml ÆÄÀÏ¿¡¼­ <action-mappings> ºÎºÐÀ» º¸¸é ¾Æ·¡ÀÇ Àڹ٠Ŭ·¡½º°¡ ºÒ¸®¿öÁø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

<action path="/LogonSubmit" type="com.michaelthomas.mystrutshelloworld.LogonAction"

ÀÌÁ¦ ÀÌ ÀÚ¹Ù ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù.

(9) LogonAction.java »ý¼º

Package ºä¿¡¼­ mystruts-helloworld ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÑ ÈÄ, Åø¸Þ´ºÁß ¾Æ·¡ ¸Þ´º¸¦ ¼±ÅÃÇÕ´Ï´Ù.

Name Çʵ忡´Â com.michaelthomas.mystrutshelloworld ¶ó°í ÀÔ·ÂÇϰí Finish ¹öưÀ» Ŭ¸¯ÇÏ¿© Package »ý¼ºÀÌ ¿Ï·áÇÕ´Ï´Ù.

Package ºä¿¡¼­ com.michaelthomas.mystrutshelloworld ÆÑŰÁö¸¦ ¼±ÅÃÇÑ ÈÄ ±×¸²°ú °°ÀÌ Åø¹Ù¿¡¼­ New Java Class ¸¦ Ŭ¸¯ÇÕ´Ï´Ù.

Name Çʵ忡 LogonAction À̶ó°í ÀÔ·ÂÇÑ ÈÄ Finish ¸¦ Ŭ¸¯ÇÏ¿© ¿Ï·áÇÕ´Ï´Ù.

¿¡µðÅÍ¿¡¼­ LogonAction.java À» ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇÕ´Ï´Ù.

LogonAction.java

package com.michaelthomas.mystrutshelloworld;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.Action;

public final class LogonAction extends Action {

  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception {

    String username = (String) PropertyUtils.getSimpleProperty(form,"username");
    String password = (String) PropertyUtils.getSimpleProperty(form,"password");
    
    ActionMessages errors = new ActionMessages();

    if ( username.equals("test") && password.equals("password") ) {
      // Set a request attribute to be used by a JSP page.
      request.setAttribute("fullName", "John Doe");
      request.setAttribute("logonID", username);
    } else {
      errors.add(
      ActionMessages.GLOBAL_MESSAGE,
      new ActionMessage("errors.logon.invalid"));
    }
    
    if ( errors.isEmpty() ) {
      return (mapping.findForward("success"));
    } else {
      this.saveErrors(request, errors);
      return (mapping.findForward("failure"));
    }
  }
}

À§ÀÇ ÄÚµåÁß Áß¿äÇÑ ºÎºÐÀ» ºÐ¼®ÇØ º¾½Ã´Ù.

String username = (String) PropertyUtils.getSimpleProperty(form, "username");

Àü¼ÛµÈ ÆûÀ¸·ÎºÎÅÍ °ª(¿©±â¼­´Â »ç¿ëÀÚ¸í°ú ÆÐ½º¿öµå)À» °¡Á®¿À´Â ÄÚµåÀÔ´Ï´Ù.

request.setAttribute("fullName", "John Doe");

´ÙÀ½ ¾×¼ÇÀ̳ª JSP ÆäÀÌÁö·Î º¸³¾ µ¥ÀÌÅ͸¦ HttpServletRequest ¿¡ ÀúÀåÇÏ´Â ÄÚµåÀÔ´Ï´Ù.

errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.logon.invalid"));

¿©±â¼­ errors.logon.invalid Ű´Â ¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÕ´Ï´Ù. (ÇöÀç´Â ÇÁ·ÎÅÍÇÇ ÆÄÀÏ¿¡ ¾ø½À´Ï´Ù. ¼öÁ¤ÇÏ´Â ³»¿ëÀº Á¶±Ý ÈÄ¿¡ ³ª¿É´Ï´Ù.

return (mapping.findForward("success"));
return (mapping.findForward("failure"));

Struts ¿¡°Ô ´ÙÀ½ ¾×¼ÇÀÌ ¹«¾ùÀÎÁö ¾Ë¸®´Â ÄÚµåÀÔ´Ï´Ù.
½ºÆ®·¯Ã÷ ÄÁÆ®·Ñ·¯´Â ÀÌ Äڵ忡 ÀÇÇØ ´ÙÀ½ ¾×¼ÇÀ» °áÁ¤ÇÕ´Ï´Ù.

(10) UserName, Password Çʵ忡 ¸ðµÎ ÀÔ·Â ÈÄ Å×½ºÆ® 2 - LogonSubmit.do

Logon ÆäÀÌÁö·Î À̵¿ÇÕ´Ï´Ù.
User Name, Password ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÕ´Ï´Ù.
User Name: test
Password: test ( password ¶ó°í ÀÔ·ÂÇÏÁö ¾Ê½À´Ï´Ù. ºÐ¸í validation error °¡ ¸¸µé¾îÁú °ÍÀÔ´Ï´Ù.)
Submit ¹öưÀ» Ŭ¸¯ÇÏ¸é ³ªÅ¸³ª´Â ÆäÀÌÁö¿¡¼­ Validation error ¸¦ ¼³¸íÇÏ´Â ¾î¶°ÇÑ ±Ûµµ ¾ø½À´Ï´Ù.
¿ì¸®ÀÇ LogonAction Àº DynaValidator »Ó ¾Æ´Ï¶ó Ãß°¡ÀûÀÎ validation À» °¡Áö°í ÀÖ½À´Ï´Ù. (Äڵ忡 ±¸ÇöµÇ¾î ÀÖ´Â À¯È¿¼º °Ë»ç¸¦ ¸»Çϰí ÀÖ½À´Ï´Ù.)
±×·¡¼­ test/test ·Î ·Î±×¿ÂÀ» ½ÃµµÇÑ »ç¿ëÀÚ°¡ À¯È¿ÇÑ »ç¿ëÀÚ°¡ ¾Æ´Ï¶ó°í °áÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù.
¿ì¸®ÀÇ ÇÁ·Î±×·¥¿¡¼­´Â test/password ÀÎ ´Ü ÇϳªÀÇ À¯È¿ÇÑ user/password ¸¦ °¡ ÀÖ½À´Ï´Ù.
°á°úÀûÀ¸·Î Struts ÄÁÆ®·Ñ·¯´Â struts-config.xmlÀÇ ¼³Á¤´ë·Î "failure" ¿¡ ÇØ´çÇÏ´Â "/Logon.do" ¸¦ ¿äûÇÕ´Ï´Ù.
(- LogonSubmit ¾×¼Ç Ãß°¡ ¸¦ Âü°íÇϼ¼¿ä. ) ±×·¯¸é logon.jsp ÆäÀÌÁö´Â Validation errors ¸¦ º¸¿©ÁÖ°Ô µË´Ï´Ù.
¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­ errors.logon.invalid ۰ª¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö°¡ º¸ÀÌÁö ¾Ê½À´Ï´Ù. ÀÌÁ¦ ¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ errors.logon.invalid Ű¿Í Ű°ªÀ» ¼³Á¤ÇϰڽÀ´Ï´Ù.

(11) LogonAction ¿¡¼­ ¹ß»ýÇÑ Validation error Ãâ·Â - MessageResources.properties

ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ ¾Æ·¡ ³»¿ëÀ» error ŰÀÇ ¸Ç ¸¶Áö¸· ºÎºÐ ´ÙÀ½¿¡ Ãß°¡ÇÕ´Ï´Ù.

# -- validator (Custom) --
errors.logon.invalid=Invalid password. Try username='test' and password='password'

À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸³´Ï´Ù.
Logon ÆäÀÌÁö·Î À̵¿ÇÏ¿© User Name °ú Password ÅØ½ºÆ®Çʵ忡 ´ÙÀ½°ú °°Àº °ªÀ» ÀÔ·ÂÇÕ´Ï´Ù.
User Name: test
Password: test ( password¶ó°í ÀÔ·ÂÇÏÁö ¾Ê½À´Ï´Ù. Validation error °¡ ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù.)
Submit ¹öưÀ» Ŭ¸¯ÇÏ°í ¿ì¸®ÀÇ ¹®Á¦°¡ °íÃÄÁ³´ÂÁö È®ÀÎÇÕ´Ï´Ù.

(12) mainMenu.jsp ¾ø±â ¶§¹®¿¡ ³ª´Â ¿¡·¯ ¼öÁ¤.

Logon ÆäÀÌÁö·Î µ¹¾Æ¿Í¼­ ÀÌÁ¦´Â À¯È¿ÇÑ °ªÀ» ÅØ½ºÆ®Çʵ忡 ³Ö½À´Ï´Ù.
User Name: test
Password: password
Submit ¹öưÀ» Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°Àº ¿¡·¯¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.

javax.servlet.ServletException: No action config found for the specified url.

½ºÆ®·¯Ã÷ ÄÁÆ®·Ñ·¯´Â struts-config.xml ¼³Á¤´ë·Î "success" ¿¡ ÇØ´çÇÏ´Â /MainMenu.do ¿äûÇÕ´Ï´Ù.
( - LogonSubmit ¾×¼Ç Ãß°¡¸¦ ÂüÁ¶Çϼ¼¿ä )
±×·±µ¥ MainMenu.do ¾×¼Ç ¼³Á¤ÀÌ struts-config.xml ÆÄÀÏ¿¡ ¾ø±â ¶§¹®¿¡ À§¿Í °°Àº ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀÔ´Ï´Ù.
ÀÌÁ¦ ÀÌ ¾×¼Ç¿¡ ´ëÇÑ ¼³Á¤À» struts-config.xml ¿¡ Ãß°¡Çϵµ·Ï ÇÕ´Ï´Ù.
´ÙÀ½À» <action-mappings> ¼½¼Ç¿¡ Ãß°¡ÇÕ´Ï´Ù.

<!-- Display MainMenu page -->
<action path="/MainMenu"
        forward="/pages/mainMenu.jsp"/>

/pages/mainMenu.jsp ÆäÀÌÁö¸¦ ¾ÆÁ÷ ¾øÀ¸¹Ç·Î JSP ÆäÀÌÁö¸¦ ¾Æ·¡ ³»¿ëÀ¸·Î ¸¸µì´Ï´Ù.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitonal.dtd">
	
<html:html>
<head>
<title><bean:message key="mainmenu.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

<p>
  <bean:message key="mainmenu.welcome"/>
  <bean:write name="fullName" /> ( <bean:write name="logonID" /> )
</p>

<logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
  <font color="red">
    ERROR:  Application resources not loaded -- check servlet container
    logs for error messages.
  </font>
</logic:notPresent>

<h3><bean:message key="mainmenu.heading"/></h3>
<p><bean:message key="mainmenu.message"/></p>

</body>
</html:html>

mainMenu.jsp Äڵ忡¼­ LogonAction ÀÌ request °´Ã¼ ³Ö¾î Àü´ÞÇÑ µ¥ÀÌÅ͸¦ ¾î¶»°Ô Á¢±ÙÇÏ´ÂÁö¸¦ ÁÖ¸ñÇÕ´Ï´Ù.

<bean:write name="fullName" /> ( <bean:write name="logonID"/> )

´ÙÀ½ ۸¦ ¸Þ½ÃÁö¸®¼Ò½º ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡ Ãß°¡ÇÕ´Ï´Ù.

mainmenu.title=Main Menu Screen
mainmenu.heading=Main Menu Screen
mainmenu.message=The main menu goes here.
mainmenu.welcome=Welcome

À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù½Ã ¿Ã¸®°í Logon ÆäÀÌÁö·Î À̵¿ÇÕ´Ï´Ù.
User Name ¿¡ test, Password ¿¡ password ¶ó°í ÀÔ·ÂÇÑ ÈÄ Submit ¹öưÀ» Ŭ¸¯Çϸé mainMenu.jsp ÆäÀÌÁö·Î À̵¿ÇÏ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
mainMenu.jsp ÆäÀÌÁö¿¡¼­ °ü·Ã ¸Þ½ÃÁö°¡ ÇÁ·ÎÆÛƼ ÆÄÀÏ¿¡¼­ ¼³Á¤ÇÑ´ë·Î ³ªÅ¸³ª´ÂÁö È®ÀÎÇÕ´Ï´Ù.

À̰ÍÀ¸·Î Struts First Steps ¸¦ ¿Ï¼ºÇß½À´Ï´Ù.