2022 01 28 - oneso123456789/2022 GitHub Wiki
other
ํ์ผ ์ ๋ก๋ ์ฒ๋ฆฌ
Controller์ ๋ง์ ์์
์ ์คํ๋ง MVC๋ฅผ ํตํด์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ์์ ์ด ํด๋นํ๋ ์ญํ์๋ง ์ง์คํด์
์ฝ๋๋ฅผ ์์ฑ ํ ์ ์์ง๋ง, ์กฐ๊ธ ์ ๊ฒฝ ์จ์ผ ํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ํ์ผ์ ์
๋ก๋ ํ๋ ๋ถ๋ถ์ ๋ํ ์ฒ๋ฆฌ์
ํ์ผ ์
๋ก๋๋ฅผ ํ๊ธฐ ์ํด์๋ ์ ๋ฌ๋๋ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ์ํด์ Servlet 3.0 ์ ๊น์ง๋
commons์ ํ์ผ์
๋ก๋๋ฅผ ์ด์ฉํ๊ฑฐ๋ cos.jar ๋ฑ์ ์ด์ฉํด์ ์ฒ๋ฆฌํด ์์
๊ทธ๋ฌ๋ Servlet 3.0 ์ดํ(Tomcat 7.0)์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์
๋ก๋๋๋ ํ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ์์ผ๋ฏ๋ก
๋ ์ด์ ์ถ๊ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ์ง ์์
ํ์ง๋ง ์์ฌ์ด ์ ์ Spring Legacy Project
๋ก ์์ฑ๋๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ Servlet 2.5๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์
3.0์ดํ์ ์ง์๋๋ ์ค์ ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค๋ ์ ์ ..
3.0 ์ด์์ ํ์ผ ์
๋ก๋ ๋ฐฉ์์ ๋ณ๋์ ํํธ๋ก ๋ค๋ฃจ๋๋ก ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ commons-flieupload๋ฅผ ์ด์ฉํ๊ฒ ์
pom.xml์ commons-fileupload ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
commons-fileupload ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํจ ๋ฒ์ ์ 1.3.3์ผ๋ก ๋ค์์ผ๋ก ํ์ผ์ด ์์๋ก ์ ๋ก๋๋ ํด๋๋ฅผ C๋๋ผ์ด๋ธ ์๋ upload/tmp๋ก ์์ฑํจ
servlet-context.xml์ค์
servlet-context.xml์ ์คํ๋ง MVC์ ํน์ ํ ๊ฐ์ฒด(๋น)๋ฅผ ์ค์ ํด์ ํ์ผ์ ์ฒ๋ฆฌํจ
๋ค๋ฅธ ๊ฐ์ฒด(Bean)๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ํ์ผ ์
๋ก๋์ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ id ์์ฑ๊ฐ์
'multipartResolver'๋ก ์ ํํ๊ฒ ์ง์ ํด์ผ ํ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํจ
maxUploadSize๋ ํ ๋ฒ์ Request๋ก ์ ๋ฌ๋ ์ ์๋ ์ต๋์ ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๊ณ ,
maxUploadSizePerFile์ ํ๋์ ํ์ผ ์ต๋ํฌ๊ธฐ,
maxInMemorySize๋ ๋ฉ๋ชจ๋ฆฌ์์์ ์ ์งํ๋ ์ต๋์ ํฌ๊ธฐ๋ฅผ ์๋ฏธํจ
๋ง์ผ ์ด ํฌ๊ธฐ ์ด์์ ๋ฐ์ดํฐ๋ uploadTempDir์ ์์ ํ์ผ์ ํํ๋ก ๋ณด๊ด๋จ
uploadTempDir์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํ๋ ค๋ฉด URIํํ๋ก ์ ๊ณตํด์ผ ํ๊ธฐ ๋๋ฌธ์
'file:/'๋ก ์์ํ๋๋ก ํด์ผํจ
defaultEncoding์ ์
๋ก๋ํ๋ ํ์ผ์ ์ด๋ฆ์ด ํ๊ธ์ผ ๊ฒฝ์ฐ ๊นจ์ง๋ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํจ
SampleController์ exUpload()๋ฉ์๋ ์ถ๊ฐ
get๋ฐฉ์์ผ๋ก /exUpload๋งคํ์ ํด์ค, ์คํ๋ ์ ๋ก๊ทธ๋ฅผ ์ฐ์ด์ค
exUpload.jsp ํ์ผ์์ฑ
ํ์ผ ์
๋ก๋๋ฅผ ํด ๋ณผ /WEB-INF/views/sample/๊ฒฝ๋ก์ exUpload.jspํ์ผ์ ๋ง๋ฌ
html 4.01๋ฒ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ metaํ๊ทธ์ http-equiv์์ฑ๊ณผ content์์ฑ์ ์ด์ฉํด์ UTF-8์ธ์ฝ๋ฉ ์์
์ํด์ค
bodyํ๊ทธ์์ form ํ๊ทธ์ ๋ง๋ค์ด์ค ๊ธฐ๋ณธ์ก์
์/sample/exuploadPOST๋ก ํ๊ณ ๋ฐฉ์์ post๋ฐฉ์์ด๋ฉฐ
enctype๋ก ํผ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ๋ณด๋ด์ง๋ ์ธ์ฝ๋ฉ๋ฐฉ์์ ์ ํํ๋๋ ํ์ผ์ ์ ์กํ ๊บผ๋
multipart/form-data์์ฑ๊ฐ์ ์ ํ(์ด ๋ฐฉ์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉ ํ์ง ์์ ๊ณ ๋ก ํ์ผ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํจ)
SampleController์ /exUploadPost() ๋ฉ์๋ ์์ฑ
exUpload.jsp์์ ๋ณด๋ธ form์ action ์์ฑ๊ฐ์ /sample/exUploadPost์
๋ฐ๋ผ์ ํด๋น ์์ฑ๊ฐ๊ณผ ๊ฐ์ Post๋งคํ์ ๋ง๋ค์ด์ค
exUploadPost() ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ ArrayList files ๋ก ๋ง๋ค์ด์ค
ArrayList๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ exUpload.jspํ์ผ์์ ํ์ผ ์ฒ๋ฆฌ๋ฅผ ์ํ inputํ๊ทธ์ ์ด๋ฆ์ ์ ๋ถ files๋ก ํ๊ธฐ ๋๋ฌธ์
์ด ํ์ผ์ ํ๋์ฉ ๊บผ๋ด๊ธฐ ์ํด์ forEach๋ฌธ์ ์ฌ์ฉํจ fileํ์
์ ํ๋์ฉ ๊บผ๋ด๋ฉด์ ๋ก๊ทธ๋ก ์ด๋ฆ๊ณผ ์ฌ์ด์ฆ๋ฅผ ์ฐ์ด์ค
์ฌ๊ธฐ์ ๊ถ๊ธํ๊ฒ ์๊น
forEach๋ฌธ์ ์์์ด ์ด๋ฐ ํํ์ธ๋ files.forEach(file ->{
์ฌ๊ธฐ์ ํ์ผ ๋ง๊ณ ์ด๋ฏธ์ง๋ก ๋ฐ๊พผ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ์ง
๊ทธ๋ฅ forEach๋ฌธ์์ ์ฌ์ฉํ ๋ณ์๋ช
์ ๋๋ค์์ผ๋ก ํํํ๊ฑฐ๋ผ์ ๋ฑํ ์๊ด์ ์๋๊ฑฐ ๊ฐ์
๊ทธ๋ฆฌ๊ณ ์๊น Servlet-context.xml์ ์ค์ ํด์ค uploadTempDir์ ํ์ธํ๊ธฐ ์ํด์ 2mb์ด์์ ์ด๋ฏธ์ง๋ฅผ
์ ํํ๋ฉด 500์๋ฌ๊ฐ ๋์ค๋ฉด์ ์ฌ์ด์ฆ๊ฐ ํฌ๋ค๋ ์ค๋ฅ๊ฐ ๋์ด ํด๊ฒฐํ๊ธฐ์ํ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ๋ค์ ๋ด์ฉ์์ ๋์ค๋๋ฏ
๊ทธ๋ฆฌ๊ณ ์ด์ ์ ์ฌ๋ฆฐ ํ์ผ๋ค๋ ์ ์ฅ์ด ์๋๋๊ฑฐ ๋ณด๋๊น ์์ํ์ผ ํํ๋ก ์ฌ๋ผ๊ฐ๊ณ ๊ทธ๋ค ์ญ์ ๋๋๊ฑฐ ๊ฐ์