Form Study #1

kenu
2002-02-24 12:34¿ÀÀü

°ªÀ» ³Ñ°ÜÁÖ´Â ¹æ½Ä Áß ¸¹ÀÌ »ç¿ëÇÏ´Â 3°¡Áö ¹æ½ÄÀ» ³íÀÇÇϰڽÀ´Ï´Ù. GET, POST ¹æ½Ä°ú ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Â multipart/form-data ¿¡ °üÇÑ °ÍÀÔ´Ï´Ù. ¼Ò½º¸¦ ÀÏ´Ü º¸½ÃÁÒ.
formstudy.jsp
<html>
<head>
  <title>okjsp form study</title>
</head>
<body>
<%-- ÀÔ·Â °ªÀ» ó¸®ÇÏ´Â ºÎºÐ --%>
<pre>
contentType: <%=request.getContentType()%>
contentLength: <%=request.getContentLength()%>
method: <%=request.getMethod()%>
get name: <%=request.getParameter("gname")%>
post name: <%=request.getParameter("pname")%>
mp name: <%=request.getParameter("mpname")%>
filename: <%=request.getParameter("filename")%>
</pre>
<%-- °ªÀ» ÀԷ¹޴ ºÎºÐ --%>
form1:
  <form method="get">
    name (get) <input type="text" name="gname">
    <br>
    <input type="submit" value="get">
  </form>
form2:
  <form method="post">
    name (post) <input type="text" name="pname">
    <br>
    <input type="submit" value="post">
  </form>
form3:
  <form method="post" enctype="multipart/form-data">
    name (multipart) <input type="text" name="mpname">
    <br>
    file <input type="file" name="filename">
    <br>
    <input type="submit" value="multipart">
  </form>
</body>
</html>

		


form ű׿¡ action ¼Ó¼ºÀÌ ¾ø´Ù¸é ÀÚ±â ÀÚ½ÅÀ» ´Ù½Ã ÇÑ ¹ø È£ÃâÇÕ´Ï´Ù. Áï action="formstudy.jsp" ¿Í °°Àº °á°úÀÔ´Ï´Ù. ºê¶ó¿ìÀúÀÇ ÁÖ¼ÒÁÙ¿¡ ÀÔ·ÂÇØ¼­ ¼­¹ö¿¡ ¿äûÇÒ °æ¿ì ±âº» method ´Â GET ÀÔ´Ï´Ù.

GET ¹æ½ÄÀÇ °æ¿ì ³Ñ°ÜÁÖ´Â °ªÀº ÁÖ¼ÒÁÙ¿¡ Ãß°¡µË´Ï´Ù. ù¹øÂ° ÀÔ·Ââ¿¡ okjsp ¶ó´Â °ªÀ» ÀÔ·ÂÇÑ ÈÄ¿¡ Àü¼Û ¹öưÀ» ´©¸£¸é ´ÙÀ½ È­¸éÀº ´ÙÀ½°ú °°ÀÌ ³ª¿À°Ô µË´Ï´Ù. Ư¡ÀûÀÎ °ÍÀº GETÀ» ÅëÇÑ °ªÀÇ Àü´ÞÀº ÁÖ¼ÒÁÙÀ» Ÿ°í Àü´ÞÀÌ µË´Ï´Ù. µû¶ó¼­ ¼­¹ö¸¶´Ù ´Ù¸£Áö¸¸ ´ë·« 230¹ÙÀÌÆ® ÀÌ»óÀÇ °ªÀº Àü´ÞÇÒ ¼ö ¾ø°Ô µË´Ï´Ù. ¶§¹®¿¡ ºñ¹Ð¹øÈ£ °°Àº Áß¿äÇÑ °ªµéÀº ³ëÃâµÇ±â ½±°í, Ç׸ñÀÌ ¸¹Àº form ¾ç½ÄÀº GET¹æ½ÄÀ¸·Î ó¸®ÇÏÁö ¾ÊÀ» ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù.

POST ¹æ½ÄÀº °ªÀÇ Àü´Þ°æ·Î´Â header ºÎºÐÀÔ´Ï´Ù. getContentLength() ¸Þ¼Òµå¸¦ ÅëÇØ¼­ Àü´ÞµÇ´Â °ªÀÇ Byte Å©±â¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¶§ parameter À̸§°ú °ªÀÌ = À» »çÀÌ¿¡ µÎ°í, Ç׸ñ°ú Ç׸ñÀº & ·Î ±¸ºÐµÈ ¹®ÀÚ¿­·Î Header ¸¦ ÅëÇØ¼­ Àü´ÞÀÌ µË´Ï´Ù. ^^ ÁÖ¼ÒÁÙ¿¡ GET ¹æ½ÄÀÇ ÀÚ±¹À» ³²±ää POST ÆûÀ» »ç¿ëÇϸé ÁÖ¼ÒÁÙÀÇ ÆÄ¶ó¸ÞÅ͵µ Àü´ÞÀÌ µË´Ï´Ù. µÎ¹øÂ° ÀÔ·Ââ¿¡ okjsppost ¸¦ ÀÔ·ÂÇϰí Àü¼ÛÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ ³ª¿É´Ï´Ù.

