์ค๋ผํด์์ ํ์ด์ง ์ฒ๋ฆฌ ๋ฑ์ ํ ๋ ๋ก์ฐ์ ์๋ฒ์ ๋งค๊ธด ๋ค ์ ๋ ฌ์ ํด์ค์ผ ํฉ๋๋ค. ์ด๋ ROW_NUMBER() ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์๋ฒ์ ๋งค๊ธธ์ ์์ต๋๋ค. # ์์ ์ฝ๋ ์์ ํ ์ด๋ธ์์ ๋จ์ SELECT ์ฟผ๋ฆฌ๋ฌธํ์ ๋ ์์ ๊ฐ์ ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ ์ด๋ธ์ ๋ก์ฐ๋ฅผ ๋ ์ง(REGIST_DT)๋ก ์ ๋ ฌํ๊ณ ์ถ์ต๋๋ค. ORDER BY๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ ํ ์ ์๊ฒ ์ง๋ง ์ด๋ ๊ฒ๋ง ํ๋ฉด ๋ถ๋ช ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค. ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. 1, 2, .. ํ์ด์ง ๋ฑ์ด ์กด์ฌํ ๊ฒ์ด๊ณ , ํ ํ์ด์ง์๋ 10๊ฐ์ ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋ก์ฐ๋ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ทฐ์ ๋ฟ๋ ค์ง๋ค๊ณ ํฉ์๋ค. ๋ง์ฝ ORDER BY๋ง ์ฌ์ฉํ๋ค๋ฉด 1ํ์ด์ง์๋ ๋ฌธ์ ์์ด ๋ก์ฐ๊ฐ์ ๋ฟ๋ฆด์ ์๊ฒ ์ง๋ง, ๋ฌธ์ ๋ 2ํ์ด์ง๋ถํฐ ์ ๋๋ค. 2ํ์ด์ง์์ 11๋ฒ์งธ๋ถ..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ํ๋ฆฐ ๋ถ๋ถ์ ๋ํด ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) # ๋น๋๊ธฐ์ ๋๊ธฐ ์ฒ๋ฆฌ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฌ์ด์ ์์ ์ฒ๋ฆฌ ๋จ์๋ ๋์์ ๋ง์ถ ํ์๊ฐ ์์ต๋๋ค. ๋๊ธฐ์ ์ฒ๋ฆฌ๋ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฌ์ด์ ์์ ์ฒ๋ฆฌ ๋จ์๋ฅผ ๋์์ ๋ง์ถ ํ์๊ฐ ์์ต๋๋ค. ์์ ๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ใ ฃ๋น๋๊ธฐ ์๋๊ณผ ์๋ฆฌ์ฌ๋ ์๋ก์ ํ์(๋ชฉ์ )๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ์ฒ๋ฆฌ ์๊ฐ์ ์ผ์นํ์ง ์์๋ ๋ฉ๋๋ค. ์๋์ด ์๋ฆฌ๋ฅผ ์ฃผ๋ฌธํ์๋(์์ฒญ) ๋ฐ๋ก ์๋น(๊ฒฐ๊ณผ)ํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ ๊น ์ง๊ณ ๋์ด๊ฐ ๊ฒ์ด ์๋๋ฐ ๋ง์ฝ ์๋์ด ์๋ฆฌ๊ฐ ๋์ฌ ๋๊น์ง ์๋ฌด๊ฒ๋ ์ํ๊ณ ๋จ์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ง ํ๋ค๋ฉด ๋ธ..
๋ชจ๋ ๊ณต๋ฐฑ ์ฒดํฌ ์ ๊ท์ var regExp = /\s/g; ์ซ์๋ง ์ฒดํฌ ์ ๊ท์ var regExp = /^[0-9]+$/; ์ด๋ฉ์ผ ์ฒดํฌ ์ ๊ท์ var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; ํธ๋ํฐ๋ฒํธ ์ ๊ท์ var regExp = /^\d{3}-\d{3,4}-\d{4}$/; ์ผ๋ฐ ์ ํ๋ฒํธ ์ ๊ท์ var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/; ์์ด๋๋ ๋น๋ฐ๋ฒํธ ์ ๊ท์ var regExp = /^[a-z0-9_]{4,20}$/; ํด๋ํฐ๋ฒํธ ์ฒดํฌ ์ ๊ท์ var regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4..
input์ value ๊ธฐ์ค์ผ๋ก ์์ฑํ์์ต๋๋ค. $('#testID').val(); // id ์ ํ์๊ฐ ๊ธฐ์ค์ผ ๋ #์ ๋ถ์ฌ์ค๋๋ค. $('.testClass').val(); // class ์ ํ์๊ฐ ๊ธฐ์ค์ผ ๋ .์ ๋ถ์ฌ์ค๋๋ค. $('[name=testName]').val(); // id, class ์ธ์ ์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. $('[test=testName]').val(); // ๋ง์ฝ test ๊ฒฐ๊ณผ๊ฐ์ ์ ๊ฐ์ ธ์จ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ ๊ท์์ ์ฌ์ฉํ์ฌ ํ๊ธ, ์์ด, ์ซ์ ์ฒดํฌ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. # ์์ var pattern1 = /[0-9]/; //์ซ์ var pattern2 = /[a-zA-Z]/; //์์ด var pattern3 = /[ใฑ-ใ |ใ -ใ ฃ|๊ฐ-ํฃ]/; //ํ๊ธ var pattern4 = /[~!@#\#$%^&*]/; //ํน์๋ฌธ์ var testStr = "ํ ์คํธtest"; //์ซ์ ์ฒดํฌํ๊ณ ์ถ์ ๋ if (pattern1.test(testStr)) { alert("์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค."); //false } //์์ด ์ฒดํฌํ๊ณ ์ถ์ ๋ if(pattern2.test(testStr)){ alert("์์ด๊ฐ ํฌํจ๋ฉ๋๋ค."); //true } //ํ๊ธ ์ฒดํฌํ๊ณ ์ถ์ ๋ if(pattern3.test(testStr)){ alert..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ ์๋ค๋ฉด ์ง์ ํด์ฃผ์ธ์ :) ์คํ๋ง์์ ๋งํ๋ ์ปจํ ์คํธ(context)๋ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋น๋ค์ด ๋ด๊ฒจ ์๋ ์ปจํ ์ด๋ ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์คํ๋ง์ ๊ณ์ ๊ณต๋ถ์ค์ด์ง๋ง ์์ฒญ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด WebApplicationContext์ ApplicationContext์ ๊ด๊ณ, web.xml์์์ servlet-context์ root-context์ ๊ด๊ณ ๊ทธ๋ฆฌ๊ณ ContextLoaderListenter์ dispatcher-servlet์ ๊ด๊ณ ์ด ์ด 3๊ฐ์ ๊ด๊ณ๊ฐ ๋ณผ๋๋ง๋ค ํท๊ฐ๋ ธ์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๊ด๊ณ๋ค์ ์๋์ ๊ฐ์ด ๊ทธ๋ฆผํํด๋ณด์์ต๋๋ค. # web.xml์์์ Context contextConfigLocation c..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ ์๋ค๋ฉด ์ง์ ํด์ฃผ์ธ์ :) ์คํ๋ง์์ ๋งํ๋ ์ปจํ ์คํธ(context)๋ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋น๋ค์ด ๋ด๊ฒจ ์๋ ์ปจํ ์ด๋ ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์คํ๋ง์ ๊ณ์ ๊ณต๋ถ์ค์ด์ง๋ง ์์ฒญ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด WebApplicationContext์ ApplicationContext์ ๊ด๊ณ, web.xml์์์ servlet-context์ root-context์ ๊ด๊ณ ๊ทธ๋ฆฌ๊ณ ContextLoaderListenter์ dispatcher-servlet์ ๊ด๊ณ ์ด ์ด 3๊ฐ์ ๊ด๊ณ๊ฐ ๋ณผ๋๋ง๋ค ํท๊ฐ๋ ธ์ต๋๋ค. # root-context ์ sevlet-context ํ๋ฆ ์ด ๊ธ์ WAC์ AC ๊ด๋ จ ๊ธ์ด ์๋๋ฏ๋ก root-context์ ..
# ์์ธ ํ๋ก์ ํธ ์ธ๋ถ์ ์กด์ฌํ๋ ํ์ผ ์ ๋ก๋์ ๊ฒฝ์ฐ ๋ณด์์์ ์ด์ ๋ก ์ด๋ฏธ์ง์ ์ ๊ทผํ์ง ๋ชปํฉ๋๋ค. ์ฆ ์น์์ ๋ก์ปฌํด๋๋ก ์ ๊ทผ์ด ๋ถ๊ฐํฉ๋๋ค. # ํด๊ฒฐ tomcat์ server.xml ์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค. docBase="D:/FileUpload/kssfbiz/" ์ด๋ ๊ฒ ์ค์ ํด์ฃผ์๋ฉด url๋ก ๋ค์ด๊ฐ ๋๋ localhost:8080/kssfbiz/upload ์ด๋ฐ์์ผ๋ก ๋ค์ด๊ฐ์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ฌผ๋ฆฌ์ ์ฃผ์ - D:/FileUpload/kssfbiz/ ๋ ผ๋ฆฌ์ ์ฃผ์(์ค์ ์ ์ํ ๋) - http://localhost:8080/kssfbiz/upload/ (๋ก์ปฌ์ผ์) ์ฃผ์ํ ์ ์ ๋ฐ๋์ reloadable์ true๋ก ํด์ฃผ์ ์ผ ํฉ๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์..
์ด๋ฒ ๊ธ์์๋ @RestController๋ผ๋ ์ด๋ ธํ ์ด์ ์ ๋ํด ์์ ๋ณด๊ฒ ์ต๋๋ค. @RestController๋ ์ปจํธ๋กค๋ฌ์์ ๋ธ๋ผ์ฐ์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ด๋ฅผ ์ฒ๋ฆฌํด์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ธฐ๋ณธํ ๋ฐ์ดํฐ, VO ๊ฐ์ฒด์ ์์ฑ ๊ฐ, Map์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๋ฑ์ ๋ณด๋ผ ์ ์๊ฒ ํด์ค๋๋ค. ์ฐ์ @RestController๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์คํ๋ง 4.0์ด์์ด์ฌ์ผ ํฉ๋๋ค. ๋ง์ฝ 3.x ๋ฒ์ ์ ์ด์ฉํ๋ค๋ฉด pom.xml์์ 1.6 4.1.1.RELEASE 1.6.10 1.6.6 4.*.* ๋ฒ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ JOSN ํ์์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํ JSON ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค. com.fasterxml.jackson.core jackson-databind 2.5.4 # VO ๊ฐ์ฒด ์ ๋ฌํ..
# ์์ธ java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@6b6f9564 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolveStandardArgument(AnnotationMethodHandlerAdapter.java:826) at org.springframework.web.bind.annot..
์ด๋ฒ ๊ธ์์๋ ajax๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ์๋ฒ์ ์ ๋ก๋ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ajax๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ตณ์ด ํ์ผ ์ ์ก์ ์ํ์ฌ form ํ๊ทธ๋ก ๊ฐ์ธ์ค ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ธ์ ์คํ๋ง ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค. # Front ์ ์ถํ๊ธฐ ajax์ ์์ฑ ๋๋จธ์ง๋ ์๊ฑฐ๋ผ ์๊ฐํ๊ณ processData๋ง ์ง๊ณ ๋์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค. processData๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ query string ์ด๋ผ๋ ํํ๋ก ์ ๋ฌ๋ฉ๋๋ค. http://example.com/over/there?title=Main_page&action=raw ? ๋ค์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ์ ๋ฌ๋ฉ๋๋ค. ์ฃผ์ํ ์ ์ ํ์ผ ์ ์ก์ด ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฐ๋์ false๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค. # Back @Controller("mainControl..
Sevlet Container, Servlet์ ๋ํด ์์๋ณด์๊ณ ์ด๋ฒ์ Servlet์ ๋ํ๊ฒฉ์ ๋งก๊ณ ์๋ Dispatcher-Servlet์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. # Dispatcher-Servlet์ ์ ์ ์คํ๋ง์์ ์ ์ํ ๊ฐ๋ ์ ์๋์ ๊ฐ์ต๋๋ค. Servlet Container์์ HTTPํ๋กํ ์ฝ์ ํตํด ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํ๋ ์ ํ ์ด์ ๊ณ์ธต์ ์ ์ผ์์ ๋ฌ์ ์ค์์ง์ค์์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด์ค๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์๋๋ฐ ์ด๋ฅผ Dipatcher Servlet์ด๋ผ๊ณ ํฉ๋๋ค. # Dispatcher-Servlet์ ํ..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์ดํดํ๊ธฐ ์์ ์ปจํ ์ด๋๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณผ ํ์๊ฐ ์์ต๋๋ค. ํํ ์คํ๋ง์ ์ฌ์ฉํ๋ฉด์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์คํ๋ง ์ปจํ ์ด๋ ์ด ๋ ๋จ์ด๋ฅผ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ๋๋ค. ๊ทธ๋ผ ์ปจํ ์ด๋๋ ๊ณผ์ฐ ๋ฌด์์ผ๊น์? # ์ปจํ ์ด๋๋? ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ทธ ์ปจํ ์ด๋์ ์ฉ๋๊ฐ ๋น์ทํฉ๋๋ค. ๋ฌด์ญ์ ํ ๋ ์ํ์ ๊ด๋ฆฌํ๊ธฐ ์ํ์ฌ ์ปจํ ์ด๋๋ง๋ค ๋ค๋ฅด๊ฒ ๋ด์ ๋ฐฐ๋ก ์ด์กํ๋ ๊ฒ์ฒ๋ผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ด์ ๋น์ทํฉ๋๋ค. ํธ์คํธ ์ด์์ฒด์ ์์ ๊ตฌ๋๋๋ฉฐ ๊ทธ ๋ฐํ์ด ๋๋ ํ๋์จ์ด์ ๊ฐ์์ผ๋ก ์ก์ธ์คํ๋ ๊ฒ์คํธ ์ด์์ฒด์ ๋ฅผ ๋ปํ๋ ๊ฐ์๋จธ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ข ์ ํญ..
์คํ๋ง์์ DB ์ ๋ณด๋ฅผ ๊ฐ์ ์ ๋ณด๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊นํ์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฆด ๋ DB์ ๋ณด๊ฐ ์๋ properties ํ์ผ๋ง gitignore๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฐ์๋๊ฒ ํ ์ ์์ต๋๋ค. properties ํ์ผ์ ๊ฒฝ๋ก์ ๋๋ค. /WEB-INF/config/jdbc.properties PropertyPlaceholderConfigurer ํด๋์ค์ ์์ฑ์ ์ด์ฉํ์ฌ properties์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ""์์ ์ฐ์ค ํ์ ์์ต๋๋ค. ์์ ๊ฐ์ด xml ํ์ผ์์ ๋ฐ์์ ์์ต๋๋ค.
์คํ๋ง์์ ๋น์ ์ด์ฉํ jsp ๊ฒฝ๋ก ์ค์ ๋ฐฉ๋ฒ์ ๋๋ค. bean์ ์ด์ฉํ์ฌ viewResolver ํด๋์ค์ ์์ฑ์ ์์ ๊ฐ์ด ์ค์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ModelAndView mav = new ModelAndView("home"); views๋ก ๊ธฐ์ค์ผ๋ก ์๋๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ง์ฝ views/list/home.jsp ๋ผ๋ฉด view์ ๊ฒฝ๋ก๋ /list/home์ ๋๋ค. ๋ค์ jsp๋ฅผ ๋ถ์ด์๋ฉด ์๋ฉ๋๋ค.
์๋ฐ๋ฅผ ํ๊ฒ๋๋ฉด ์ฝ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด System.out.println()์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ์คํ๋ง์์๋ ์ด๋ฅผ ์ฌ์ฉํ ํ์์์ด log4j๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๊ทธ ๊ด๋ จํ ๊ธฐ๋ฅ๋ค์ ๊ด๋ฆฌํด์ค๋๋ค. ์ด ๊ธ์ STS(Spring toos Suite)๋ก ์์ฑํ ์คํ๋ง ํ๋ก์ ํธ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค. STS๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ํ๋จ์ ๊ด๋ จ ๊ธ์ ํฌ์คํธํฉ๋๋ค. ์ด ๊ธ์ ์๋ฐ์น์ ๋ค๋ฃจ๋ ๊ธฐ์ ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค. log4j๋? ์คํ๋ง์ผ๋ก ๊ฐ๋ฐํ ๋ ๋ณด๋ฉด ์ฝ์์ ์์ ๊ฐ์ ์์ฒญ ๋ง์ ๋ก๊ทธ๋ค์ด ์ถ๋ ฅ๋๋๋ฐ ์ด ๋ชจ๋ ๊ฒ log4j ๋๋ถ์ ๋๋ค. ๊ฐ๋ฐํ ๋น์์ ์ฌ์ฉํ๋ ๋ก๊ทธ ๋ฉ์์ง๋ค์ ์ค์ ๋ก ์๋น์คํ ๋ ์ ํ ํ์์๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ์ผ์ผ์ด ์ฐพ์์ ํด๋น ๋ก๊ทธ๋ค์ ์ญ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ ์ด๋..
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ํ์ ์ฐฝ์ ์ฌ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ์ ๋๋ค. l window.open() ํจ์ window.open() ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ํ์ ์ฐฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. window.open("ํ์ ์ฐฝ์ผ๋ก ์ฌ์ฉํ ํ์ผ(๊ฒฝ๋กํฌํจ) ๋๋ uri","์ง์ ํ ํ์ ์ ์ด๋ฆ","ํฌ๊ธฐ์ ์์น"); l ์์ window.open("test.html","ํ์ ํ ์คํธ","width=400, height=300, top=10, left=10"); popup.html๋ฅผ ์์ ๊ฐ์ด ํด์ฃผ์์ต๋๋ค. ํ์ ์ฐฝ ํธ์ถํ ํ์ ์ฐฝ์ html์ ๋๋ค. ์ธ๋ฒ์งธ ์ธ์๋ฅผ ์กฐ์ ํ์ฌ ํ์ ์ ํฌ๊ธฐ ๋ํ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"
l ์์ธ jsp์ List ๊ด๋ จ ํด๋์ค๊ฐ ์์ด์ ์๋ฌ๊ฐ ๋ฉ๋๋ค. l ํด๊ฒฐ ๋ฐ๋ผ์ jsp์์ ์๋์ ๊ฐ์ด import ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค.
l ์์ธ http://localhost:8080/adm/main_visual?mode=insert&orderKey=regist_dt&startPage=-1&orderVal=desc&searchKey[]=use_yn ํฐ์บฃ์์ ๋๋ ์ค๋ฅ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฟผ๋ฆฌ์คํธ๋ง์ [] ๊ฐ์ ํน์๋ฌธ์๊ฐ ์์ด์ ๋๋ ์๋ฌ์ ๋๋ค. l ํด๊ฒฐ server.xml์์ relaxedQueryChars="[,]" ์ ์ถ๊ฐํด์ฃผ๋ฉด ํด๊ฒฐ ์๋ฃ!
๋ฉ์ด๋ธ์ ์คํ ์์ค ๋น๋ ํด์ ๋๋ค. ๋ฉ์ด๋ธ์ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ Dependency ์์๊น์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ฉ์ด๋ธ์ ํ๋ก์ ํธ ์ ๋ฐ์ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ์ค์ ํ์ผ ๊ทธ๋ฆฌ๊ณ ์ด์ ๊ด๋ จ๋ ํ์ค ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฒ์๋ถํฐ ์ผ๊ด๋ ํํ๋ก ๊ตฌ์ฑํ์ฌ ๊ด๋ฆฌํฉ๋๋ค. l ๋ฉ์ด๋ธ(Maven) ์ค์นํ๊ธฐ maven.apache.org/download.cgi ๋ก ์ ์ํ์ฌ ํ์ผ์ ๋ค์ด๋ก๋ ํฉ๋๋ค. ์์ถ์ ํ๊ณ bin ํ์ผ ์์ ์๋ ํด๋๋ฅผ C:\spring ํด๋์ ๋ฃ์ต๋๋ค. l ๋ฉ์ด๋ธ ํ๊ฒฝ ๋ณ์ ์ค์ ํ๊ธฐ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์์คํ ์์ฑ์์ ํ๊ฒฝ๋ณ์๋ฅผ ๋๋ฌ์ค๋๋ค. ์๋ก๋ง๋ค๊ธฐ ๋ฒํผ์ ๋๋ฌ ๋ณ์์ด๋ฆ์ MAVEN_HOME์ผ๋ก ํ๊ณ ์๊น ๋ณต์ฌํ๋ ๊ฒฝ๋ก๋ฅผ ๋ถ์ฌ์ค๋๋ค. Path๋ฅผ ์ ํํ์ฌ ํธ์ง..
@Autowired๋ฅผ ์ด์ฉํ๋ฉด xml์์ ๋น์ ์ง์ ์ค์ ํ ํ์์์ด, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์์ ์ํ๋ ํด๋์ค๋ฅผ ์ฃผ์ ์์ผ์ค๋๋ค. ๊ทธ๋ผ ๋ฐ๋ก ์์๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. l ์์ package com.spring.ex02; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import o..
@RequestParam ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ป๋ ๋ฐฉ๋ฒ์ ๋๋ค. l ์์ ๋ค์๊ณผ ๊ฐ์ view์์ ์์ด๋๋ฅผ kbj, ์ด๋ฆ์ ๊น๋ณ์ค์ผ๋ก ์ ๋ ฅํ๊ณ ์ ์กํฉ๋๋ค. package com.spring.ex02; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.spri..
์คํ๋ง์ ๊ธฐ๋ฅ๋ค์ค ํ๋์ธ DI์ AOP๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋ก XML ํ์ผ์์ ์ค์ ์ ํด์ผํ์ต๋๋ค. ํ์ง๋ง XMLํ์ผ์ ์ด๋ฌํ ์ค์ ๋ค์ ํ๊ธฐ์ ๋๋ฌด๋ ๋ณต์กํ๊ณ ์ด๋ ค์ ์ต๋๋ค. ๋ฐ๋ผ์ ์คํ๋ง์์๋ DI ๊ฐ์ ์๋ฐ ์ฝ๋์ ๊ด๋ จ๋ ์ค์ ์ ์ฝ๋์์ ์ง์ ํ ์ ์๋๋ก ํ์ต๋๋ค. ๊ทธ ๊ธฐ๋ฅ์ ์ ๋ํ ์ด์ (Annotation)์ด๋ผ๊ณ ํฉ๋๋ค. ํ์ฌ ์คํ๋ง์์๋ XMLํ์ผ ์ง์ ์ค์ ๊ณผ ์ ๋ํ ์ด์ 2๊ฐ๋ฅผ ํผํฉํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. l ์คํ๋ง ์ ๋ํ ์ด์ ์ ๊ณต ํด๋์ค ์ ๋ํ ์ด์ ์ ์ด์ฉํ๋ ค๋ฉด XML ํ์ผ์์ ๋ค์ 2๊ฐ์ ํด๋์ค๋ฅผ ๋น์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ํด๋์ค ๊ธฐ๋ฅ DefaultAnnotationHandlerMapping ํด๋์ค ๋ ๋ฒจ์์ @RequestMapping์ ์ฒ๋ฆฌํฉ๋๋ค. AnnotationMethodHandlerMappin..
๋ง์ด๋ฐํฐ์ค์์๋ ๋ฌธ๊ณผ ๋ฌธ์ ์ด์ฉํ์ฌ sql๋ฌธ์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. l ๊ณผ AND NAME LIKE '%์ง%' SELECT * FROM TEST_TABLE WHERE 1=1 ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๋ง๋ sql๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ sql๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํฉ๋๋ค. SELECT * FROM TEST_TABLE WHERE 1=1 AND NAME LIKE '%์ง%'; '์ง'๊ฐ ๋ค์ด๊ฐ๋ NAME์ ์ฐพ๋ ๊ตฌ๋ฌธ์ด๋ฏ๋ก ์ ์ถ๋ ฅ๊ฒฐ๊ณผ์ NAME์ด 'ํ์ง์'์ธ๊ฑธ ์ ์ ์์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"
foreach ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด SQL๋ฌธ์์ ํ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ๊ทธ์ ์ฌ๋ฌ๊ฐ์ง ์์ฑ ์์ฑ ์ค๋ช collection array์ list ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. list ์์๋ list๋ก ํ์ํ๊ณ array ์์๋ array๋ก ํ์ํฉ๋๋ค. index foreach๋ฌธ์ด ๋ฐ๋ณต๋ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ์ํค๋ฉด์ ์ ๊ทผํ๋ ๊ฐ์ ์์น๋ฅผ ๋ํ๋ ๋๋ค. item collection์ ์์ฑ์ ์ง์ ๋ ๊ฐ์ ์ ๊ทผํฉ๋๋ค. ์ฆ, ์์ฑ ์ด๋ฆ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. open ํด๋น ๊ตฌ๋ฌธ์ด ์์๋ ๋์ ์ง์ ํ ๊ธฐํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. close ํด๋น ๊ตฌ๋ฌธ์ด ๋๋ ๋์ ์ง์ ํ ๊ธฐํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. separator ๋ฐ๋ณต๋๋ ์ฟผ๋ฆฌ๋ฌธ ์ฌ์ด์ ์ง์ ํ ๊ธฐํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. l ์์ SELECT * FROM TEST_TABLE ..
ํ๊ทธ๋ switch๋ฌธ๊ณผ ๋น์ทํ ์ญํ ์ ํฉ๋๋ค. l ํ๊ทธ SELECT * FROM TEST_TABLE WHERE 1=1 AND NAME=#{name} AND ID=#{id} AND NAME='ํ์ง์' AND ID='ํ์ง์' switch์ case ๋ฌธ์ฒ๋ผ choose๋ฌธ์์๋ when ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์์๋ ํญ์ test๋ฅผ ๋ถ์ฌ์ค์ผ ํฉ๋๋ค. ์ ์ฝ๋์์๋ ๋ง์ฝ name, id๊ฐ ์์ผ๋ฉด ์ฒซ๋ฒ์งธ when์ด, name๋ง ์์ผ๋ฉด ๋๋ฒ์งธ when์ด, id๋ง ์์ผ๋ฉด ์ธ๋ฒ์งธ when ์คํ๋๋ ์ฝ๋์ ๋๋ค. public MemberVO selectIF() { sqlMapper = getInstance(); SqlSession session = sqlMapper.openSession(); MemberVO mem..
๋ง์ด๋ฐํฐ์ค์์๋ ๋์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ํด์ฃผ๋ ์ฌ๋ฌ ๊ฐ์ง์ ํ๊ทธ๋ค์ด ์๋๋ฐ, ์ด๋ฒ ๊ธ์์ ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. l if๋ฌธ์ ๋ค๋ฅธ ์ฝ๋์์์์ if๋ฌธ๊ณผ ์ฌ์ฉ ์ฉ๋๊ฐ ๋น์ทํฉ๋๋ค. ๋ ์ฌ์ฉ๋ฐฉ๋ฒ๋ ์์ฃผ ์ ์ฌํฉ๋๋ค. ์ฃผ์ํ ์ ์ ๋ฐ๋์ ์กฐ๊ฑด๋ฌธ์์ test=""๋ฅผ ์ ์ด์ฃผ์ ์ผ ํฉ๋๋ค. SELECT * FROM TEST_TABLE WHERE 1=1 AND name=#{name} ๋ง์ฝ name์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ํ์ ํ๊ทธ๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค. ์๋ค๋ฉด if ํ๊ทธ์ ํ์ ํ๊ทธ๋ ๋ฌด์๋ฉ๋๋ค. public MemberVO selectIF() { sqlMapper = getInstance(); SqlSession session = sqlMapper.openSession(); MemberVO memberVo = new MemberV..
l List ๋ฐ๋ณต๋ฌธ ํฅ์๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์๋ฐ์ ์ปฌ๋ ์ ์ธ List๋ฅผ ๋ฐ๋ณต๋ฌธ ํ์ฐ๋ ๋ฐฉ๋ฒ์ ๋๋ค. public void put(String string, List resultList) { for(MemberVO vo : resultList) { System.out.println(vo); } } for(MemberVO vo : resultList) { System.out.println(vo); } ์ฌ๊ธฐ์ List์ ๊ธธ์ด๋ 2์ ๋๋ค. l ์ถ๋ ฅ ๊ฒฐ๊ณผ ํญ์น๋ ๋ฐ๋ณต๋ฌธ์ List ๋ง๊ณ ๋ ArrayList, HashMap, Map ๋ฑ ์๋ฐ์ ๋ค์ํ ์ปฌ๋ ์ ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"
์ค๋ผํด ํ ์ด๋ธ์ ์กด์ฌํ๋ ๋ ์ฝ๋๋ค์ค ์ต๋ seq๋ฅผ ๊ฐ์ง๋ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. l ์์ ์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๋ค์ด ์์ต๋๋ค. ๊ฐ์ฅ ํฐ seq์ธ 106์ row๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค. (๋งจ ์ ์ปฌ๋ผ์ด seq์ ๋๋ค.) SELECT ROWNUM, TEMP.* FROM ( SELECT * FROM TABLE_01 WHERE 1=1 ORDER BY SEQ DESC ) TEMP WHERE 1=1 AND ROWNUM = 1 ORDER BY๋ก ์์๋ฅผ ์ ํ ๋ค ROWNUM์ ์ด์ฉํด ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. l ๊ฒฐ๊ณผ ์คํ ๊ฒฐ๊ณผ ์ ๊ฐ์ ธ์จ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"
๋ง์ด๋ฐํฐ์ค์์ ์ ๊ณตํ๋ SqlSession ํด๋์ค์์๋ CRUD๋ฅผ ์ํ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ์ ์ธ select ๊ด๋ จ ๋ฉ์๋๋ ์๋ ํ ์ด๋ธ๊ณผ ๊ฐ์ต๋๋ค. ๋ฉ์๋ ๊ธฐ๋ฅ List selectList(query_id) id์ ๋ํ select๋ฌธ์ ์คํํ ํ ๋ ์ฝ๋๋ฅผ List๋ก ๋ฐํํฉ๋๋ค. List selectList(query_id, '์กฐ๊ฑด') id์ ๋ํ select๋ฌธ์ ์คํํ๋ฉด์ ์กฐ๊ฑด(์ฟผ๋ฆฌ๋ฌธ์์ ์ฌ์ฉํ ์ธ์)๋ฅผ ์ ๋ฌํฉ๋๋ค. T selectOne(query_id) id์ ๋ํ select๋ฌธ์ ์คํํ ํ ํ๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ง์ ํ ํ์ ์ผ๋ก ๋ฐํํฉ๋๋ค. T selectOne(query_id, '์กฐ๊ฑด') id์ ๋ํ select๋ฌธ์ ์คํํ๋ฉด์ ์กฐ๊ฑด(์ฟผ๋ฆฌ๋ฌธ์์ ์ฌ์ฉํ ์ธ์)๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ญ์ ์ดํดํ๋๋ฐ ์์๋ฅผ..