ÀÌ ¹®¼ÀÇ ³»¿ë¿¡ ´ëÇÑ ¹«´Ü º¹Á¦¸¦
±ÝÇÕ´Ï´Ù.
Copyright © 2003 Yoon Kyung Koo, All rights reserved.
J2EE, EJB, Struts notes
J2EE, ƯÈ÷ EJB¿Í Struts ÇÁ·¹ÀÓ¿÷, º¸¾È, À¥·ÎÁ÷
¼¹ö¿¡ °ü·ÃµÈ ÆÁµéÀ» Á¤¸®ÇÏ°í ÀÖ½À´Ï´Ù.
J2EE 1.4¿Í Sun Java System
AS¿¡ °ü·ÃµÈ ³»¿ëÀº
º°µµÀÇ ÆäÀÌÁö¿¡¼ ´Ù·ê ¿¹Á¤ÀÔ´Ï´Ù.
1. EJB reference problems
EJB°¡ ´Ù¸¥ EJB¸¦ ÂüÁ¶ÇÒ ¶§, ȤÀº ´Ù¸¥ Ŭ·¡½ºµéÀ» ÂüÁ¶ÇÒ ¶§ »óÈ£ ÂüÁ¶
¹®Á¦³ª Ŭ·¡½º °æ·Î ÂüÁ¶ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.
ÀϹÝÀûÀÎ J2EE ÇÁ·ÎÁ§Æ®´Â ¿©·¯ Ƽ¾î·Î ±¸¼ºµÇ±â ¶§¹®¿¡ À¥ Ƽ¾î¿Í EJB
Ƽ¾î, ±×¸®°í Áß°£ Ƽ¾î¸¦ ±¸¼ºÇÏ´Â Àڹ٠Ŭ·¡½ºµé °£ÀÇ ÂüÁ¶ °ü°è(ÀÇÁ¸
±¸Á¶)¸¦ ¸íÈ®ÇÏ°Ô ÇØ¾ß ÇÑ´Ù.
À¥·ÎÁ÷ ¼¹öÀÇ °æ¿ì, EJB jar ÆÄÀÏ¿¡¼ ManifestÀÇ Class-Path Ç׸ñÀ» »ç¿ëÇÏ¿© EJB°¡
ÂüÁ¶Çϴ Ŭ·¡½ºµéÀÌ Æ÷ÇÔµÈ jar ÆÄÀÏ ¸ñ·ÏÀ» ÁöÁ¤ÇÒ ¼ö Àִµ¥
ear ÆÄÀÏ·Î deployµÇ´Â °æ¿ì¿¡¸¸ µ¿ÀÛÇÑ´Ù.
2. Emacs JDE¸¦ »ç¿ëÇÑ EJB Áö¿ø
À̸ƽº¸¦ »ç¿ëÇÏ¿© ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â »ç¶÷À̶ó¸é ´ëºÎºÐ JDE for Emacs¸¦ »ç¿ëÇÒ
°ÍÀÌ´Ù.
ÇöÀçÀÇ JDE ¹öÀüÀº EJB¸¦ Áö¿øÇÑ ¸¹Àº ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖÁö¸¸, EJB 2.x ½ºÆå¿¡ ¸Â´Â
EJB ½ºÄÌ·¹Æ° ¹öÆÛ¸¦ »ý¼ºÇÏÁö ¾Ê°í EJB 1.1 ½ºÆå¿¡ µû¸¥ ¹öÆÛµéÀ»
»ý¼ºÇØÁØ´Ù.
(M-x jde-ejb-session-bean-buffer ȤÀº M-x jde-ejb-entity-bean-buffer
¸í·É ÂüÁ¶)
Àӽ÷ΠÀÌ ±â´ÉµéÀ» EJB 2.x ½ºÆå¿¡ ¸Â´Â ¹öÆÛ¸¦ ¸¸µéµµ·Ï JDE 2.3.2
¹öÀüÀÇ jde-ejb.elÀ» º¯°æÇÏ¿© º¸¾Ò´Ù.
¼öÁ¤ÇÑ jde-ejb.el
3. Ant build.xml - ¸ÖƼ Ƽ¾î J2EE ÇÁ·ÎÁ§Æ®
À¥ Ƽ¾î, ¿©·¯ °³ÀÇ EJB, Data Transfer Object°¡ Æ÷ÇÔµÈ Áß°£ Ƽ¾î µî
¿©·¯ Ƽ¾î·Î ±¸¼ºµÇ´Â J2EE ÇÁ·ÎÁ§Æ®¸¦ ºôµåÇÏ´Â AntÀÇ ºôµå ÆÄÀÏÀ»
ÀÛ¼ºÇÒ ¶§¿¡´Â °¢ Ƽ¾î¿¡ ´ëÇÑ ÀÇÁ¸À» °í·ÁÇØ¾ß ÇÑ´Ù.
°¢ Ƽ¾îÀÇ ¿ä¼Ò°¡ ½ÇÇà ½Ã¿¡ »óÈ£ Ŭ·¡½º ÂüÁ¶¿¡ ´ëÇÑ ÀÇÁ¸À» deploy ½Ã¿¡
°í·ÁÇÏ¿© jar, war, ear ÆÄÀÏÀ» ±¸¼ºÇØ¾ß ÇÏ´Â °Íó·³, Ant·Î ºôµåÇÒ
¶§¿¡µµ °¢ Ÿ°Ùº°·Î ÀÌ¿Í À¯»çÇÑ °í·Á¸¦ ÇØ¾ß ÇÑ´Ù.
´ÙÀ½Àº À¥ applicationÀ» Æ÷ÇÔÇÑ ´ÙÁß Æ¼¾î ±¸Á¶¸¦ À§ÇÑ AntÀÇ build.xml
ÆÄÀÏ ¿¹Á¦ÀÌ´Ù.
¿¹Á¦ ÆÄÀÏ¿¡¼´Â web hot deploy ¸ðµå¸¦ Áö¿øÇϱâ À§ÇØ EJB¸¦ »ç¿ëÇÏÁö ¾Ê´Â
º°µµÀÇ Å×½ºÆ®¿ë ºñÁî´Ï½º Ƽ¾î¸¦ »ç¿ëÇÏ°í ÀÖ´Ù.
¶Ç´Ù¸¥ ¹æ¹ýÀ¸·Î´Â warÀÇ ³»¿ëÀº µð·ºÅ丮¿¡ Ç®¾î¼ ¹èÆ÷ÇÏ°í warÀÇ
³»¿ëÀ» »«, Áï EJB¿Í ¶óÀ̺귯¸®¸¸À¸·Î ±¸¼ºµÈ ear ÆÄÀÏÀ» ¹èÆ÷ÇÏ´Â
°ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é º°µµÀÇ ºñÁî´Ï½º Ƽ¾î ¾øÀÌ web hot deploy
¸ðµå¸¦ °³¹ß ¶§ »ç¿ë °¡´ÉÇÏ´Ù.
´ÙÁß Æ¼¾î J2EE ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ Ant ºôµå ÆÄÀÏ ¿¹
4. Jakarta Struts framework Àû¿ë ÆÁ
Struts 1.1 °¡À̵å(PDF ¹®¼)
MVC À¥ ¾ÆÅ°ÅØóÀÎ ½ºÆ®·µ ÇÁ·¹ÀÓ¿÷À» Àû¿ëÇÒ ¶§ ÀÚÁÖ ¸¸³ª°Ô µÇ´Â ¸î °¡Áö
¹®Á¦µé¿¡ ´ëÇÑ ÇØ°áÃ¥.
[¿©±â¿¡ bean:define¸¦ »ç¿ëÇÏ¿© Á¤ÀÇÇÑ °ªÀ» logic:iterate µîÀÇ
ű׿¡¼ ÂüÁ¶ÇÏ´Â ¿¹Á¦°¡ µé¾î¿Í¾ß ÇÔ]
[¿©±â¿¡ ¸ðµ¨(ActionForms)/ºä(jsp and tags)/ÄÁÆ®·Ñ·¯(Actions)¸¦
»ç¿ëÇÏ´Â ±âº» È帧°ú ÀüÇüÀûÀÎ °ü°èµé¿¡ ´ëÇÑ ¼³¸íÀÌ Ãß°¡µÉ °ÍÀÓ]
5. Weblogic Security SPI ±¸Çö ÆÁ
JAAS ±â¹Ý À§¿¡¼ J2EE Security¸¦ ±¸ÇöÇϱâ À§ÇÑ À¥·ÎÁ÷ ¼¹öÀÇ º¸¾È SPI
±¸Çö¿¡¼ÀÇ ¹®Á¦Á¡°ú ÇØ°áÃ¥
¹®Á¦Á¡ | ÇØ°áÃ¥ |
JAAS LoginContext¸¦ »ç¿ëÇÒ °æ¿ì, ÀÎÁõµÈ Subject°¡ À¥·ÎÁ÷ ¼¹öÀÇ
ÄÁÅ×À̳ʷΠÀüÆĵÇÁö ¾Ê´Â´Ù.
|
weblogic.security.services.Authentication.login(CallbackHandler) ¸Þ¼Òµå¸¦
»ç¿ëÇÏ¿© ¾òÀº Subject¿¡ ÀÎÁõµÈ Principalµé°ú
CredentialµéÀ» ÀúÀåÇÑ´Ù.
|
À¥·ÎÁ÷ÀÇ AuthenticationProvider¸¦ »ç¿ëÇÒ °æ¿ì(authentication
provider³ª identity asserter ¸ðµÎ ÇØ´ç) Ä¿½ºÅÒ
CallbackHandler¸¦ LoginModule¿¡ ³Ñ°ÜÁÙ ¼ö ¾ø´Ù.
À¥·ÎÁ÷ ¼¹öÀÇ ÄÁÅ×À̳ʰ¡ ·Î±×ÀÎ ¸ðµâÀ» È£ÃâÇϱ⠶§¹®ÀÌ´Ù.
|
weblogic.security.services.Authentication.login(CallbackHandler) ¸Þ¼Òµå¸¦ Á÷Á¢
È£ÃâÇÑ´Ù. JAAS¿¡¼ LoginContext¸¦ »ý¼ºÇÏ¿© login() ¸Þ¼Òµå¸¦
È£ÃâÇÏ´Â °Í°ú À¯»çÇϸç, À¥·ÎÁ÷¿¡ µî·ÏµÈ authentication
providersµéÀÇ LoginModuleµéÀÌ È£ÃâµÇ¾î, Authentication.login()
¸Þ¼Òµå¿¡ ÀÎÀÚ·Î ÁöÁ¤ÇÑ Ä¿½ºÅÒ Äݹé Çڵ鷯°¡ ·Î±×ÀÎ ¸ðµâ¿¡ ³Ñ°ÜÁø´Ù.
|
À¥·ÎÁ÷ ¼¹ö ÄÁÅ×À̳ʰ¡ user¿Í groupÀ¸·Î °¢°¢ ÀνÄÇÏ´Â
PrincipalÀ» ¸¸µé ÇÊ¿ä°¡ ÀÖ´Ù.
|
weblogic.security.spi.WLSUser¿Í weblogic.security.spi.WLSGroup
ÀÎÅÍÆäÀ̽º¸¦ °¢°¢ »ó¼ÓÇÏ´Â PrincipalÀ» Á¤ÀÇÇÏ¸é µÈ´Ù.
weblogic.security.SubjectUtils Ŭ·¡½º´Â Subject·ÎºÎÅÍ »ç¿ëÀÚ
Á¤º¸³ª ±×·ì Á¤º¸¸¦ °¡Á®¿À´Â À¯Æ¿¸®Æ¼ ¸Þ¼ÒµåµéÀ» Á¦°øÇÑ´Ù.
|
[¿©±â¿¡ À¥·ÎÁ÷ security SPI °ü·Ã]
6. HTML input form charset tip
7. À¯´ÏÄÚµå·Î µÈ ÆÄÀÏ À̸§À» ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡¼ ÀúÀåÇÏ´Â ¹æ¹ý
ÀÌ°ÍÀº ÀÚ¹Ù ÆÁÀ̶ó±âº¸´Ù´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® »çÀÇ ÀÎÅÍ³Ý ÀͽºÇ÷η¯ »ç¿ë
ÆÁÀ̶ó°í ºÁ¾ß°Ú³×¿ä.
ÆÄÀÏ ´Ù¿î·ÎµåÇÒ ¶§ ÀÎÅÍ³Ý ÀͽºÇ÷η¯°¡ ÀÚµ¿À¸·Î ´Ù¿î·Îµå ´ëÈ»óÀÚ¸¦
¶ç¿ìµµ·Ï ÇÏ·Á¸é Content-Disposition HTTP Çì´õ¸¦ »ç¿ëÇÏ¸é µÈ´Ù´Â °ÍÀÌ
¸¹ÀÌ ¾Ë·ÁÁ® ÀÖ´Â °Í °°½À´Ï´Ù.
ÀÌ °æ¿ì
Content-Disposition: attachment; filename=myfile.txt;
¹¹ ÀÌ·± ½ÄÀ¸·Î ó¸®ÇÏ¸é µÇ´Âµ¥ ¹®Á¦´Â ÆÄÀÏ À̸§ÀÌ myfile.txt°¡ ¾Æ´Ï¶ó
ÇöÀçÀÇ ÀÎÄÚµù(ÇÑ±Û À©µµ¿ì¶ó¸é ÀÚ¹ÙÀÇ MS949)¿¡¼ Ç¥ÇöÇÒ ¼ö ¾ø´Â ±ÛÀÚÀÏ °æ¿ìÀÔ´Ï´Ù.
´ÙÀ½ URL¿¡¼ ½Ç¿ëÀûÀÎ ÇعýÀ» Á¦½ÃÇÏ°í ÀÖ½À´Ï´Ù. ½ÇÁ¦ Ç¥ÁØÀ̶ó°í
º¸±â¿¡´Â ¾ÆÁ÷ ¹«¸®°¡ ÀÖ½À´Ï´Ù. ¾ÆÁ÷ unicode ÆÄÀÏ À̸§À» ÀÌ Çì´õ¿¡¼
ó¸®Çϴ ǥÁØÀº ¸íÈ®ÇÏÁö ¾ÊÀº °Í °°½À´Ï´Ù.
ÀÌ ³»¿ë°ú °ü·ÃµÈ RFC´Â
ÀÔ´Ï´Ù.
±×·±µ¥ ÀÌ·¸°Ô ó¸®Çϸé UTF8·Î escapeµÇ¸é¼ ³Ê¹« ±æ¾îÁö°Ô µÇ´Âµ¥
IE°¡ Çì´õ ±æÀÌ¿¡ ÇѰ踦 µÎ°í ÀÖ¾î¼ ±ä ÆÄÀÏ À̸§Àº À߸ø º¸¿©ÁÙ ¼ö ÀÖ´ä´Ï´Ù.
±×·¡¼ Ç×»ó ÀÌ ¹æ¹ýÀ» »ç¿ëÇϱ⺸´Ù´Â ÇöÀç ÀÎÄÚµùÀ¸·Î ¸ø º¸¿©ÁÖ´Â À¯´ÏÄÚµå ±ÛÀÚ°¡ ÀÖ´ÂÁö °Ë»ç¸¦ Çؼ ±× °æ¿ì¿¡¸¸ ÀÌ ¹æ¹ýÀ» ¾²´Â °Ô ÁÁ°Ú½À´Ï´Ù.
´ÙÀ½Àº Å×½ºÆ®¸¦ À§ÇÑ ¼ºí¸´ ºÎºÐ ÄÚµå·Î, tomcat 5.0¿¡ input/output
ÀÎÄÚµù ¸ðµÎ¸¦ ISO-8859-1·Î °¡Á¤ÇÏ°í ÀÖ½À´Ï´Ù.
input/output ÀÎÄÚµùÀÌ MS949³ª EUC-KRÀÎ °æ¿ì¿¡´Â ¾à°£ ¼öÁ¤ÀÌ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù.
ÀÌ ¹æ½ÄÀ» »ç¿ëÇϸé ÇÑ±Û À©µµ¿ì¿¡¼ MS949 ¹ÛÀÇ ÀϺ»¾î³ª Áß±¹¾î ±ÛÀÚ¸¦ °¡Áø
ÆÄÀÏ À̸§µµ ÀÎÅÍ³Ý ÀͽºÇ÷η¯ ´Ù¿î·Îµå ´ëÈ»óÀÚ¿¡¼ Ç¥ÇöÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
// »ç¿ë ÀÎÄÚµùÀ» MS949·Î »ý°¢ÇÏ°í »ó¼ö ¼±¾ðÇÕ´Ï´Ù.
private static final String MY_ENCODING = "MS949";
... (»ý·«)
{
... (»ý·«)
String fileName = request.getParameter("fileName");
// 1¹ÙÀÌƮ¥¸®¶ó°í »ý°¢ÇÏ°í ÅèĹÀÌ ÀоîµéÀÎ °ÍÀ» UTF8·Î ¹Ù·Î Àâ½À´Ï´Ù.
// ½ÇÁ¦ IE°¡ UTF8·Î postÇØ¾ß ÇÏ°ÚÁö¿ä.
fileName = new String(fileName.getBytes("8859_1"), "UTF8");
String agentType = request.getHeader("User-Agent");
response.setContentType("application/octet-stream;");
// ÅèĹÀÌ ÀÌÇØÇÒ ¼ö ÀÖ´Â RESPONSE HEADER·Î ¹Ù²ãÁÖ±â À§ÇØ MS949¿¡ µû¸¥ ¹ÙÀÌÆ®
// ¹è¿·Î ¹Ù²Ù°í ÀÌ°ÍÀ» ´Ù½Ã 1¹ÙÀÌƮ¥¸® StringÀÎ ISO-8859-1 ÀÎÄÚµùÀ¸·Î
// Çؼ String °´Ã¼¸¦ ´Ù½Ã ¸¸µì´Ï´Ù. ¸¸¾à MS949¸¦ ±âº» ÀÎÄÚµùÀ¸·Î ÀνÄÇÏ´Â
// ȯ°æÀ̶ó¸é ±×³É ¹®ÀÚ¿À» »ç¿ëÇÏ¸é µÇ°ÚÁö¿ä.
// String header = "attachment; filename=" + fileName + ";";
String header = "attachment; filename=" + new
String(fileName.getBytes(MY_ENCODING), "8859_1") + ";";
// ÇöÀç ÀÎÄÚµùÀ¸·Î ´Ù Ç¥ÇöÇÒ ¼ö ÀÖ´ÂÁö ¿©ºÎ¸¦ °Ë»çÇؼ, ´Ù Ç¥ÇöÇÒ ¼ö ¾øÀ»
// °æ¿ì¿¡¸¸ RFC 2047¿¡¼ Á¤ÀÇÇÑ °Í°ú À¯»çÇÑ ¹æ½ÄÀ¸·Î escapeÀ» ÇÕ´Ï´Ù.
if (!fileName.equals(new String(fileName.getBytes(MY_ENCODING),
MY_ENCODING))) {
header = "=?UTF-8?Q?attachment; filename="
+ java.net.URLEncoder.encode(fileName, "UTF-8") + ";?=";
}
response.setHeader("Content-Disposition", header);
}
8. J2EE 1.4
See Notes on J2EE 1.4 AS Developer Release and Features.
[Class Loader, Dynamic Proxy, XML, JDBC, JNDI, LDAP, Transaction, Security, Cryptography, SSL, Authentication, Login, Authorization, CORBA, RMI, RMI-IIOP, ... º»°ÝÀûÀÎ ÀÚ¹Ù °³¹ßÀÚ·Î °¡±â À§ÇÑ (Ã¥) ÀÚ¹Ù 2 SDK 1.4 ½ÃÀÛ ±×¸®°í ¿Ï¼º]
Yoon Kyung Koo <yoonforh at yahoo dot com>
ÀÌ ÆäÀÌÁö´Â 2003³â 1¿ù 18ÀÏ¿¡ óÀ½ ¸¸µé¾îÁ³½À´Ï´Ù.
Last modified: Sat Dec 20 12:00:25 KST 2003