contentLength °¡ 15°¡ ³ª¿Ô½À´Ï´Ù. Àú ±æÀÌÀÇ Àǹ̴ "pname=okjsppost"¸¦ »ý°¢Çغ¸¸é ½±°Ô ÀÌÇØ°¡ °¥ °ÍÀÔ´Ï´Ù. getParameter("pname") ÇßÀ» °æ¿ì okjsppost °¡ ³ª¿À´Â °ÍÀº ´Ù ¾Æ½Ã°ÚÁÒ. ±×¸®°í contentType ÀÌ application/x-www-form-urlencoded ÀÎ °Íµµ ±â¾ïÇØµÎ½Ã±â ¹Ù¶ø´Ï´Ù.

form tag ¿¡ enctype="multipart/form-data" ÀÏ °æ¿ì Àü¼Û¿¡ ´ëÇØ¼­ »ìÆìº¾½Ã´Ù. °¡Àå ¸¹ÀÌ Áú¹®µÇ´Â °ÍÀÌ ¿Ö ÆÄÀÏÀº ¾÷·Îµå µÇ´Âµ¥ request.getParameter() ·Î º¯¼ö°ªÀ» °¡Á®¿ÀÁö ¸øÇϴ°¡ ÀÔ´Ï´Ù. (ÀÌ°Í Áú¹®ÇÏ´Â »ç¶÷ 100¸íµµ ´õ ºÃ½À´Ï´Ù. ÀÌ ¹®Á¦ ¶§¹®¿¡ ÀÌ °­Á¸¦ ¾´ °ÍÀ̱⵵ ÇÏÁÒ. ÀÏÁ¾ÀÇ FAQ ¶ó°í ÇÒ ¼ö ÀÖÁÒ.) ÀÏ´Ü multi ¶ó´Â °ª¸¸ ³Ö¾î¼­ º¸³»¸é 293~300 »çÀÌÀÇ °ªÀÌ ³ª¿É´Ï´Ù. ¿Ö À̸® °¡º¯ÀûÀÎÁö´Â ¾ÆÁ÷ Àúµµ ´õ ã¾ÆºÁ¾ßÇÒ °Í °°±¸¿ä(Àúµµ À̰ŠºÐ¼®Àº óÀ½ÀÔ´Ï´Ù. ^^) "mpname=multi" ¿Ü¿¡µµ ¹º°¡ ´Ù¸¥ °ÍÀÌ 280¹ÙÀÌÆ® ÀÌ»óÀÇ Á¤º¸¸¦ °°ÀÌ º¸³½´Ù´Â °ÍÀ» °¨À» ÀâÀ¸¼Å¾ß ÇÕ´Ï´Ù. ½±Áö´Â ¾ÊÀ» °Í °°ÁÒ? ±×·¸½À´Ï´Ù. ½±Áö ¾Ê½À´Ï´Ù. ÀÌ °ªÀ» ºÐ¼®Çؼ­ »Ì¾Æ³»¾ß(parsing) Çϴµ¥ Á÷Á¢ÇÏ°Ô µÈ´Ù¸é °ñ ¾ÆÇà °ÍÀÔ´Ï´Ù. ´ÙÇེ·´°Ôµµ ¹«·á·Î °ø°³µÈ MultipartRequest ¶ó´ø°¡ ¹®Á¦°¡ Á» ÀÖÁö¸¸ ±â´ÉÀÌ ÁÁÀº jspsmartupload ¿Í °³¹ßÀÚ°¡ Ã¥À» ±¸ÀÔÇØ¾ß »ç¿ë±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Â jason hunter ÀÇ O'reilly MultipartRequest µîÀÌ ÀÖ½À´Ï´Ù. ±¹³» °³¹ßÀÚµéÀÌ °ø°³ÇÏ´Â ÀÚ¹ÙÀÇ²Þ ´ÔÀÇ NewTakeUpload µîµµ ÀÖ±¸¿ä. Áߺ¹ÆÄÀÏó¸® ¸Þ¼Òµåµµ ÀÖ´Ù°í ÇÕ´Ï´Ù. À̰͵éÀÇ ¼Ò½º¸¦ ±¸Çؼ­ ºÐ¼®Çغ¸½Ã´Â °Íµµ ³ª»ÚÁö ¾Ê°ÚÁÒ.

