810 likes | 1.2k Views
education document web programing -java-. 2010.11.26. 교육대상 및 목표. 교육대상 자바 웹 프로그래밍 교육이 필요한 개발자 및 운영자로 평일 1 시간 강의에 참여가 가능해야 하며 외부 인터넷 망에 접근 가능한 컴퓨터 환경이 갖춰져 있어야 합니다 . 교육목표 스트럿츠 프레임워크 방법론으로 웹사이트 개발 교육과정
E N D
education documentweb programing-java- 2010.11.26
교육대상 및 목표 • 교육대상 • 자바 웹 프로그래밍 교육이 필요한 개발자 및 운영자로 평일 1시간 강의에 참여가 가능해야 하며 외부 인터넷 망에 접근 가능한 컴퓨터 환경이 갖춰져 있어야 합니다. • 교육목표 • 스트럿츠 프레임워크 방법론으로 웹사이트 개발 • 교육과정 • HTML 기초부터 XSL, XML, JSP 기초, JAVA 기초문법, oracle, 게시판 개발(only JSP, MVC 모델2, Struts), iBatis, ajax Dwr
용어 • HTTP [hypertext transfer protocol] • 인터넷에서, 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다. • 프로토콜 [protocol] • 컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속. • 월드와이드웹 [world wide web] • 인터넷망에서 정보를 쉽게 찾을 수 있도록 고안된 방법 또는 세계적인 인터넷망. • 인터넷 [internet] • 아르파네트(ARPANET)에서 시작된 세계 최대 규모의 컴퓨터 통신망. • 인트라넷 [intranet] • 인터넷 기술과 통신규약을 이용하여 조직내부의 업무를 통합하는 정보시스템. • URL [uniform resource locator] • 웹 문서의 각종 서비스를 제공하는 서버들에 있는 파일의 위치를 표시하는 표준을 말한다. • URL은 웹상에서 서비스를 제공하는 각 서버들에 있는 파일들의 위치를 명시하기 위한 것으로 접속해야 될 서비스의 종류, 서버의 위치(도메인 네임), 파일의 위치를 포함한다. 일반적인 체계(syntax)는 프로토콜://정보를 가진 컴퓨터 이름/디렉터리 이름/파일 네임으로 구성된다. • FTP [file transfer protocol] • 인터넷을 통해 한 컴퓨터에서 다른 컴퓨터로 파일을 전송할 수 있도록 하는 방법과, 그런 프로그램을 모두 일컫는 말이다.
용어 • 텔넷 [telecommunication network] • 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜. • URI (Uniform Resource Identifier) • 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어다닌다. URI는 다음과 같은 요소로 구성된다. • 프로토콜 (HTTP 혹은 FTP) + : + // + 호스트이름 + 주소 • 예: http://ko.wikipedia.org • URI의 하위개념으로 URL, URN 이 있다. • HTML [ Hyper Text Markup Language ] • 하이퍼텍스트의 구조를 서술하는 일종의 컴퓨터 언어. 직접 프로그램을 제작하는 데 사용되는 C나 PASCAL과 달리 웹에서 사용되는 각각의 하이퍼텍스트문서로 사용되는 각각의 하이퍼텍스트 문서를 작성하는 데 사용된다. 넷스케이프 등과 같은 웹 브라우저는 이 HTML파일을 받아다 하이퍼텍스트 파일을 구성해 놓은 것으로 우리가 인터넷에서 볼 수 있는 수많은 홈페이지들은 기본적으로 HTML이라는 언어를 사용하여 구현된 것이다. • HTTPS [ hypertext transfer protocol over Secure Sockets Layer, HTTP over SSL ] • 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발했으며, 전자 상거래에서 널리 쓰인다. • HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장한다. HTTPS의 기본 TCP/IP 포트는 443이다. • 보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘에 달려있다. • HTTPS를 사용하는 웹페이지의 URL은 'http://'대신 'https://'로 시작한다.
용어 • SSL [secure sockets layer] • 인터넷 상거래시 필요한 개인 정보를 보호하기 위한, 개인 정보 유지 프로토콜이다. • 인터넷 프로토콜(Internet protocol)이 보안면에서 기밀성을 유지하지 못한다는 문제를 극복하기 위해 개발되었다. 현재 전세계에서 사용되는 인터넷 상거래시 요구되는 개인 정보와 크레디트카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜이다. 최종 사용자와 가맹점간의 지불 정보 보안에 관한 프로토콜이라고 할 수 있다. • XML [extensible markup language] • 인터넷 웹페이지를 만드는 HTML을 획기적으로 개선하여 만든 언어이다. 홈페이지 구축기능, 검색기능 등이 향상되었고, 웹 페이지의 추가와 작성이 편리해졌다. • 확장성 생성 언어(擴張性生成言語)로 번역되며, 1996년 W3C(World Wide Web Consortium)에서 제안하였다. HTML보다 홈페이지 구축 기능, 검색 기능 등이 향상되었고 클라이언트 시스템의 복잡한 데이터 처리를 쉽게 한다. 또한 인터넷 사용자가 웹에 추가할 내용을 작성, 관리하기에 쉽게 되어 있다. • 이밖에 HTML은 웹 페이지에서 데이터베이스처럼 구조화된 데이터를 지원할 수 없지만 XML은 사용자가 구조화된 데이터베이스를 뜻대로 조작할 수 있다. 구조적으로 XML 문서들은 SGML(standard generalized markup language) 문서 형식을 따르고 있다. XML은 SGML의 부분집합이라고도 할 수 있기 때문에 응용판 또는 축약된 형식의 SGML이라고 볼 수 있다. 1997년부터 마이크로소프트사(社)와 넷스케이프 커뮤니케이션스사(社)가 XML을 지원하는 브라우저 개발을 하고 있다. • SGML [Standard Generalized Markup Language] • 전자문서가 어떠한 시스템 환경에서도 정보의 손실 없이 전송, 저장, 자동처리가 가능하도록 국제표준화기구(ISO)에서 정한 문서처리 표준이다. • 웹문서를 만드는 언어로 가장 보편적인 HTML과 차세대 인터넷표준언어로 채택된 XML은 모두 SGML에 근거하여 만들어진 것이다.
용어 • 애플릿 [applet] • Java 언어로 구성된 간단한 기능의 소규모 프로그램을 의미하거나 웹 페이지에 포함되어 작은 기능을 수행하는 프로그램을 말한다. 용량과 속도에 구애 받지 않고 서버에 대한 별도의 요청 없이 단순한 작업을 수행한다. • 애플릿은 Java 언어로 구성된 작은 응용 프로그램을 의미한다. Java 언어는 인터넷 기반의 언어이므로 용량과 속도의 한계로 프로그램을 크게 만들 필요가 없으므로 소규모 애니메이션, 그림 그리기, 날씨 변화 표시하기, 주가정보 표시 등의 간단한 기능을 처리하는 작은 프로그램을 만들어 사용하는 데 이를 의미한다. • 월드 와이드 웹이 나오기 이전에도 윈도와 함께 기본으로 제공되던 작은 프로그램들, 예를 들어 메모장이나 그림 그리기 등을 '애플릿'이라고 부른 적이 있었다. • 디버그 [debug] • 프로그램의 개발 마지막 단계에서, 프로그램의 오류를 발견하고 그 원인을 밝히는 작업 또는 그 프로그램을 말한다. 오류 수정 작업은 디버깅(debugging), 오류 수정 소프트웨어는 디버거(debugger)라고 한다. • 객체지향프로그래밍 [object-oriented programming] • 모든 데이터를 오브젝트(object;물체)로 취급하여 프로그래밍 하는 방법으로, 처리 요구를 받은 객체가 자기 자신의 안에 있는 내용을 가지고 처리하는 방식이다. • XSL 변환 [ XSLT, XSL Transformation, -變換 ] • 확장성 생성 언어(XML) 문서 형식을 다른 형식의 문서로 변환하는 방법을 기술한 표준 방법. 확장 스타일시트 언어(XSL)의 확장으로서 XML 문서가 다른 데이터 형식으로 재구성되는 방법을 보여준다. XSLT 부호화를 스타일시트라 부르기도 하고, XSL 스타일시트와 같이 사용하거나 독립적으로 사용된다. →확장성 스타일시트 언어. ; • CSS [cascading style sheets] • 웹 문서의 전반적인 스타일을 미리 저장해 둔 스타일시트이다. 문서 전체의 일관성을 유지할 수 있고, 세세한 스타일 지정의 필요를 줄어들게 하였다.
FORM • <form name="" action="" method="post" target="_self"> • <input name="" type="text" tabindex="1" align="left" disabled maxlength="10" size="10"><br/> • <input name="" type="text" readonly tabindex="2" onKeyUp="" onFocus=""><br/> • <input name="" type="password" onFocus="" onKeyDown=""><br/> • <input name="" type="radio" value="A" checked>A <input name="" type="radio" value="B">B • <input name="" type="radio" value="C">C<br/> • <select name="select" onChange=""> • <option value="O">O</option> • <option value="X" selected>X</option> • </select> • <select name="" size="5" multiple onChange=""> • <option value="O">O</option> • <option value="X">X</option> • <option value="" selected></option> • </select><br/> • <input name="" type="image" usemap="" border="" align="middle" onBlur="" onClick=""><br/> • <input name="" type="hidden" value=""><br/> • <input name="" type="file" onChange=""><br/> • <input name="" id="" type="checkbox" value="A" onClick="" checked>A <input name="" id="" type="checkbox" value="B" onClick="">B <input name="" id="" type="checkbox" value="C" onClick="">C<br/> • <input name="" type="button" onClick=""><br/> • <input name="" type="submit"><br/> • <input name="" type="reset"><br/> • <textarea name="" cols="" rows="" onFocus=""></textarea> • </form>
과제-회원가입 • * 필수입력체크 • 1.입력에 포커스에 있을 때 바탕 색을 노랑색으로 변경.포커스 떠나면 횐색 • 2.이름 입력 시 한글모드, 공백제거 • 3.아이디 영문+숫자(한글입력 안됨) 8자리 이상~10자리 • 4. 주민번호 6자리 입력하면 포커스 옆으로 이동 • 5. 주민번호 7번째 입력 시 남/여 자동 체크 • 6.저장 버튼 클릭시 이메일 @ 존재 확인하고 없으면 경고창 띄우고 포커스 줌 • 7.전화번호 서비스번호 변경되면 포커스 옆으로 이동, 국번 4자리 입력하면 포커스이동 • 8.저장 버튼 클릭 시 필수입력 체크 • 9. 비밀번호 8자리~10자리 *이름 *아이디 *비밀번호 주민번호 - 성별 남 여 이메일 전화 - - 저장 초기화
용어 • CVS (Concurrent Versions System, 동시 버전 시스템) • 동시 버전 관리 시스템(Concurrent Versioning System)으로도 알려져 있으며, 버전 관리 시스템을 구현한다. 보통 소프트웨어 프로젝트를 진행할 때, 파일로 이뤄진 모든 작업과 모든 변화를 추적하고, 여러 개발자(지역적으로 떨어진)가 협력하여 작업할 수 있게 한다. CVS는 GNU 일반 공중 사용 허가서 하에서 배포된다. CVS는 오픈 소스 프로젝트에서 널리 사용되었다. 현재는 CVS가 한계를 맞아, CVS를 대체하는 서브버전이 개발되었다. • CVS로 관리되는 하나의 프로젝트(관련된 파일의 집합)를 모듈이라 부른다. CVS 서버는 보관소에 모듈을 저장한다. 모듈의 복사본을 얻는 것은 체크 아웃(checking-out)이라 한다. 체크 아웃된 파일은 작업 중인 복사본으로 관리된다. 이 복사본을 바꾸려면 커밋(commit)하여 보관소에 넣어야 한다. 업데이트(update)는 작업 중인 복사본이 있는 보관소에서 최근에 변경된 사항을 얻는다. • SVN • 서브버전(Subversion)은 자유 소프트웨어 버전 관리 시스템이다. 명령행 인터페이스에서 사용하는 명령어를 따서 “SVN”이라고 줄여서 부르기도 한다. 제한이 있던 CVS를 대체하기 위해 2000년부터 콜랩넷에서 개발되었다. • CVS와 비교했을 때, 서브 버전은 다음과 같은 장점을 가진다. • 원자적으로 쓰기를 지원하므로, 다른 사용자의 쓰기와 엉키지 않는다. • 이름을 바꾸거나, 복사하거나, 파일을 지워도 리비전 기록을 유지한다. • 이진 파일의 경우 한번 저장한 후 변경될 경우 차이점만 저장하기 때문에 저장소를 효율적으로 사용할 수 있다. • 디렉터리도 버전 관리를 할 수 있다. 디렉터리 전체를 빠르게 옮기거나 복사할 수 있으며, 리비전 기록도 그대로 유지한다. • 소스 저장고의 크기에 상관 없이 일정한 시간 안에 가지 치기(branching)나 테그 넣기(tagging)를 할 수 있다. • 소스 저장고로의 접근이 최적화되어 있으므로, 소스 저장고에서 필요 없는 네트워크 트래픽을 줄일 수 있다.
용어 • 웹서버 [ Web Server ] • 웹 페이지(HTML 파일)를 제공해 주는 서버를 말하는 것으로 HTTP를 사용하여 웹 페이지를 제공할 수 있는 웹 서버 프로그램이 설치되어 있고 하나의 도메인 이름을 갖고 있다.예를 들어, 사용자가 웹 브라우저에서 URL로 'http://epic.kdi.re.kr'를 입력하면, 도메인 이름이 'epic.kdi.re.kr'인 서버에게 웹 페이지를 요청하고 서버는 'index.html' 파일을 찾아서 브라우저에게 보낸다. 따라서, 가장 일반적인 웹 서버로는 UNIX기반의 아파치, WINDOW NT의 IIS, 넷스케이프의 엔터프라이즈 서버가 있다. • 웹 애플리케이션 서버 • 웹 애플리케이션 서버(Web Application Server, 약자 WAS)는 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)이다. • 웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행이 된다. 한국에서는 일반적으로 "WAS" 또는 "WAS S/W"로 통칭하고 있으며 공공기관에서는 "웹 응용서버"로 사용되고, 영어권에서는 "Application Server"로 불린다. • 웹 애플리케이션 서버는 대부분이 자바 기반으로 주로 Java EE 표준을 수용하고 있으나, 자바 기반이지만 Java EE 표준을 따르지 않는 제품과 .NET이나 Citrix 기반인 비Java 계열도 존재한다. • 웹 애플리케이션 서버의 기본 기능은 3가지이다. • 프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다. • 여러 개의 트랜잭션을 관리한다. • 업무를 처리하는 비즈니스 로직을 수행한다. • Java EE 표준준수 웹 애플리케이션 서버 • 제우스(한국, 티맥스소프트, 상용) 웹로직(미국, 오라클, 상용) 웹스피어(미국, IBM, 상용) 레진(미국, Caucho, 상용) • 글래스피시(미국, 오라클, 오픈소스) 제이보스(미국, 레드햇, 오픈소스) 인터스테이지 (일본, 후지쯔, 상용) • Java 기반이나 Java EE 비준수 웹 애플리케이션 서버 • 아파치 톰캣(Apache Tomcat) : 오픈소스재단 아파치 소프트웨어 재단의 오픈소스 소프트웨어 • 레진(Resin) : Caucho사의 제품, 제이런(JRun) : macromedia사의 제품
개발환경 • 1. JDK 6 설치 • 2. Tomcat 6 설치 • 3. 환경변수 추가 • 4. eclipse 설치 • 5. c:/workspace 생성 • 6. eclipse • help>Install New Software... • Subversive SVN Connectors • http://community.polarion.com/projects/subversive/download/eclipse/2.0/galileo-site/ • 7. tomcat plugin 설치(eclipse>plugin>tomcatPluginV321.zip) • 8. 톰캣 lib 복사 • 9. 네이버 SVN checkout 다이나믹 프로젝트로 생성 한후에 • Window>profer...>team>cvs>ingno...> .class, .project, .classpath, .settings, classes • 10. 수정 • tomcat 6.0/conf/Catalina/localhost/ROOT.xml CATALINA_HOME : C:\Tomcat 6.0 classpath : .;C:\Tomcat 6.0\lib\servlet-api.jar Path : %CATALINA_HOME%\bin; 추가 <?xml version="1.0" encoding="UTF-8"?> <Context path="/" docBase="c:\workspace2\education\WebContent\" debug="0" privileged="true" reloadable="true"> </Context>
자바스크립트 • 윈도우 오픈(팝업) • window.open("파일명","target","width=크기,height=크기,left=위치,top=위치, directories=yn,copyHistory=yn,location=yn,resizable=yn,scrollbars=yn,status=yn,toolbar=yn"); • width=크기 -> 새윈도우의 폭, height=크기 -> 새윈도우의 높이 • left=위치 -> 윈도우의 위치를 왼쪽 끝을 기준, top=위치 -> 윈도우의 위치를 위쪽 끝을 기준 • directories=yn -> 디렉토리 버튼을 보여준다. (연결)익스플로러 연결도구모음, 익스플로러 전용yew||no • copyHistory=yn -> 윈도우의 히스토리를 복사 • location=yn -> 주소 입력창, resizable=yn -> 사용자가 윈도우의 크기를 조정 유무, scrollbars=yn -> 스크롤바 사용 유무 • status=yn -> 상태 표시줄, toolbar=yn -> 툴바 • window.close; -> 창닫기 • 이벤트 핸들러(Event Handlers) • HTML 코드에 내장되는 자바스크립트 명령어다. 사용자와 웹 페이지 사이의 상호 작용을 위해 HTML 코드와 함께 사용된다. • onBlur : 사용자가 select, text, textarea 폼 요소에 있다가 그 요소에서 벗어나게 될 때 발생하는 이벤트 핸들러이다. 즉, 사용자가 그 아이템에 대한 포커스를 잃을 때 발생한다. • onChange : 사용자가 select, text, textarea 폼 요소에 있는 텍스트를 변경한 후 그 요소를 떠날 때 발생하게 된다. • onClick : 사용자가 링크와 같은 오브젝트를 클릭할 때 발생한다. • onFocus : 사용자가 select, text, textarea 폼 요소를 선택할 때 발생한다. 즉 사용자가 그 폼 요소에 포커스를 맞출 때 발생한다. • onLoad : 웹 페이지가 열릴 때 발생하는 이벤트로 HTML의 BODY 태그 안에서 사용된다. • onMouseOver : 사용자가 링크 위에 마우스를 올려 놓았을 때 발생하는 이벤트 핸들러이다. • onSelect : 사용자가 text, textarea 폼 요소에 있는 텍스트의 일부 또는 전체를 선택할 때 발생한다. • onSubmit : submit 버튼 폼 요소를 사용자가 틀릭할 때 발생한다. • onUnLoad : 사용자가 웹 페이지를 떠날 때 발생하는 이벤트로 HTML의 BODY 태그 안에서 사용된다.
자바스크립트 • 제어 문 • if(비교값1){처리내용1}elseif(비교값2){처리내용2}else{비교값3}; • 논리연산자 && (AND), || (OR), ! (NOT) • 연산기호 ==,<,>,<=,>=,!= • 반복 문 • for(i=0;i<5;i++){처리내용} • while(i<5){처리내용}; • 날짜관련 • var myDate = new Date(); • var myDate = new Date(949278000000); • var myDate = new Date("1 jan 2003"); • var myDate = new Date(2000,0,31,15,35,20,20); 2000년 1월 31일 35분 20초 20밀리 • getDate() -> myDate.getDate(); 날짜를 반환 • getDay() -> myDate.getDay(); 요일을 정수로 반환 • getMonth() -> myDate.getMonth(); 월을 정수로 반환 • getFullYear() -> myDate.getFullYear; 년을 네 자리 수로 반환 • setDate() -> myDate.setDate(27); 날짜를 설정 • setMonth() -> myDate.Month(1); 월을 설정 • setFullYear() -> myDate.setFullYear(2003); 년을 설정 • myDate.getHours(); 시간 • myDate.getMinutes(); 분 • myDate.getSeconds(); 초 • myDate.getMilliseconds; 밀리
자바스크립트 • 문자관련 • isNaN(변수); -> 숫자 false 문자 true • length -> 문자열의 길이 • myArray.length; -> 변수길이 • myArray.sort(); • var myString = new String("나는 String 개체입니다"); • var lengthOfString = myString.length; • charAt(위치값) -> 문자열에서 한문자 선택 • charCodeAt(위치값) -> 문자열에 한문자 코드값 • myString = String.fromCharCode(65,66,67); -> 문자 코드를 문자열로 변환 (ABC) • indexOf('앞부분 부터 찾을문자'); • lastIndexOf('뒷부분 부터 찾을 문자') -> 문자열의 위치를 반환, 없을 경우 -1반환 • substr(시작위치,복사할문자수); -> 문자열의 일부분 복사하기 • substring(시작위치,끝위치); • myDate.toString(); -> 숫자를 문자열로 반환 • myString.toLowerCase(); -> 문자열의 소문자 변환 • myString.toUpperCase(); -> 문자열의 대문자 변환 • 알림 창 • window.alert('내용'); //경고창 • prompt('내용',초기값); //입력값 받기 • confirm('내용'); //확인,취소 • print(); //현 윈도우를 인쇄하고자 할 때
자바스크립트 예제 • <script type="text/javascript"> • function setVisible(divname){ • document.getElementById(divname).style.display = ""; • } • function setHide(divname){ • document.getElementById(divname).style.display = "none"; • } • </script> • <input type="button" name="btn_div" value=" 보이기 " onClick="javascript:setVisible('test_div')"/> • <input type="button" name="btn_div" value=" 감추기 " onClick="javascript:setHide('test_div')"/> • <div id="test_div" style="display:none"> • 여기는 KGIT 8층입니다. • </div>
자바스크립트 예제 • <script type="text/javascript"> • var idx = 1; • function setAdd(divname){ • idx ++; • document.getElementById(divname).outerHTML = "<div id='div"+idx+"'>" • + "<input type='text' name=\"person_name\"/>" • + " <input type='button' name='minus' value='-' onClick=\"javascript:setDel('div"+idx+"')\"/></div>" • +"<div id=\"test_div\"></div>"; • } • function setDel(tname){ • document.getElementById(tname).outerHTML = ""; • } • </script> • <input type="button" name="btn_div" value=" 추가 " onClick="javascript:setAdd('test_div')"/> • <div id="div1"><input type="text" name="person_name"/> • <input type="button" name="minus" value="-" onClick="javascript:setDel('div1')"/> • </div> • <div id="test_div"></div>
자바스크립트 예제 • <script type="text/javascript"> • function checkAll(bool) { • var chks = document.getElementsByName("chk"); • for(var i=0;i<chks.length;i++) { • if(chks[i].type == "checkbox") chks[i].checked = bool; • } • } • </script> • <input type="checkbox" name="chkAll" onclick="javascript:checkAll(this.checked);">전체<br/><br/> • <input type="checkbox" name="chk" value="A">A • <input type="checkbox" name="chk" value="B">B • <input type="checkbox" name="chk" value="C">C
용어 • AJAX • WEB2.0의 기반 기술 중 하나이다. AJAX는 자체가 하나의 특정한 기술을 말하는 것이 아니며, 함께 사용하는 기술의 묶음을 지칭하는 용어로 대화식 웹 애플리케이션의 제작을 위해 사용된다. AJAX 애플리케이션은 실행을 위한 플랫폼으로 사용되는 기술들을 지원하는 웹 브라우저를 이용하는데, 이를 지원하는 브라우저로는 모질라 파이어폭스, 인터넷 익스플로러, 오페라, 사파리 등이 있다. • 현재 대화형 웹 페이지를 위한 도구로서 Ajax를 이용하는 애플리케이션들이 급격히 늘어나고 있으며, 이는 부분적으로 이용할 수 있는 애플리케이션 툴 킷(예: Ruby on Rails, DWR)이 늘어나 프로그래머들이 구현하기가 쉬워진 때문이다. • 장점 • 페이지 이동 없이 고속으로 화면을 전환할 수 있다. • 서버 처리를 기다리지 않고, 비 동기 요청이 가능하다. • 수신하는 데이터 량을 줄일 수 있고, 클라이언트에게 처리를 위임할 수도 있다. • 단점 • Ajax를 쓸 수 없는 브라우저에 대한 문제가 있다. • Http클라이언트의 기능이 한정되어 있다. • 페이지 이동 없는 통신으로 인한 보안상의 문제 • 지원하는 Charset 한정되어 있다. • 스크립트로 작성되므로 Debugging이 용이하지 않다. • 요청을 남발하면 역으로 서버 부하가 늘 수 있음.
XML/XSL/DTD • 200234-250537.xml • <?xml version="1.0" encoding="utf-8"?> • <!DOCTYPE press SYSTEM "200234-250537.dtd"> • <!-- XSL 문서 적용 • <?xml-stylesheet type="text/xsl" href="200234-250537.xsl"?> • --> • <press> • <category id="정치면"> • <news> • <headline>기사제목</headline> • <subject>'예산 삭감 논란'에 종지부</subject> • <date>2008년 10월 24일(금)</date> • <content>기사내용.....</content> • <picture> • <img src="banq.jpg"/> • </picture> • <write> • <position>서울=연합뉴스</position> • <name>이승관</name> • <email>humane@yna.co.kr</email> • </write> • </news> • </category> • // category 반복 • </press> 200234-250537.dtd <?xml version="1.0" encoding="utf-8"?> <!ELEMENT press (category*)> <!ELEMENT category (news*)> <!ELEMENT news (headline,subject,date,content,picture,write)> <!ELEMENT write (position,name,email)> <!ELEMENT headline (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT date (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ELEMENT picture (img)> <!ELEMENT position (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT img (#PCDATA)> <!ATTLIST category id CDATA #REQUIRED> <!ATTLIST img src CDATA #REQUIRED>
XML/XSL/DTD • <?xml version="1.0" encoding="utf-8"?> • <xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> • <!-- start template rule --> • <xsl:outputmethod="html"encoding="euc-kr"/> • <xsl:templatematch="/"> • <html> • <head> • <title>200234-250537</title> • <link href="200234-250537.css" rel="stylesheet" type="text/css"/> • </head> • <body> • <table width="600" border="0" cellspacing="0" cellpadding="0"> • <xsl:apply-templatesselect="/press/category"/> • </table> • </body> • </html> • </xsl:template> • <xsl:templatematch="category"> • <tr> • <td class="category_text"><xsl:value-ofselect="@id"/></td> • </tr> • <xsl:apply-templatesselect="news"/> • </xsl:template>
XML/XSL/DTD • <xsl:templatematch="news"> • <tr> • <td> • <table width="100%" border="0" cellspacing="0" cellpadding="0"> • <tr> • <td width="200" valign="middle"> • <xsl:variablename="vImg"><xsl:value-ofselect="picture/img/@src"/></xsl:variable> • <img src="{$vImg}" width="200"/> • </td> • <td width="5"></td> • <td valign="top"> • <span class="headline_text"><xsl:value-ofselect="headline"/></span><br/> • <span class="subject_text"><xsl:value-ofselect="subject"/></span><br/> • <span class="content_text"><xsl:value-ofselect="content"/></span><br/> • <span class="write_text"><xsl:value-ofselect="date"/></span><br/> • <span class="write_text"> • <xsl:value-ofselect="write/position"/> / <xsl:value-ofselect="write/name"/> (<xsl:value-ofselect="write/email"/>)</span> • </td> • </tr> • </table> • </td> • </tr> • <tr><td height="5"></td></tr> • </xsl:template> • </xsl:stylesheet>
TEST • 하이퍼텍스트의 구조를 서술하는 일종의 컴퓨터 언어? • SGML에 근거하여 정의, 구조화된 데이터베이스를 뜻대로 조작할 수 있는 차세대 인터넷표준언어? • 전자문서가 어떠한 시스템 환경에서도 정보의 손실 없이 전송, 저장, 자동처리가 가능하도록 국제표준화기구(ISO)에서 정한 문서처리 표준언어? • 확장성 생성 언어(XML) 문서 형식을 다른 형식의 문서로 변환하는 방법을 기술한 표준 방법? • 웹 애플리케이션 서버(Web Application Server, 약자 WAS) 종류 아는 대로 쓰시오. • 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전? • 현재 전세계에서 사용되는 인터넷 상거래시 요구되는 개인 정보와 크레디트카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜? • HTTP를 사용하여 웹 페이지를 제공할 수 있는 웹서버 종류 아는 대로 쓰시오. • 폼 요소에 있는 텍스트를 변경한 후 그 요소를 떠날 때 발생하는 이벤트 명? • 자바스크립트 내장함수 중 isNaN(변수)의 리턴값으로 변수가 숫자일때 리턴값은? • 자바스크립트 내장함수 중 alert() 과는 다르게 사용자에게 질문하는데 사용되며 사용자는 true또는 false를 리턴한다. 해당 함수는?
TEST • <?xml version="1.0" encoding="utf-8"?> • <!DOCTYPE press SYSTEM "200234-250537.dtd"> • <presses> • <category name="정치면"> • <news> • <headline>기사제목</headline> • <subject>'예산 삭감 논란'에 종지부<subject> • <date>2008년 10월 24일(금)</date> • <content>기사내용.....</content> • <picture src="banq.jpg"> • <write> • <position>서울=연합뉴스</position> • <name>이승관</name> • <email>humane@yna.co.kr</email> • </write> • </news> • </Category> • </presses> 왼쪽의 dtd를 기준으로 xml의 잘못된 부분 5개를 고쳐주세요 <?xml version="1.0" encoding="utf-8"?> <!ELEMENT press (category*)> <!ELEMENT category (news*)> <!ELEMENT news (headline,subject,date,content,picture,write)> <!ELEMENT write (position,name,email)> <!ELEMENT headline (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT date (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ELEMENT picture (#PCDATA)> <!ELEMENT position (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ATTLIST category id CDATA #REQUIRED> <!ATTLIST picture src CDATA #REQUIRED>
JAVASE 1.6 • 한글 API 1.6 SE - http://pllab.kw.ac.kr/javaSE6APIs/api/index.html http://download.oracle.com/javase/6/docs/
자바란? • 자바는 특별히 인터넷의 분산환경에서 사용되도록 설계된 프로그래밍 언어이다. 자바는 C++ 언어처럼 보이지만, C++ 보다는 사용하기에 간단하고 프로그래밍의 완전한 객체지향성을 강화하였다. 자바는 한 대의 컴퓨터나, 네트웍 상의 분산 클라이언트/서버 환경에서도 실행되는 응용프로그램을 만드는데 모두 사용될 수 있다. 이것은 또한 웹페이지의 일부로서 쓰이는 작은 응용프로그램 모듈이나 애플릿 등을 만드는 데에도 사용될 수 있다. 애플릿들은 사용자들이 웹페이지를 통해 상호작용을 할 수 있도록 해준다. 자바의 주요 특성들을 요약하면 다음과 같다. • ▶사용자가 만드는 프로그램들은 네트웍 상에서 쉽게 이식이 가능하다. 사용자가 개발한 프로그램은 자바 가상머신이 설치된 서버나 클라이언트 등 네트웍의 어디에서든지 실행될 수 있도록, 자바 바이트코드로 컴파일된다. 자바 가상머신은 바이트코드를 실제 컴퓨터 하드웨어에서 실행될 수 있는 코드로 해석한다. 이것은 명령어의 길이 등, 개별 컴퓨터 플랫폼간의 차이가 인식되고, 프로그램이 실행되어지고 있는 바로 그 위치에서 국부적으로 조정될 수 있다는 것을 의미한다. 특정한 플랫폼에 맞는 프로그램 버전은 더 이상 필요하지 않다. • ▶자바코드는 "튼튼하다". 즉, 이것은 C++나 기타 다른 언어로 작성된 프로그램들과는 달리, 자바 객체들은 외부 데이터로부터 내부 또는 알려진 다른 객체들로 향하는 참조를 포함하지 않을 수 있다는 것을 의미한다. 이것은 명령어가 다른 응용프로그램이나 운영체계 그 자체 내에 있는 데이터 저장소의 주소를 포함하지 않음을 보장함으로써, 그 프로그램이나 운영체계의 실행이 중단되거나 고장을 일으키지 않게 한다. 자바 가상머신은 각 객체에 대해 무결성을 보장하기 위해 여러 번의 검사를 실시한다. • ▶자바는 객체지향적이다. 이는 다른 특성들 가운데, 비슷한 객체들은 같은 클래스의 일부가 되고 공통 코드를 상속하는 등의 장점을 취할 수 있다는 것을 의미한다. 객체들은 전통적이고 절차적인 "동사"와 관계 있기보다, 사용자에게 "명사"와 관계 있는 것으로 생각하게 한다. 메쏘드는 객체의 능력이나 행동 중의 하나로 생각할 수 있다. • ▶서버가 아닌 클라이언트에서 실행되는 것 외에도, 자바 애플릿은 빠르게 실행되기 위해 설계된 다른 특성들을 가진다. • ▶ C++에 비해 자바는 배우기 쉽다 (그러나, 물론 하룻밤새 배울 수 있는 것은 아니다). • 자바는 1995년에 썬마이크로시스템즈에 의해 소개되었으며, 그 즉시 웹의 대화형 가능성에 대해 새로운 의미를 창출하였다. 주요 웹브라우저들은 모두 자바 가상머신을 포함한다. IBM, 마이크로소프트 등 거의 모든 주요 운영체계 개발자들이 자신들의 제품에 자바 컴파일러를 추가하였다. • 자바 가상머신은 한번에 하나의 바이트코드 명령어를 해석하는 대신, 바이트코드를 동적으로 컴파일하여 실행코드로 만드는 JIT 컴파일러를 선택적으로 포함할 수 있다. 많은 경우에서, 동적 JIT 컴파일이 가상머신 해석보다 더 빠르다.
자바의 특징 • 플랫폼 독립성 • 자바의 가장 큰 특징은 플랫폼 독립성을 갖고 있다는 점이다. • 자바로 프로그램을 작성하면 한번 만들어진 자바 프로그램은 운영체제나 CPU 타입에 상관없이 프로그램이 동작될 수 있다.(Write Once, Run Anywhere.) • 이것은 자바가상머신(JVM: Java Virtual Machine)이 자바로 작성된 프로그램에게 동일한 실행환경을 제공하기 때문이다. • 객체지향 언어 • 객체지향 프로그래밍 기법은 기존의 구조적 프로그래밍 방식을 획기적으로 개선한 뛰어난 프로그래밍 기법이다. • 이 기법은 재사용성이나 프로그램의 생산성 측면에서 놀라운 기능을 제공한다. • 멀티 쓰레드 지원 • 쓰레드란 프로그램 안에서 독립적으로 실행되는 작은 실행단위라고 할 수 있다. • 이 쓰레드는 하나의 프로그램 안에서 같이 실행되기 때문에 메모리 공유가 가능하면서 프로그램이 효율적으로 실행될 수 있도록 해준다. • 자동 메모리 관리 • 자바가상머신이 자동적으로 사용되지 않는 메모리 영역을 찾아서 해제해준다.
자바 Edition • 자바 플랫폼 스탠더드 에디션(Java Platform, Standard Edition, 약자 Java SE) • 자바 플랫폼에서 가장 널리 쓰이는 자바 API의 집합체이다. 예전에는 J2SE로 불리었으나 버전 6.0이후에 Java SE로 변경되었다. 이전에는 썬 마이크로시스템즈에서 관리하였으나, J2SE 1.4 이후는 JCP 주도하에 개발되고 있다. 따라서, JSR 59에는 J2SE 1.4를, JSR 176에는 J2SE 5.0(프로젝트명 타이거)를, Java SE 6 (프로젝트명 무스탕)은 JSR 170 하에 개발되었다. • 자바 플랫폼, 마이크로 에디션(Java Platform, Micro Edition) • Java 2 Platform, Micro Edition라고도 불리며, Java ME 혹은 J2ME 등으로도 널리 알려져 있다. 제한된 자원을 가진 휴대 전화, PDA, 세트톱박스 등에서 Java 프로그래밍 언어를 지원하기 위해 만들어진 플랫폼 중 하나를 가리킨다. • Java ME는 썬 마이크로시스템즈에서 고안하였다. 초기에는 Java Community Process에서 JSR 68로 개발되었으나, 각각 다른 특성을 가진 Java ME 플랫폼들이 별도의 JSR로 개발되었다. 썬 마이크로시스템즈에서 이 규격에 대한 참조 구현을 제공하고 있다. 하지만 이는 Java ME 플랫폼을 무료로 제공하기 위한 목적이 아니라, 다른 개발사에서 개발하는 데 도움을 주기 위함이다. • J2EE [ Java 2 Enterprise Edition ] • 분산 객체, 효율적 자원 관리, 컴포넌트 기반 개발 등을 자바 환경에서 할 수 있도록 하는 표준 규약. 은행 전산망처럼 큰 규모의 전산 환경을 엔터프라이즈급 환경이라고 하는데, 이러한 환경은 수많은 고객 정보를 공유해야 하고 어느 곳에서나 동일한 서비스를 차질 없이 제공해야 한다. 이러한 개방적인 웹 환경을 지원하는 J2EE의 구성 요소는 분산 객체와 컴포넌트 기반 개발을 지원하는 기업 자바빈(EJB), EJB 컨테이너 또는 웹 애플리케이션 서버가 효율적 자원 관리를 위해 사용하는 JTA(Java Transaction API)와 JDBC, 웹 환경을 담당하는 서브릿과 JSP(Java ServerPages), 기타 자바 네이밍 디렉터리 인터페이스(JNDI), 자바메일, 자바 메시지 서비스(JMS) 등의 기능이 있다. • 자바 FX 모바일 [ JavaFX Mobile ] • 선 마이크로시스템스사가 개발한 모바일 기기용 소프트웨어 표준. 운영 시스템(OS)으로 리눅스, 미들웨어는 자바를 사용한다. 리눅스와 자바 모두 공개 소프트웨어이기 때문에 휴대폰 업체 입장에서는 비용을 줄이고, 자사 제품에 안정적으로 사용할 수 있다. 모바일용 자바 ME가 단순한 소프트웨어 동작 플랫폼이었다면, 자바 FX 모바일은 각종 애플리케이션 프레임워크, 다양한 휴대폰 소프트웨어, 리눅스 기반 운영 체계 커널까지 전체를 제공하는 모바일 운용 기반이다.
용어 • 엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB) • 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다. • Java 다운로드 • 사용자 컴퓨터용 Java 소프트웨어 또는 Java Runtime Environment, Java Runtime, Runtime Environment, Runtime, JRE, Java Virtual Machine, Virtual Machine, Java VM, JVM, VM 또는 Java 다운로드라고도 합니다. • 자바 서블릿(Java Servlet) • 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. • 자바 서블릿은 Java EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다. • 비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 쓰레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다. • 자바 서버 페이지(JavaServer Pages, JSP) • HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다. • 자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 이와 비슷한 구조인 것인 PHP, ASP, ASP.NET 등도 있다. • 아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다. • 클라이언트에서 서비스가 요청되면, JSP의 실행을 요구하고, JSP는 웹 애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다. 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다.
자바 문법 • 1.변수1) 변수란 리터럴을 담는 그릇으로 리터럴 값에 따라 변수의 값이 변한다. ex) int i = 0; // 선언 타입(int) 변수명(i) 대입연산자(=) 리터럴(0) • 2) 변수의 선언과 초기화ex) int i = 0; // 변수 타입 선언과 동시에 초기화int i; // 변수 타입 선언i = 0; // 초기화int i,j,k = 0; // 여러개의 변수를 같은 리터럴 값으로 동시에 초기화int i = 0, j = 1, k = 2; //여러개의 변수 각각에 다른 리터럴 값을 동시에 초기화 • 2. 리터럴이란 변수에 대입되는 상수 값 • 3. 기본 Data Type 1) 논리형 : booolean(true, false) 2) 문자형 : char(16bit 유니코드) 3) 숫자형 : byte(8bit), short(16bit), int(32bit), long(64bit), float(32bit), double(64bit) ※ 참조형 (reference type) String : 문자열 4. 연산자1) 대입연산자 : = 2) 산술연산자 : *, /, +, -, % - "+"연산자 숫자와 문자열의 연산이 가능하다. ex) 10 + 10 = 20, 10 + "10" = 1010 3) 산술대입연산자 : *=, /=, %=, +=, -= 4) 단항연산자 : ++, --, +(부호), +(부호) ※ 전위식(++i)은 모든 연산자중 가장 우선순위가 높다. • 후위식(i++)은 모든 연산자중 가장 우선순위가 낮다. 5) 조건연산자(삼항연산자) : (조건식) ? true일때 값 : false일때 값6) 비교연산자 : >, >=, <, <=, == ,!= 7) 논리연산자 : !(not), &&(and), ||(or) *short circuit(단축평가) • 8) 비트연산자 : ^, &, |, ~ 9) 쉬프트연산자 : <<, >>, >>> ex) int a = 4; // a값은 4int b = a++ + 3; // b = 7, a = 5int c = a + b; // a = 5, b = 7, c = 12int d = ++a - b--; //a = 6, d = -1, b = 6int sum = ++a + b++; // a = 7, sum = 13, b = 7
자바 문법 • 5. 제어 문1) if문(조건 문) - if문- if...else문- if...else if...else문 2) switch문(선택 문) ex) switch(수식) { // 기본 데이터 타입으로 결과 값이 나와야 한다. case 0: // case문에 올 수 있는 값은 정수나 상수뿐이다.실행 문1; break; case 1:실행 문2; break; default:실행 문3; break; } 3) for문(반복 문) ex) for(int i=0(초기값); i<10(조건 식); i++(증감 값)) {실행 문; } 4) while문(반복 문) ex) while(조건 식) { // true값일 동안에는 계속 실행 false값 일때 중지..실행 문; } 5) do...while문(반복 문) ex) do {실행 문; } while(조건 식) // true값일 동안에는 계속 실행 false값 일때 중지..
자바 문법 • 6. 클래스(Class) 1) 정의- 객체(Object)의 속성(상태)과 동작(기능)을 캡슐화해 놓은 것이다. 2) 구조- 클래스명, 맴버변수(객체의 상태저장), 메서드(객체의 동작정의), 생성자(맴버변수를 특정값으로 초기화) ex) class 클래스명 {맴버변수 선언문; ...생성자 () { // 생성자의 이름은 클래스명과 동일하며 리턴타입이 없다.맴버변수를 특정값으로 초기화; }리턴타입 메서드(int i, int j....(매개변수, 매개변수....)) { // 리턴값이 없을 경우 리턴타입은 void로 한다. // 매개변수가 있을 경우에만 사용한다.실행문; ... return i; (리턴문) // 리턴타입이 void일 경우 리턴문을 사용하지 않는다. } }
자바 문법 • 7. 접근자1) public - 어디서든 접근해서 사용할 수 잇는 접근자ex) public String msg = "public"; 2) private - 같은 클래스 내에서만 사용할 수 있는 접근자ex) private String msg = "private"; 3) default - 같은 패키지 내의 클래스 접근가능- 같은 패키지 안에 있는 그 클래스를 상속받은 클래스 접근가능ex) String msg = "default"; // 타입앞의 접근자가 생략되어 있으면 그건 default이다. 4) protected - 자기 자신의 클래스 접근가능- 같은 패키지 내의 클래스 접근가능- 다른 패키지이더라도 그 클래스를 상속받은 클래스 접근가능 • 8. package - 여러 개의 클래스를 묶어놓은 것...패키지 명은 고유해야 한다. • ex) package 패키지 명; //소스코드의 맨 처음에 존재해야 한다.
자바 문법 • 9. import - 다른 패키지의 클래스를 사용할 수 있게 한다. ex) import 패키지 명.클래스; import 패키지 명.*; // 패키지 명에 있는 모든 클래스를 사용할 수 있으나 // 패키지 안의 패키지까지 사용할 수는 없다. - import 하지 않고 사용하는 방법ex) • class PackTest { public static void main(String[] args) { new pdw213.Base().printBase(); // pdw213 패키지의 Base클래스를 new연산자를 사용하여 객체를 만들어// printlnBase() 메소드를 실행하라는 의미다. } }
Collection • java.util. 컬렉션 프레임 워크프로그램을 작성한다는 것은 무엇일까?프로그램은 데이터를 일정한 규칙에 맞춰 가공하는 일련의 과정으로 볼 수 있다. 물론 어떻게 가공하는 지도 중요하겠지만 데이터를 관리하기 위한 방법 역시 프로그램에서 중요한 요소이다. 자바에서는 이런 데이터를 개발자가 쉽게 이용할 수 있도록 다양한 클래스 형태로 제공하는데 이들을 컬렉션 클래스 혹은 just 컬렉션이라 라고 부른다. • 프레임 워크란? ->만들고자 하는 구조물의 기본골격 쓰이는 상황에 따라 다양한 의미를 가지는 용어로 어플리케이션(자바) 프레임워크에서는 물리적인 실체이면서 반제품 성격의 구체적이고 체계화된 API를 제공하는 개념. 즉, 자바 프레임 워크 = 라이브러리(클래스) + 디자인 패턴(가이드라인) • 자바(Collection) framework • 컬렉션 프레임워크는 컬렉션 클래스을 쉽게 이해하고 사용하도록 다형성을 이용해서 컬렉션 객체의 메소드를 형태적으로 동일하게 유지함으로써 사용법을 일관되게 만든 디자인 패턴(가이드라인) 이다. ※ Map 인터페이스는 Collection 인터페이스를 직접 확장한 것은 아니지만 Map도 컬렉션 프레임워크에 포함되는 것으로 간주한다. 따라서 Map도 그냥 컬렉션이라고 부른다.1. 컬렉션 클래스 Data의 관리를 위해서 예전에는 배열 혹은 구조체(C언어)을 사용하였지만 자바에서는 발전된 형태인 배열을 사용하는데 이것이 바로 컬렉션 클래스(Interface Collection와 Map으로 구현된 클래스를 가리킨다.)이다.컬렉션은 배열의 크기를 동적으로 늘릴 수 없다는 단점을 보완해서, 동적으로 필요할 때 메모리를 확장할 수 있게 만들었다. 이러한 저장공간에 여러가지 자료구조적인 기능이 가미된 저장공간으로서 객체의 삽입, 삭제, 수정, 검색의 기능을 가지고 있다.
Interface Collection • Collection 인터페이스로부터 구현된 클래스들은 다음 그림과 같다. 이 인터페이스의 기본적인 기능을 바탕으로 조금씩 확장되어 다양한 기능이 첨가된 클래스들을 제공된다. 보통은 집합적인 데이터를 관리하기 위해서 사용된다. • Set , List , Map , SortedSet , SortedMap , HashSet , TreeSet , ArrayList , LinkedList , Vector , Collections , Arrays , AbstractCollection • Collection 인터페이스를 구현한 클래스에서는 각각의 기능의 기능에 맞게 오버라이딩되어 있기 때문에 이들 메소들의 사용법을 잘 익혀두면 컬렉션 클래스를 보다 쉽게 사용할 수 있다. • Collection 인터페이스의 주요 메서드 • boolean add(E e) 요소를 추가 • void clear() 컬렉션의 모든 요소를 제거boolean isEmpty () 컬렉션에 요소가 없는 경우에 true 를 돌려줍니다. • boolean remove(Object o) 삭제 • int size() 이 컬렉션중의 요소의 수를 돌려줍니다.
Interface Map • Map 인터페이스로 구현된 클래스는 다음 그림과 같다. Collection과 달리 Map은 검색적인 개념을 담고 있는 인터페이스이다. 검색을 위해서 각각의 데이터에 키를 함께 보유하게 된다. Map 인터페이스는 검색적인 저장공간을 지원하기 위해서 사용하는 경우가 많다. • Collection 이나 Map은 객체의 저장공간을 위한 기능적인 측면을 담당한다는 것은 동일하다. 하지만 Collection은 단순히 집합적인 개념의 저장소의 기능을 가지고 있으며, Map은 키를 이용한 검색적인 저장소의 기능을 가지고 있다는 것이 다르다. • 특별한 기능은 없다. 데이터를 삽입하고 필요할 때 끄집어 낼 수 있으며 그것으로 끝이다. 키 없이 단순히 데이터만을 넣어 두고자 할 때는 Collection 계열을 사용하면 된다. 키를 사용해서 데이터를 빠르게 검색하기 위해서는 Map 계열을 사용하면 된다. • HashMap , TreeMap , Hashtable , SortedMap , Collection , Set • Map 인터페이스의 메서드 • void clear()V get(Object key)V put(K key, V value)void putAll(Map<? extends K,? extends V> m)V remove(Object key) • int size()
Exception • 컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그램이 영향을 받는 것. 예를 들면, 연산 도중 넘침에 의해 발생한 끼어들기 등이 이에 해당한다. • ArithmeticException • ArrayIndexOutOfBoundsException • NullPointerException • RuntimeException • IllegalArgumentException • NumberFormatException • ClassNotFoundException • IOException • SQLException • DOMException
Exception 예제 • String[] str = {"서울","경기도","경상도","전라도","강원도","충청도","제주도"}; • try{ • out.write(str[10]); • }catch(Exception e){ } • int k = 100, i = 0; • int j; • try{ • j = k / i; • }catch(Exception e){ } • String str = null; • try{ • if(str.equals("")) out.write("str 은 값이 없습니다."); • }catch(Exception e){ } • String str = "sdf"; • int k; • try{ • k = Integer.parseInt(str); • }catch(Exception e){ }
용어 • JNDI(Java Naming and Directory Interface) • 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다. • connection pool • 데이터베이스 메모리 내에 있는 데이터베이스 연결들로 된 하나의 캐시. 데이터베이스 연결들은 데이터에 대한 요청이 발생하면 재사용되는 것으로, 데이터베이스의 수행 능력을 향상시키기 위해 사용된다. 연결 풀에서 하나의 연결이 생성되어 풀에 배치되면 새로운 연결이 만들어지지 않도록 재사용하지만 만약에 모든 연결이 사용 중에 있으면 새로운 연결이 만들어져 풀에 추가된다. 연결 풀은 사용자가 데이터베이스 연결을 위해 기다리는 시간을 축소시키기도 한다. • JDBC • 자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스를 말한다. • C:\Tomcat 6.0\lib\ojdbc14.jar • * mysql-connector-java-5.1.13-bin.jar • DBCP • C:\Tomcat 6.0\lib • commons-pool-1.5.4.jar • commons-dbcp-1.4.jar • commons-collections-3.2.1.jar [source] Context init = new InitialContext(); DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/xe"); Connection conn = ds.getConnection();
Tomcat 6 설정 • C:\Tomcat 6.0\conf\context.xml • <Context> • <WatchedResource>WEB-INF/web.xml</WatchedResource> • <!-- 추가--> • <ResourceLink name="jdbc/xe" global="jdbc/xe" type="javax.sql.DataSource"/> • </Context> • C:\Tomcat 6.0\conf\serverxml • <GlobalNamingResources> • <!-- 추가--> • <Resource name="jdbc/xe" auth="Container" • type="javax.sql.DataSource" maxActive="10" maxIdle="5" maxWait="10000" • username="scott" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver" • url="jdbc:oracle:thin:@127.0.0.1:1521:XE"/> • </GlobalNamingResources> • WEB-INF/web.xml • <!-- Datasource --> • <resource-ref> • <description>DB Connection</description> • <res-ref-name>jdbc/xe</res-ref-name> • <res-type>javax.sql.DataSource</res-type> • <res-auth>Container</res-auth> • </resource-ref>
TIP • #PCDATA 와 CDATA 의 차이점 • PCDATA는 Parsed Character DATA 의 약자로서 XML 파서(해석기)가 해석하는 문자 데이터를 말합니다.해석을 한다라는 말은 문자 데이터 안에 XML 권고안에 규정되어 있는 문자로 쓰여 졌는지 조사하고, 또한 엔티티 참조가 있다면 엔티티 참조에 해당하는 값으로 치환하는 작업을 의미합니다. • 이와 같이 PCDATA는 XML 파서가 해석하는데 반해 CDATA 섹션내의 문자 데이터는 XML 파서가 해석하지 않고 바로 응용프로그램으로 전달됩니다. • 그래서 문자 데이터로 사용할 수 없는 < 문자나 & 문자도 CDATA 섹션 내에서는 마음대로 사용할 수 있으며 공백문자의 길이도 보존 됩니다.
JSP / JNDI / JDBC / List / Map source sample - 1 • <%@ page language="java" contentType="text/html; charset=EUC-KR" • pageEncoding="EUC-KR"%> • <%@page import="java.sql.*"%> • <%@page import="javax.naming.*"%> • <%@page import="javax.sql.*"%> • <%@page import="java.util.List,java.util.ArrayList,java.util.Map,java.util.HashMap"%> • <%! • public Connection getConnection() throws Exception{ • Connection conn = null; • String curr_dt = ""; • try{ • Context init = new InitialContext(); • Context envCtx = (Context)init.lookup("java:comp/env"); • DataSource ds = (DataSource)envCtx.lookup("jdbc/xe"); • //DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/xe"); • conn = ds.getConnection(); • }catch(Exception e){ • throw e; • } • return conn; • } • %> * 대신 클래스 명을 다 쓰는 습관을 들인다 JNDI 한 줄로 소스를 줄이는 것과 동일하다.
JSP / JNDI / JDBC / List / Map source sample - 2 • <% • Statement stmt = null; • ResultSet rs = null; • Connection conn = null; • StringBuffer sb = new StringBuffer(); • List<Map<String,String>> dataList = null; • Map<String,String> data = null; • try{ • conn = getConnection(); • if(conn != null){ • stmt = conn.createStatement(); • sb.append("select a.empno,"); • sb.append("a.ename,"); • sb.append("a.job,"); • sb.append("a.mgr,"); • sb.append("to_char(a.hiredate,'yyyy-mm-dd') hiredate,"); • sb.append("a.sal,"); • sb.append("a.comm,"); • sb.append("a.deptno "); • sb.append("from emp a"); • rs = stmt.executeQuery(sb.toString()); String 대신 StringBuffer 사용
JSP / JNDI / JDBC / List / Map source sample - 3 • if(rs.next()){ • dataList = new ArrayList<Map<String,String>>(); • do{ • data = new HashMap<String,String>(); • data.put("empno",rs.getString("empno")); • data.put("ename",rs.getString("ename")); • data.put("job",rs.getString("job")); • data.put("mgr",rs.getString("mgr")); • data.put("hiredate",rs.getString("hiredate")); • data.put("sal",rs.getString("sal")); • data.put("comm",rs.getString("comm")); • data.put("deptno",rs.getString("deptno")); • dataList.add(data); • }while(rs.next()); • } • } • }catch(Exception e){ • out.write(e.toString()); • }finally{ • if(stmt != null) stmt.close(); • if(conn != null) conn.close(); • } • %> Statement, Connection 반드시 닫는다.
JSP / JNDI / JDBC / List / Map source sample - 4 • <html> • <head> • <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> • <title>Collection Sample</title> • <style> • td {font-family: "돋움", "맑은 고딕","Malgun Ghothic","Verdana", 돋움체;font-size: 12px; margin:0px 0 0 0px ;line-height: 18px;} • </style> • </head> • <body> • <table width="700" border="0" cellspacing="1" cellpadding="2" bgcolor="#bebebe"> • <tr bgcolor="#ebebeb" align="center"> • <td>empno</td> • <td>ename</td> • <td>job</td> • <td>mgr</td> • <td>hiredate</td> • <td>sal</td> • <td>comm</td> • <td>deptno</td> • </tr> • <% • if(dataList != null && dataList.size() > 0){ • int l = dataList.size(); • for(int k=0;k<l;k++){ • data = dataList.get(k); • %>
JSP / JNDI / JDBC / List / Map source sample – 5 end • <tr bgcolor="#FFFFFF"> • <td><%=data.get("empno") %></td> • <td><%=data.get("ename") %></td> • <td><%=data.get("job") %></td> • <td><%=data.get("mgr") %></td> • <td><%=data.get("hiredate") %></td> • <td><%=data.get("sal") %></td> • <td><%=data.get("comm") %></td> • <td><%=data.get("deptno") %></td> • </tr> • <% • } • } • %> • </table> • </body> • </html>
배열 • 선언 • String[] str = new String[2]; str[0] = “a”; str[1] = “b”; • String[] str = {“a”,”b”}; • int[] k = new int[2]; k[0] = 10; k[1] = 20; • int[] k = {1,2}; • String str = "월,화,수,목,금,토,일"; • String[] arr = str.split(","); • arr[0] 월 ... arr[6] 일 • 2차 배열 • int[][] k = int[2][3]; • for(int h=0;h<2;h++){ • for(int j=0;j<3;j++){ • out.write(k[h][j]); • } • }
과제 • 1. day8 폴더에 jsp를 exam2-개발자이니셜.jsp 생성하시고 작성하십시오. • 화면에 보기와 같이 출력하세요. • 2* 1 = 2 • 2 * 2 = 4 • .. • 9 * 9 = 81 • 2. day8 폴더에 jsp를 exam3-개발자이니셜.jsp 생성하시고 작성하십시오. • 보기 문자열을 수정하시고 출력하세요.(공백제거, 쉼표(,)를 dot(.)변경, 소문자로 변경, $를 @ 로변경, co.kr를 com 으로 변경) • [보기] • fish_73@naver .com • lemon294@naver,com • IGHTSHIFT@NAVER.COM • hana307$naver.com • elsiud@naver.co.kr • 3. day8 폴더에 jsp를 exam4-개발자이니셜.jsp 생성하시고 작성하십시오. • (주의사항 핸드폰 길이, 2차배열 사용, 빈값제거 • String[] split(String regex) • String toLowerCase() • String trim() • [보기] • 홍길동,0101239898|심청,01887682343|장동건,01123218879|이명박,0176549821|,|조영주,01091670928 • [결과] • 홍길동(010-123-9898) • ..