Servlet/JSP
Servlet 2
3 HTTP 프로토콜 TCP/IP 기반 Stateless 특징 요청과응답이끝나면연결을종료 HTTP Client 웹브라우저 HTTP Server 웹서버 Apache 서버, IIS 등등 HTML HTTP 프로토콜상에서교환하는문서를작성하기위한언어 Markup 언어
4 HTTP 요청및요청방식 GET 방식 요청의기본방식 데이터요청이목적 URL을통해요청파라미터전달 POST 방식 쿼리스트링 : URL?name=value 서버에데이터전송이목적 Body를통해요청파라미터전달
HTTP 응답 5
6 Web Application Web 기반에서실행되는 Application Web Site( 정적서비스 ) + CGI( 동적서비스 ) Web Site CGI 정적서비스제공 HTML, Image.. Common Gateway Interface 동적인서비스제공 HTTP 프로토콜하에서실행되는서버단프로그램구현 interface 대표적기술 Servlet JSP ASP PHP
7 서블릿의특징 Java 기반 CGI 기술 Java의다양한 API를이용할수있다. 프로세스기반이아닌쓰레드기반으로실행됨
8 CGI 와 Servlet CGI 실행 Servlet 실행
9 Web Container 와배치 Web Container Servlet 와 JSP 를실행시키는환경 Web Browser Client Web 서버 정적인서비스처리 Web Container Servlet/JSP 실행환경 - 동적인서비스제공 Server
10 Web Container 와배치 Web Container Servlet 와 JSP 를실행시키는환경 배치경로 Web Application Root 정적파일 HTML 파일, JSP 파일, 이미지파일등 WEB-INF web.xml.class 파일들 (Servlet, API) classes lib.jar 파일들 압축된 API
11 web.xml 배치 ( 배포 ) 설명자 (Deployment Descriptor) Web Application은반드시하나의 DD파일을가져야함 Web Application에대한설정을하는 xml기반파일 서블릿등록 초기파라미터등록 보안설정 위치 WEB-INF 경로아래위치 Web Application 시작시메모리에로딩된다. 수정시 Web Application 을재구동해야한다.
12 Servlet class 작성패턴 public class로작성 javax.servlet.http.httpservlet 상속 No-Argument 생성자필요 service 메소드구현 public void doget(request, response) 또는 public void dopost(request, response) 메소드 overriding web.xml 에등록 서블릿객체등록 <servlet> 태그이용 Client 가호출하는방법등록 <servlet-mapping> 태그이용
13 서블릿상속구조 <<interface>> javax.servlet. Servlet javax.servlet. GenericServlet Protocol 독립적 Servlet 에필요한내용구현하여제공 javax.servlet.http. HttpServlet HTTP Protocol Servlet 에필요한내용구현하여제공 MyServlet
14 Servlet 의라이프사이클 Lifecycle(Callback) 메소드 init() service() destroy() 존재하지않는상태 1. 객체생성 2.init() destroy() 서비스상태 service()
15 요청과응답관련 API HttpServletRequest ServletRequest의하위 클라이언트의요청정보를가지고있는객체 주요업무 요청파라미터조회 Session 객체조회 request scope 상의 component간데이터공유저장소역할 HttpServletResponse ServletResponse의하위 요청한클라이언트에게응답하기위한정보를가지고있는객체 주요업무 응답 Content type설정 응답 Stream 조회 응답헤더설정 리다이렉트방식으로수행넘기기
16 요청파라미터처리 요청파라미터 클라이언트가 CGI( 서블릿 ) 으로전송하는데이터 HTML 의 FORM 태그를이용해전송 FORM 태그 입력태그들을묶어주는역할 속성 입력태그 action 전송할 CGI 의 url 지정 method 요청방식지정 select 선택태그 속성 name : 전송할값에붙을 name 값. cgi 는이이름으로값을읽는다. multiple : 다중선택 (List 화 ) 하위태그 option : 선택할 item 들등록
17 요청파라미터처리 textarea : 여러줄입력폼 속성 cols : 열수 rows : 행수 name input : 다양한입력폼을설정 공통속성 name value type : 입력폼의종류지정 input 태그의종류 type 속성을통해종류지정 text, password file checkbox, radio hidden submit, image, reset, button
18 서블릿에서요청파라미터처리 HttpServletRequest 를통해처리 메소드 getparameter( name ) : String getparametervalues( name ) : String [] <input type= text name= id /> String value = request.getparameter( id ); <input type= checkbox name= hobby value= 독서 /> <input type= checkbox name= hobby value= 음악감상 /> String [] values = request.getparametervalues( hobby );
19 ServletConfig, ServletContext ServletConfig Servlet객체가일하는데필요한정보를가지고있는객체 Web Container가생성하여 Servlet객체 init() 호출시주입 Servlet객체당하나씩생성된다. ServletContext Web Application 이일하는데필요한정보를가지고있는객체 Web Application이처음실행되는시점에 Web Container가생성 Servlet의 getservletcontext() 를통해참조 Web Application당하나생성된다.
20 초기파라미터 개요 변경가능성있는문자열을 web.xml에설정해놓고 Servlet/JSP에서호출해서사용 문자열변경시소스코드변경없이수정가능 메소드 getinitparameter(string name) : String ServletConfig 를이용한방법 Servlet 객체가사용할초기파라미터설정 <servlet> 태그의 sub태그 <init-param> 을이용해설정 ServletContext 를이용한방법 Application 내모든 Servlet이사용할수있는초기파라미터설정 <context-param> 태그이용
21 Attribute Attribute 란 Servlet 간공유하는객체 Scope Attribute를저장하는공간으로공유범위에따라다음세가지로나뉨 request scope : HttpServletRequest 이용 Request 가살아있는동안공유 session scope : HttpSession 이용 한명의 client(web browser) 가살아있는동안공유 application scope : ServletContext Application 이시작해서종료할때까지공유 관리메소드 Attribute 는 key-value 쌍으로관리됨 setattribute(string key, Object value) getattribute(string key) : Object removeattribute(string key) getattributenames() : Enumeration
22 클라이언트요청이동시키기 요청디스패치 (Dispatch) 방식 리퀘스트가살아있는상태에서수행을넘긴다. Request Scope 를이용해데이터 (Attribute) 를공유할수있다. RequestDispatcher 객체이용 RequestDispatcher rdp = request.getrequestdispatcher(string url) rdp.forward(request, response) 리다이렉트 (Redirect) 방식 클라이언트에게요청을넘길 url 을알려주어다시요청하게하는방식 요청과응답이한번더일어난다. Request Scope 를이용해데이터 (Attribute) 를공유할수없다. Response.sendRedirect( url )
Session 관리란? Session 하나의클라이언트가프로그램을시작해서종료될때까지를하나의 Session 이라함. 하나의세션동안여러번의요청과응답이반복될수있다. Session 관리 하나의 Session동안사용자와관련된 Data를계속유지하도록관리하는것 Http Protocol의 Stateless한특징의해결책 Session 관리방법 Session Cookie URLRewriting
Cookie 를이용한 Session 관리 쿠키 서버가브라우저 (client) 로전송하는작은기록정보파일. 클라이언트의정보를클라이언트컴퓨터에저장한다. 클라이언트는서버에요청시자신이가진데이터를 Http 요청정보에담아서보내며 keyvalue 형태로관리된다.. 저장데이터 ( 쿠키정보 ) 는문자열만가능. 사이트별로관리된다. 장점 서버의부하를줄인다. 단점 관리할수있는데이터의종류, 크기제약, 보안상취약 쿠키생성 javax.servlet.http.cookie 를사용 Cookie c = new Cookie( popup, no ); response.addcookie(c); // 응답시쿠키가전송된다. 클라이언트가보내온쿠키정보조회 Cookie [] cc = request.getcookies(); // 보내온쿠키가없으면 null 리턴 주요메소드 String getname( String getvalue() setmaxage(int sec)
Session 을이용한 Session 관리 클라이언트의정보를 Server 측에저장. Javax.servlet.http.HttpSession 객체를이용하여관리. 장점 저장데이터타입이나크기에제한없다. 보안상유리 단점 서버에부담 생성방법 HttpSession session = request.getsession(); 기존세션이있으면기존세션객체를, 없으면새로생성해서 return HttpSession session = request.getsession(false); 기존세션이있으면기존세션객체를, 없으면 null 리턴 HttpSession 의주요메소드 setattribute(string name, Object value) Object getattribute(string name) removeattribute(string name) setmaxinactiveinterval(int sec) invalidate()
26 JSP Java Server Page
27 JSP LifeCyle 1) JSP 파일을 Servlet 파일로변환 (.jsp->.java) 2) 변환된 Servlet 을컴파일 (.java->.class) 3) Servlet 클래스로딩 4) Servlet 클래스객체생성 5) jspinit() 호출 : Servlet 의 init() 역할. Servlet 이처음호출되었을때한번일한다. 6) _jspservice() 호출 : Servlet 의 service() 역할. 클라이언트의요청에응답한다. 7) jspdestory() 호출 : Servlet 의 destroy() 역할. 객체가사라지기직전에호출된다.
28 JSP Tag 스크립트태그 (Script tag) 액션태그 (Action tag) 표준액션태그 Custom Tag
29 스크립트태그 지시자태그 (Directive Tag) 표현식태그 (Expression Tag) 선언태그 (Declaration Tag) 스크립트릿태그 (Scriptlet Tag) 주석
30 지시자태그 컨테이너가 JSP 를 Servlet 으로변환할때특정지시를내리기위해사용되는태그 종류 page : 페이지의기능, 특징을지시 include : JSP 페이지에다른페이지를포함시키는것을지시 taglib : custom tag 사용과관련된지시 구문 <%@ 지시어속성 = 값 속성 = 값 %>
Page 지시자태그 페이지관련환경을정의하는태그 주요속성 1. import jsp 에서사용할패키지들을 import 시사용. 속성들중유일하게한페이지에서여러번올수있다. <%@ page import= java.util.*, java.io.* %> 2. contenttype jsp 가생성하는응답의 MIME TYPE 을지정 Servlet 으로변환시 response.setcontenttype() 으로변환됨 <%@ page contenttype= text/html;charset=euc-kr %> 3. session session 내장객체의생성여부를결정 true 또는 false 를값으로가진다. true 가 default 값 <%@ page session= false %> 4. errorpage JSP 페이지가실행할때오류 (Exception) 가발생하면수행을옮길 page 를기술한다. 요청디스패치방식으로이동한다. <%@ page errorpage= /error.jsp %> : 만약페이지가실행중에러가발생하면수행을 error.jsp 로옮겨 error.jsp 가응답하게된다. 5. pageencoding response stream 의문자셋 (character set) 을지정한다. <%@ page pageencoding= euc-kr %> 6. 그이외의속성 : language, info, buffer, iserrorpage, autoflush, isthreadsafe 31
32 표현식태그 Response Stream 을통해출력하기위한태그 구문 : <%= 출력내용 %> 예 <%= 출력합니다. %> <% int i = 10%> <%=i%> Servlet 으로변환시 out.write( 출력내용 ); ( 예 ) out.print( 출력합니다 )) 로변환됨
33 선언태그 JSP 가 Servlet 으로변환시 Servlet 클래스의 member variable, member method 를선언할때사용 구문 : <%! 선언 %> 예 : <%! public static int RED = 1; public int name; public void go(){ } %>
34 스크립트릿 클라이언트요청에대한동적서비스하는코드 _jspservice() 의구현부로삽입되는 Java 코드를작성 구문 : <% Java Code%> 예 : <% if(i>10){%> <%}%> 10 보다큽니다.
35 주석 HTML 주석 : <!-- 내용 --> JSP 주석 : <%-- 내용 --%> Client 에게전송되지않는다. Java 주석 : 자바주석은스크립트릿과선언태그내에서만사용가능 // 내용, /* 내용 */
36 내장객체 (Inplicit Variable) JSP 내에서기본적으로제공하는객체 생성이나참조코드없이바로사용할수있다. JSP 가 Servlet 으로변환될때 container 가작성 request : HttpServletRequest response : HttpServletResponse out : JspWriter - Servlet 에서 PrintWriter 와같은역할 session - HttpSession application - ServletContext config - ServletConfig pagecontext - Servlet 에는없는것으로다른내장객체들을생성할수있다. page this. JSP 가서블릿으로변환되었을때그 Servlet 객체자신 exception Throwable. JSP 가 errorpage 일경우사용가능
37 JSP 에서 Session JSP 는 default로 HttpSession객체가생성됨 - 내장객체 Login을해야지만볼수있는페이지인경우 2가지 내장객체 session이생성되지않도록 page 지시자태그에서설정후 HttpSession session = request.getsession(false) 코드삽입 Login 처리페이지에서 session scope에로그인여부를체크할데이터를 binding 한뒤 jsp page에서그데이터를읽어들여로그인여부를체크
38 액션태그 (Action tag) JSP 내에서자바코드를줄이기위한방법으로제안된태그들 액션태그는 JSP 내에 Java 코드없이특정업무를처리하기위한태그 종류 표준액션태그 JSP Spec 에서제공하는표준액션태그 Custom Tag 사용자정의액션태그 구문 <prefix: 태그명속성 = value [..]/> 태그는대소문자를구분한다. 속성의값은 또는 로감싸준다. 태그는반드시닫아야한다. <c:foreach items= list var= mvo ></c:foreach> <jsp:getproperty name= cvo property= name />
39 표준액션태그 JSP 스펙에서제공하는액션태그 구문 <jsp: 태그명속성 = value /> 주요태그 빈객체와연동하기위한태그 usebean, setproperty, getproperty 수행을이동하기위한태그 include, forward, param
40 usebean <jsp:usebean> tag 속성영역 (scope : page, request, session, application) 에 binding( 등록 ) 된속성객체를얻어온다. 만약가져오지못하면새로생성하고그영역에넣어준다. 구문 <jsp:usebean id= value class= value scope= value /> 속성 id : 자바식별자 (variable) class : 사용할자바클래스이름 scope : 객체가살아있게될영역값 - page, request, session, application
41 usebean 사용예 <jsp:usebean id= cust class= exam.customer scope= request /> <% cust.setname( 홍길동 );%> 의미 -> Customer cust = (Customer)request.getAttribute( cust ); if(cust==null){ cust = new Customer(); request.setattribute( cust, cust); } cust.setname( 홍길동 );
42 setproperty <jsp:setproperty> 객체에값을 setting 하는태그 특정값을명시적으로할당할하거나요청파라미터로넘어온값을설정한다. <jsp:setproperty name= cust" property="name" [value= value ] [param= value ]/> 속성 name : 프라퍼티에값을넣을객체의이름. <jsp:usebean> tag 에서의 id 값사용 property : 값을할당할객체의 property 이름 (setter method 의 set 을뺀이름 ), value : property 에할당될값, ->parameter 값보다우선된다. param : request 객체로부터전달되는파라미터값을직접넘겨주려고할때 form tag 의 name 값을넣어준다. param 의값과 property 의값이동일할경우생략할수있다.
43 setproperty <jsp:setproperty name= pvo property= id value= abc /> 의미 -> pvo.setid( abc ); ------------------------------------ <jsp:setproperty name= mvo property= id param= pid /> -> 의미 mvo.setid(request.getparameter( pid )); ------------------------------------- <jsp:setproperty name= cust property= name /> 의미 -> cust.setname(request.getparameter( name )); ------------------------------------ <jsp:setproperty name= mvo property= * /> -> 의미 : 요청파라미터의값을 mvo 객체의프라퍼티에할당한다. 이때서로의이름이같은것끼리매칭시켜한번에처리한다.
44 getproperty <jsp:getproperty> 객체의 Property 값을조회하여출력하는태그 구문 : <jsp:getproperty name= id property= propertyname /> 속성 name : 프라퍼티를읽어올빈객체의이름. <jsp:usebean> tag 에서의 id 값 사용 property: bean 의프라퍼티이름 (getter method 의 get 을뺀이름 )
45 getproperty 사용예 <jsp:getproperty name= cust property= age /> 의미 -> out.write(cust.getage());
46 include JSP page 내에다른 JSP ( 또는 HTML) page 를포함시키는기술 include 지시자태그를사용하는방법 Copy & Paste 방식 구문 : <%@include file= 파일명 %> Action tag 를사용하는방법 요청 Dispatch 방식 구문 : <jsp:include page= url /> <jsp:include page= url > <jsp:param name= id value= abc /> </jsp:include>
47 forward JSP 의수행을다른컴포넌트 (JSP, Servlet,HTML 등 ) 로요청 Dispatch 방식으로이동시킨다. <jsp:forward> 구문 : <jsp:forward page= url /> < jsp:forward page= url > <jsp:param name= id value= abc /> </ jsp:forward >
EL(Expression Language) 48
49 EL 이란 JSP 2.0 에서새롭게추가된스크립트언어. 기존의 Script tag 의표현식 (Expression) tag 에서업그레이드 version. 주요특징 4 개속성영역에저장된속성객체의 Property 출력 리터럴데이터, 다양한연산결과출력 JSTL 과연동
50 표현방법 구문 ${ 출력내용 } ${value1.value2[.value3 ]} 객체의 property에접근할때주로사용하는방법 ${value1[ value2 ]} index로조회하는 collection( 배열, List) 조회시주로사용하는방법 value1은 EL 기본객체나속성명이들어와야한다. 구문실행결과가 null일경우는출력하지않음 JSP 의 script(scriptlet, 표현식, 선언부 ) 요소에는사용못함 예 ) <jsp:include page="/abc/${dir.page}"/> ${sessionscope.mvo[ id ]} 님환영합니다. 첫번데이터는 ${requestscope.list[1]} 입니다.
51 기본객체 EL은 11개의기본객체를제공하며별다른추가코드없이사용할수있다. pagecontext 를제외하고모두 Map(key-value) 형식이다. pagecontext : JSP의 pagecontext와같다. pagescope : JSP의 page scope와동일하다. requestscope : request scope에접근하기위한객체 sessionscope : session scope에접근하기위한객체 applicationscope : application scope에접근하기위한객체 cookie : client가전송한쿠키의값을조회시사용
52 기본객체 param : 요청파라미터 (form data들 ) 를읽어올때사용. paramvalues : 같은이름으로넘어온여러요청파라미터 (form data들 ) 값들조회시사용 header : 요청정보의 Header의값을읽어올때사용. headervalues : 같은이름으로여러개설정된요청정보의 Header의값을조회시사용. initparam : Application 레벨의초기파라미터조회
53 4 개의저장영역에서값가져오기 EL 은 4 개의속성저장영역 (page, request, session, application scope) 에서값을가져와출력 Expression tag 나 <jsp:getproperty> 보다간단히처리가능 ${cust.name} 4 영역의 scope 에서 cust 로저장된객체를참조하여 getname() 를호출한값을출력. 동일한이름의객체가여러영역에있는경우기본객체 xxxxscope 를사용하여명시적으로선언한다. ${requestscope.cust.name}
54 Collection 에서값가져오기 Index로접근하는 Collection( 배열, List) 경우 [] 를이용 Map의경우 [ key ] 또는.Key 를이용 예 : String [] strs = {"a", "b", "c"}; Map mp = new HashMap(); mp.put("name1", "value1"); session.setattribute("array", strs); session.setattribute("map", mp); ----------- ${array[0]}, ${array[ 1"]}, ${array[2]}; ${map["name1"]} 또는 ${map.name1}
55 EL Literal value 와연산자 Literal value 문자열 또는 문자열 true, false null 산술연산자 : +,-,*,/(div),%(mod) ${"10"+1} "10" 을숫자로변환후계산 ${" 일 "+1} 오류발생 ${null+1} null 은 0 으로처리된다. 비교연산자 == 또는 eq!= 또는 ne < 또는 lt > 또는 gt <= 또는 le >= 또는 ge 논리연산 && 또는 and 또는 or! 또는 not empty
56 EL 비활성화 JSP 페이지의 page 지시자태그에서 iselignored="true 로설정
57 JSTL (JSP Standard Tag Library)
58 JSTL 이란 Apache 재단에서진행하는 custom tag library 프로젝트 스크립트릿으로작성해야할로직을태그로대신처리가능 apache에서다운받아 lib에추가. custom tag는지시자태그 taglib를통해 prefix 설정필요 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 참고사이트 http://java.sun.com/products/jsp/jstl http://jakarta.apache.org/taglibs
태그종류 라이브러리하위기능 코어변수지원, 흐름제어, URL 처리 접두어관련 URI c http://java.sun.com/jsp/ jstl/core XML XML관련처리 Xml 흐름제어 x http://java.sun.com/jsp/ jstl/xml 국제화 국제화처리, 메시지관리 fmt http://java.sun.com/jsp/ jstl/fmt 데이터베이스테이터베이스접근 sql http://java.sun.com/jsp/ jstl/sql 함수 Collection 처리 String 처리 fn http://java.sun.com/jsp/ jstl/functions
60 Core 변수지원 set :JSP에서사용될변수설정 remove : 설정한변수제거 흐름제어 if : 조건문처리 choose: 다중조건처리 (else if) foreach: collection 또는 map의각항목을처리할때사용 loop fortokens: 구분자로분리된각각의토큰을처리시사용
61 변수지원 <set> 4 개의속성저장영역 (scope) 에값 (Attribute) 을 binding 하거나영역 (scope) 에저장되있는 bean 의 property 를지정할때사용 구문 : <c:set var=" 변수명 " scope="scope" value=" 변수값 "/> var : 값을지정할변수의이름 scope : 변수를저장할영역지정. page, request, session, application 중하나. value : 변수의값. 표현식이나 EL 을사용해값을차후에지정할수있다. value 가 null 이면 var 에있는기존의속성값은삭제된다. target : 값을세팅시킬객체 (bean 이나 map 만가능함 ) 지정. var 와같이쓸수없다. property : 값을설정할프라퍼티명. Map 의 key 나 Bean 의 setter 이름 예 <c:set var="name" scope="request value= 이순신 /> 사용 : ${name} <c:set target=${requestscope.mvo property= name value= 홍길동 />
62 변수지원 <remove> 특정 scope에설정된속성을제거시사용. 구문 <c:remove var="name" scope="scope"/> scope : 삭제할속성이 binding 된 scope page, request, session, application var : 삭제할속성의 binding된 name 예 ) <c:remove var= mvo scope= session />
63 흐름제어 <if> if문과동일. 조건문처리. 중첩된 if-else는사용할수없다. 구문 <c:if test=" 조건 "> 내용 </c:if> 속성 : test 조건이 true이면내용을실행.
64 흐름제어 <choose> 조건이여러개인경우의조건문을처리하기위한태그 구문 <c:choose> <c:when test=" 조건 "> 내용 </c:when> <c:when test=" 조건 "> 내용 </c:when> <c:otherwise> 내용 </c:otherwise> </c:choose>
65 흐름제어 <foreach> 특정횟수만큼구문을반복하거나, 배열, Collection 또는 Map 에저장된값을반복문을이용해조회하려고할때사용. Java 의반복문 구문 컬렉션의값조회 <c:foreach var=" 변수 " items=" 아이템 "> 내용 ${ 변수 } </c:foreach> 속성 : var : Collection에서처리한값을저장할변수 items : 처리할 Collection
66 흐름제어 <foreach> map var 에 entry 가할당어 key 값은.key, value 는.value 로접근 <c:foreach var="i" items= "${map}" > ${i.key}=${i.value}<br> </c:foreach> 단순반복 구문 <c:foreach var="i" begin="1" end="20" step="2"> 출력 : ${i} <br> </c:foreach>
JDBC JDBC Java Program의데이터베이스와연동을처리하는 API DBMS Vender들이표준 API를구현해제공한다. Java.sql 패키지 프로그래밍패턴 1. Driver loading 2. Connection( 연결 ) 3. Statement/PreparedStatement 4. ResultSet(Select의경우 ) 5. close(connection, Statement, ResultSet)
JDBC Programming Pattern 1. Driver Loading Driver : DB 와 P/G 의연결을관리 Class.forName( Driver Class ); 예 ) String driver = oracle.jdbc.driver.oracledriver Class.forName(driver);
JDBC Programming Pattern 2. DB 와연결 DB 와연결을위해 URL 과계정정보필요 DB url : jdbc:subprotocol:subname URL 은 DBMS vender 마다다름. - Oracle url - "jdbc:oracle:thin:@server-ip:1521:sid" 연결메소드 : DriverManager.getConnection(url, id, pwd) : Connection String url = " jdbc:oracle:thin:@ 127.0.0.1:1521:XE Connection con = DriverManager.getConnection(url, user, pass );
JDBC Programming Pattern 3. Create a Statement Statement stmt = con.createstatement(); Statement : query 의내용이 run-time 에결정되어진다. (dynamic, 실행은늦지만융통성이좋다.) 참고 :PreparedStatement ; query 의내용이 compile-time 에결정되어진다. (static, 융통성은떨어지지만실행은빠르다 )
JDBC Programming Pattern 4. 쿼리전송 String query = sql문 ; int count = stmt.executeupdate(query); //DML ResultSet rset = stmt.executequery(query); //DQL * SQL Query가 INSERT, DELETE, UPDATE인경우에는 executeupdate() 를사용한다. Query 실행후반영된결과 record의개수가반환된다. * SQL Query가 SELECT인경우에는 executequery() 를사용한다. Query 실행후 SELECT한결과가 ResultSet type으로반환된다.
ResultSet 의형태
JDBC Programming Pattern 6. Retrieving Result (throws SQLException) rset : ResultSet 1. while(rset.next()) { //Cursor 를한행씩내린다. String str = rset.getstring(1); //Column 의값을가져온다. int i = rset.getint( field_name ); //Column 의값을가져온다. } 2. if(rset.next()) { } String str = rs.getstring(1); 1) SELECT 결과가여러개일경우 2) SELECT 결과가하나일경우
JDBC Programming Pattern 7. Close Resource (throws SQLException) rset.close(); stmt.close(); con.close();
PreparedStatement 생성 SQL 구문을정의하고변경될값은치환문자 (?) 를이용해쿼리전송전에값을 setting 한다. String sql = INSERT INTO MEMBER (ID, NAME, ADDRESS) VALUES(?,?,?) ; PreparedStatement pstmt = conn.preparestatement(sql); 값세팅 쿼리전송전에 Column 의데이터타입에맞는 set 메소드를호출하여? 에값을 setting 한다. setxxx(int?index, value); 쿼리전송 executequery() : ResultSet executeupdate() : int
Connection Pool 과 DataSource DBMS 와연결 : 속도가느리다. 해결책 : Connection Pool 내용 Connection Pool 이란 Connection 을관리하는객체 Pool Connection 들을미리생성하여 Pool 에저장한뒤필요시마다빌려쓰는개념 사용후에는다시 Connection Pool 로반납한다. Connection Pool 은작성하거나 API 로제공되는것을사용한다. Apache 의 DBCP api DataSource : DriverManager 의 upgrade version 으로 Connection Factory 이다. JDBC 2.0 에서지원 DataSource 객체는연결할 DB 에대한정보 (driver, url, 계정 ) 를가지고있다. 내부적으로 Connection Pool 을지원할수있다. 구현방식 : Vendor 마다다름. 요청시 Connection 을생성하여제공 Connection Pool 을이용해 Connection 을미리생성후요청시제공
77 MVC 패턴 GUI 기반 Application 설계패턴 Macro 디자인패턴 Model Business Logic 처리 Business Service(Manager) Business 로직의 Work flow 처리 DAO (Data Access Object) View Database 관련 Business Logic 담당 Presentation Logic 처리 Controller 프로그램의실행흐름을관리 사용자의요청에대한실행을위해 Model과 View사이의일의흐름을처리
78 Model2 패턴 MVC 패턴을 Web Application에적용한것 Model Java Beans 가담당 View JSP 가담당 Controller Servlet 이담당
79 Front Controller 패턴 클라이언트의요청을집중시키는 Controller 를생성하는패턴 요청을한곳으로집중할수있다. 모든컨트롤러들에공통적로직을처리할수있다. 대표프레임워크 Struts SpringMVC