multipart ¿¡ ´ëÇØ¼­´Â ´ÙÀ½¿¡ ´õ ÁýÁߺм®Çغ¸µµ·Ï Çϰí, ¿©±â¼­´Â request.getParameter() ±× ÀÌ»óÀÇ ¹º°¡°¡ ÀÖ´Ù´Â °ÍÀ» ¾Æ´Â °ÍÀ¸·Î ¸¸Á·Çϵµ·Ï ÇÏÁÒ. ±×·³ ÀÌ °ªÀ» ¹ÞÀ» ¼ö ÀÖ´Â ¹æ¹ýÀ» °£´ÜÈ÷ ¼Ò°³ÇÏ°í ¸¶Ä¡µµ·Ï ÇϰڽÀ´Ï´Ù. jason hunter ÀÇ MultipartRequest ¿¡¼­ ¾÷·Îµå °´Ã¼(multi)¸¦ »ý¼ºÇϸ鼭 ¾÷·Îµå¸¦ ÇÕ´Ï´Ù. ÀÌ MultipartRequest Ŭ·¡½º¿¡´Â request ¿¡¼­ »ç¿ëÇß´ø ¸Þ¼ÒµåµéÀ» ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÕ´Ï´Ù. µû¶ó¼­ request ´ë½Å °´Ã¼¸í(multi) À» »ç¿ëÇØ¼­ ¿øÇÏ´Â ÆÄ¶ó¸ÞÅͰªÀ» »Ì¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡ ¼Ò½º¸¦ º¸½ÃÁÒ. Á¦°¡ »ç¿ëÇÏ´Â ¼Ò½º ÁßÀÇ ÀϺÎÀÔ´Ï´Ù. filename Àº ´Ù¸¥ ¹æ½ÄÀ¸·Î »Ì¾Æ³»´Â °Íµµ À¯½ÉÈ÷ »ìÆìº¸¼¼¿ä.
board_write2.jsp ÆÄÀÏ Áß
...
  MultipartRequest multi =
        new MultipartRequest(request, savePath, sizeLimit);

  Enumeration files = multi.getFileNames();

  while(files.hasMoreElements()) {
    fname = (String)files.nextElement();
    f = multi.getFile(fname);
    maskname[cnt] = ""+System.currentTimeMillis()+cnt;
    filename[cnt] = multi.getFilesystemName(fname);
    filesize[cnt] = 0;
    if (f != null) {
  		filesize[cnt] = f.length();
  		up1 = new File(savePath+"/"+filename[cnt]);
   		up2 = new File(savePath+"/"+maskname[cnt]);
   		if (up1.exists()) {
         boolean rslt = up1.renameTo(up2);
   		}
   	} // end if f != null
    cnt++;
  }
...

  String name    = Kr.nchk(multi.getParameter("mpname")    );
...


      


À̹ø °­Á´ ¿©±â¼­ ¸¶Ä¡°Ú½À´Ï´Ù. Àúµµ API ¸¦ ´õ º¸¸é¼­ °øºÎ¸¦ Á» ´õ ÇÑ ´ÙÀ½¿¡ multipart ¿¡ ´ëÇØ¼­ ´õ ±íÀº ³»¿ëÀÇ °­Á¸¦ ÁغñÇØº¸°í ½Í½À´Ï´Ù.(^^; ¾ðÁ¦ °­Á°¡ ½áÁúÁö´Â Àúµµ... ÇìÇì). Jason Hunter ÀÇ ÀÚ¹Ù ¼­ºí¸´ ÇÁ·Î±×·¡¹Ö °³Á¤ÆÇ(ÇѺû¹Ìµð¾î, ÀÌâ½Å ¹ø¿ª) Ã¥¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ÀÖÀ¸´Ï Âü°íÇϽñ⠹ٶø´Ï´Ù.

°ü·Ã »çÀÌÆ®
¡áhttp://www.servlets.com/cos/
Jason Hunter ÀÇ MultipartRequest ¸¦ ±¸ÇÒ ¼ö ÀÖ´Â °÷
¡áhttp://iasandcb.hihome.com/cosi/
MultipartRequestÀÇ ±¹Á¦È­¹öÀüÀ» ±¸ÇÒ ¼ö ÀÖ´Â °÷
¡áhttp://aboutjsp.com/lec/multipart.htm
MultipartRequest»ç¿ë¹ý aboutjspÀÇ À̼±Àç´Ô °­ÀÇ
¡áhttp://cafe.daum.net/DOJ
Dream Of Java ´ÔÀÇ NewTakeUpload ¸¦ ±¸ÇÒ ¼ö ÀÖ´Â °÷
¡áhttp://okjsp.pe.kr/heogn/lecture/lec05/fileup01.htm
FileUpload ÄÄÆ÷³ÍÆ® ¼Ò½º¿Í ¿¹Á¦
¡áhttp://www.kimho.pe.kr/jsp/jsp_upload.html
Jason Pell ÀÇ MultipartRequest ¿¡ ´ëÇÑ ±èÈ£´ÔÀÇ °­ÁÂ
xml-typed document
http://okjsp.pe.kr