百見不如一打 Servlet& JSP Ecipse & Oracle

Similar documents
혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위

Windows 8에서 BioStar 1 설치하기

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

2장 변수와 프로시저 작성하기

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

본 강의에 들어가기 전

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

View Licenses and Services (customer)

슬라이드 1

Studuino소프트웨어 설치

4S 1차년도 평가 발표자료

PowerPoint Template

PowerPoint 프레젠테이션

JAVA 플랫폼 개발 환경 구축 및 활용

슬라이드 1

ISP and CodeVisionAVR C Compiler.hwp

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

쉽게 풀어쓴 C 프로그래밊

Microsoft Word - src.doc

SBR-100S User Manual

중간고사

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

JDK이클립스

데이터베이스_오라클_부록(최종).indd

에접속하여상단메뉴에서 [DOWNLOADS] 를클릭한다. 다운로드페이지에서 Java 카테고리에있는 [Java SE] 를클릭하고페이지가바뀌면 [Java Platform (JDK)] 를클릭한다. JDK 버전은다운로드하는시점에따라다를수

NTD36HD Manual

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

14-Servlet

vRealize Automation용 VMware Remote Console - VMware

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

JavaGeneralProgramming.PDF

<C4FBC1EEB7CE20C1A4B8AEC7D5BDC3B4D95FC1A4B4E42E687770>

PowerPoint Template

Install stm32cubemx and st-link utility

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

뇌를 자극하는 JSP & Servlet 슬라이드

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Microsoft Word - Armjtag_문서1.doc

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

슬라이드 1

윈도우시스템프로그래밍

PowerPoint Presentation

J2EE Concepts

아래 항목은 최신( ) 이미지를 모두 제대로 설치하였을 때를 가정한다

tiawPlot ac 사용방법

슬라이드 1

server name>/arcgis/rest/services server name>/<web adaptor name>/rest/services ArcGIS 10.1 for Server System requirements - 지

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

Microsoft Word - PLC제어응용-2차시.doc

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

BEA_WebLogic.hwp

Endpoint Protector - Active Directory Deployment Guide

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 제목 없음

Data Provisioning Services for mobile clients

gcloud storage 사용자가이드 1 / 17

Microsoft PowerPoint - chap01-C언어개요.pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Cubase AI installation guide

MF Driver Installation Guide

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Spring Boot

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

MF5900 Series MF Driver Installation Guide

윈도우시스템프로그래밍

게시판 스팸 실시간 차단 시스템

Windows Server 2012

1

TCP/IP Model

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

SIGIL 완벽입문

System Recovery 사용자 매뉴얼

Microsoft PowerPoint - e pptx

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Oracle VM VirtualBox 설치 VirtualBox에서 가상머신 설치 가상머신에 Ubuntu 설치

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Microsoft PowerPoint 웹 연동 기술.pptx

OnTuneV3_Manager_Install

뇌를 자극하는 JSP & Servlet 슬라이드

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Chapter 1

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

쉽게 풀어쓴 C 프로그래밍

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

JDBC 소개및설치 Database Laboratory

PowerPoint Presentation

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

Transcription:

百見不如一打 Servlet& JSP Ecipse & Oracle

예제소스및퀴즈해답등의자료다운로드 http://www.roadbook.co.kr/126 질의응답사이트 http://roadbook.zerois.net 특별부록 ( 온라인쇼핑몰 ) 다운로드 백견불여일타 JSP&Servlet : Ecipse&Oracle http://www.roadbook.co.kr/126 지은이성윤정 1판 1쇄발행일 2014년 7월 28일펴낸이임성춘펴낸곳로드북편집장미경디자인이호용 ( 표지 ), 박진희 ( 본문 ) 주소서울시관악구신림로29길 8 101-901호출판등록제 2011-21호 (2011년 3월 22일 ) 전화 02)874-7883 팩스 02)6280-6901 정가 27,000원 ISBN 978-89-97924-10-3 93000 성윤정 & 로드북, 2014 책내용에대한의견이나문의는출판사이메일이나블로그로연락해주십시오. 잘못만들어진책은서점에서교환해드립니다. 이메일 chief@roadbook.co.kr 블로그 www.roadbook.co.kr

지은이의글 백견불여일타! 이책은여러분들이스스로확장해가면서일부로에러도내보고또덧붙여보면서 실습을해보면좋겠습니다. 눈으로보아서는절대아무것도얻을수없는책입니다. 처음프로그래밍을시작할때필자가늘학생들에게강조하는 주저함없이도전하라 라는필자의일관된철학이들어가있는것같아참마음에드는말입니다. 누구나고수가되는길의첫발걸음의설렘과도전은깊은 사유 가아니라무심코따라한간단한코드에서그리고컴파일되어나오는시시한 (?) 결과화면에서시작됩니다. 이책은웹서비스개발자가되고자하는입문자를대상으로하고있습니다. 필자가 실습 에포커스를두고이책을설계한이유입니다. 입문자는손이닳도록코딩을반복해봐야합니다. 과정에익숙해지면그원리가보이고원리가보이면전체적인그림이보이기때문입니다. 이책은 원리와개념 을말로써알려주지는않습니다. 차례만보아도실습하고결과를바로확인할수있는 [ 직접해봅시다 ] 코너만 200개가넘고각장말미에나오는 [ 도전해보세요 ] 과제만보아도이책이얼마나 실습 을강조하고있는지금방알아챌수있을것입니다. 필자는사실 1980년대학번으로 IT 기술의초창기에입문해서지금까지현업과강의현장을누벼왔습니다. 대학시절에ㅇ는파스칼, 포트란, 코볼을배웠고회사에서이들을활용한개발을했습니다. 시간이지나면서웹서비스가등장하자콘솔화면에 그리고단순히따라만해서도좋은성과를얻을수없습니다. 고쳐보고확장해보고다른기능을붙여보면서응용력을키워보시기바랍니다. 그리고자바개발자라고해서 HTML이나 CSS, 자바스크립트등을대강만알면안됩니다. 이책에서는거의모든예제에클라이언트에사용되는대표적인기술들이들어가있습니다. 자세한설명은없지만역시레이아웃이나자바스크립트기능도변경해보면서클라이언트기술에도익숙해지는계기가되었으면좋겠습니다. 그리고 [ 도전해보세요 ] 코너는정말여러분들이정답을보지않고몇일이걸리더라도꼭직접풀어보라고권하고싶습니다. 정답을찾아는과정에서여러분이배울수있는게너무많기때문입니다. 자바로밥먹고살려면이책만으로는절대부족합니다. 이책은정말 JSP& 서블릿을배우는데진입장벽을낮춰주는책이지이책을학습하고바로현업개발자로나설수있는책이절대아닙니다. 이책으로드넓은자바웹프로그래밍의세계에서진정한고수가되는날을만날수있기를충심으로기원합니다. 마지막으로집필을마치고마지막정리하는과정에서갑자기아프게된바람에고생을많이하게만든임성춘편집장에게진심으로감사를드립니다. 서의개발영역은좁아지고이클립스와같은복잡해보이지만상당히편한개발툴이 등장하게되었습니다. 더불어학습방법도예전과는많이달라야한다는생각을하게 되었습니다. 복잡한웹서비스개발을배워야하는데, 콘솔화면에서문자열찍고있 2014 년 7 월 성윤정 는것을알려주거나개발방식은빠르게변해가는데, 과거의패턴을그대로학생들에게가르치는것은개발현장에나갈그들에게이중고를주는것과다름없다고생각했습니다. 그래서이책을집필할때크게두가지에주안점을두었습니다. 현업에서활용하는개발환경과개발방식입니다. 현업에서활용하는개발방식은이클립스와오라클등이며개발방식은모델과뷰를분리해서개발하는방식입니다. 처음부터끝까지책을따라학습을마치면이러한개발환경에상당히익숙해질수있을것입니다.

편집자이자베타테스터의글 1990년대에 IT 편집자로입문하고제일처음만들었던책이 Servlet 책이었습니다. 번역서였고국내에서첫번째책이었던것으로기억합니다. 바로 1년정도뒤에 JSP 책을만들고 EJB 책을만들었습니다. 국내서였죠. 그로부터십수년이흘러다시한번 JSP& 서블릿책을기획해서출간을앞두고있습니다. 어쩌다가 10년도훌쩍넘은후에다시같은주제의책을만들고있는지죽을때까지 IT 편집자로살아야할운명같습니다. 처음서블릿책을접했을때는아키텍처자체마저생소했고영어로된용어를어떻게번역해야할지정말어려웠습니다. 그리고국내에서도이제막도입했던시기였기때문에게시판예제하나없었고단순히 Servlet 클래스들을분석하고어떤역할을하는지에관한책이었습니다. 물론 MVC니하는패턴이야기는전혀없었죠. 하지만, 지금은이러한패턴을기본으로지키고있고당연시하고있습니다. 시간이지날수록서블릿은 JSP를낳고또서블릿과 JSP는스트럿츠니스프링이니하는수많은프레임워크를낳게되는데, 이걸보면스스로진화하는기술을보고있는듯한이상한느낌마저듭니다. 처음엔이클립스도엉뚱한버전을설치해서당황한적도있었습니다. 서블릿컨테이너에대한개념이잡히질않아수많은문서를뒤적이며겨우이해를할수있었는데, 이부분은저자와상의하여초고에서약간의수정을함으로써깔끔하게해결되었습니다. 다른 JSP 페이지로포워딩을해야하는데, JSP 파일이름을잘못입력해서계속해서에러가나황당한적도있었고임포트가안되었거나오라클에서커밋을해주지않아한창을헤맸던적도있었습니다. 대부분아주사소한오타때문에에러가많이난다는사실에놀라지않을수없었습니다. 점차에러에익숙해지기시작했고근원지를찾아고쳐내고자하는도전의식까지생기더군요. 이런게프로그래밍의재미가아닌가싶었습니다. 마지막에모델2 로해보는게시판예제까지테스트를하고나서이글을쓰고있습니다. 물론지금도어떤기능상의버그가있어저자에게수정의뢰를해놓았는데, 깔끔하게처리하고책을내놓도록기다리고있습니다. 집필도중에건강이많이안좋았지만최선을다해편집자의엉뚱한요청에도잘대해주신성윤정저자에게진심으로감사를드립니다. 이책을집필하신성윤정강사님은오래전부터 IT 책을다수집필하셨습니다. 처 음로드북에이책을제안하였을때는 개념과원리 를중시하는로드북의출간철학 에는맞지않아많은고민을하였습니다. 하지만, 곰곰이생각해보면너무나큰장점 2014 년 7 월 편집자 & 베타테스터임성춘 이있었습니다. 초보자들이가장쉽게접근할수있도록직접해보면서배울수있다는점이었습니다. 그래서 백견불여일타 라는제목을붙이게되었습니다. 그리고프로그래머가아닌편집자가일일이테스트를해보았습니다. 처음엔한글워드에있는소스를복사해서붙여다가테스트를했습니다 ( 시간상일일이타이핑은못했습니다 ). 그리고책이디자인된뒤에도마지막교정시에 PDF 상태에서도역시소스를복사해서일일이테스트를하였습니다. 완전소스에는반영이되어있어도책에는반영이안되는경우도있고편집과정에서실수가있을수있어독자를괴롭힐수가있기때문입니다.

이책을제대로보는방법 1. 이론적인내용은최대한앞부분에핵심만간추려설명 JSP& 서블릿의역사나단순한 API 등의나열은과감히생략하였습니다. 이론적인내용을최 대한간결하게정리하여실습을바로해볼수있게하였습니다. 5. [ 도전해보세요 ] 코너는직접풀어봐야이코너는반드시직접풀어보기를바랍니다. 답안소스를제공하고있지만, 여러분이같은 실행결과가나올때까지끝까지도전하여결과를내고답안과비교를하면서어떤부분이 다른지를꼭파악해보시기바랍니다. 2. 예제소스를보는방법 이클립스에서자동으로생성되는소스외에별도로입력해야할소스는별색으로처리하였 습니다. 일부자동으로입력된소스가변경된부분이있는부분이있지만, 실행상에는문제 가없습니다. 도전해보세요 문제의답은로드북홈페이지 (http://roadbook.co.kr/126) 에서확인할수있습니다. 회원가입페이지작성하기 3. [ 직접해보세요 ] 코너는반드시직접해보아야이코너에서는실습뿐만아니라개발환경설정, DB 설정등여러환경설정까지함께들어 목표 <form> 태그를사용하여입력폼의대표할만한사용예인회원가입페이지를작성하고여기서입력받은값을서블릿에받아처리합니다. 난이도상조건표시된내용은회원가입을위해반드시입력해야하는항목입니다. 자바스크립트로유효성을체크하세요. 가있기때문에처음부터끝까지직접해보아야합니다. [ 직접해보세요 ] get과 post 전송방식의폼과서블릿테스트 1. 웹프로젝트 (web-study-02) 에서마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [New JSP File] 를선택합니다. [New JSP File] 창이나타나면파일이름을입력합니다. 이책에서는파일이름을 "04_ method" 로합니다. 파일이름만입력하면확장자는자동으로.jsp로붙습니다. get 방식전송버튼과 post 방식전송버튼을갖는입력폼을작성합니다. 1 <%@ page language="java" contenttype="text/html; charset=utf-8" 2 pageencoding="utf-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="utf-8"> 7 <title> 서블릿 </title> 8 </head> 9 <body> 10 <form method="get" action="methodservlet"> 11 <input type="submit" value="get 방식으로호출하기 " > 12 </form> 13 <br><br> 14 <form method="post" action="methodservlet"> 15 <input type="submit" value="post 방식으로호출하기 " > 16 </form> 17 </body> 18 </html> 6. 궁금하면여기물어보세요로드북전용 Q&A 게시판입니다. 질문앞머리에 [JSP] 만붙여주세요. 저자분께바로질문 의뢰가가고빠른답변을받아볼수있습니다. 4. [ 퀴즈로정리합시다 ] 로이론적인내용을정리각장에서배운내용을객관식과서술형식을섞어테스트하는과정입니다. 무슨지식을습 득하든지연습문제를풀어봐야그지식에더익숙해질수있습니다. 7. 특별부록제공이책은 온라인쇼핑몰개발 을특별부록으로예제소스와함께해설을 PDF 형태로제공합 니다. 우선은한번따라해보면서감을익혀보고자신만의쇼핑몰을만들어보시기바랍니다. 퀴즈로정리합시다 문제의답은로드북홈페이지 (http://roadbook.co.kr/126) 에서확인할수있습니다. 1. JSP 가무엇의약어인지표시하고정의하시오. 2. 사용자가 JSP를요청하면이를서블릿컨테이너에서어떻게처리하는지순서대로각단계를상세히기술하시오.

목차 지은이의글편집자이자베타테스터의글이책을제대로보는방법 1장. 서블릿과 JSP 개요 1.1 웹프로그래밍이란?... 20 1.2 웹애플리케이션개발환경구축하기 프로그램설치... 23 JDK 설치하기... 24 톰캣설치하기... 28 이클립스설치하기... 31 1.3 이클립스로첫웹애플리케이션작성하기... 33 1.4 서블릿과 JSP의기초개념... 47 서블릿... 47 JSP... 56 [ 직접해보세요 ] JDK, 톰캣, 이클립스설치하기 [ 도전해보세요 ] 자신의이름을출력하는 JSP 작성하기 2장. 서블릿의기초 2.1 서블릿프로그램을만들어보자... 64 서블릿의동작원리... 80 서블릿의라이프사이클... 81 2.2 서블릿의한글처리와데이터통신... 84 서블릿에서응답시한글처리... 84 get 방식과 post 방식... 86 쿼리스트링이란?... 91 요청객체 (request) 와파라미터관련메소드 (getparameter)... 94 자바스크립트로폼에입력된정보가올바른지판단하기... 98 서블릿에서요청시한글처리... 102 2.3 기타다양한입력양식... 110 암호를입력받기위한암호입력상자... 110 여러줄입력할수있는글상자와배타적선택을하는라디오버튼... 113 체크박스와 request의 getparametervalues( )... 116 목록상자... 118 [ 직접해보세요 ] Dynamic Web Project 만들고서블릿만들기 [ 직접해보세요 ] 서블릿의라이프사이클테스트 [ 직접해보세요 ] 한글메시지를출력하는서블릿만들기 [ 직접해보세요 ] get과 post 전송방식의폼과서블릿테스트 [ 직접해보세요 ] 텍스트박스에입력된값얻어오기 [ 직접해보세요 ] 유효성체크하기 [ 직접해보세요 ] 입력폼에서한글읽어오기 [ 직접해보세요 ] POST 방식으로한글읽기 [ 직접해보세요 ] 로그인폼만들기 [ 직접해보세요 ] 배타적선택하기 [ 직접해보세요 ] 관심분야다중선택하기 [ 직접해보세요 ] 작업과관심분야선택하기 [ 도전해보세요 ] 회원가입작성하기 3장.JSP 기본다루기 3.1 JSP로시작하는웹프로그래밍... 130 JSP와 HTML... 135 서블릿과 JSP의차이... 138 3.2 JSP 기본태그... 145 JSP 스크립트요소... 146 주석문... 156 지시자... 159 include 지시자... 169 [ 직접해보세요 ] Dynamic Web Project와컨텍스트패스 [ 직접해보세요 ] 두수의합을출력하는 JSP [ 직접해보세요 ] 변수값을 1 증가하여출력하는 JSP [ 직접해보세요 ] 선언문에변수선언과메소드정의하기 [ 직접해보세요 ] 선언문에선언한변수와스크립트릿변수의성격파악하기 [ 직접해보세요 ] 표현식의사용예 [ 직접해보세요 ] HTML 주석문과 JSP 주석문의사용 [ 직접해보세요 ] 오늘날짜출력하기 [ 직접해보세요 ] 에러발생페이지와에러페이지만들기 [ 직접해보세요 ] include 지시자사용법알아보기 [ 도전해보세요 ] 두수를더하는함수를만들고사용하기

4장. 내장객체와액션태그 4.1 JSP 내장객체... 180 out 내장객체... 182 request 내장객체... 183 response 내장객체... 189 application 내장객체... 201 내장객체의영역... 204 4.2 액션태그... 212 <jsp:forward> 액션태그... 214 <jsp:param> 액션태그... 216 <jsp:include> 액션태그... 221 [ 직접해보세요 ] 브라우저와웹서버의정보를알아내는 JSP [ 직접해보세요 ] 설문조사폼만들기 [ 직접해보세요 ] 페이지강제이동하기 [ 직접해보세요 ] 로그인인증처리하기 [ 직접해보세요 ] 성년만입장가능한사이트만들기 [ 직접해보세요 ] application의실제경로알아보기 [ 직접해보세요 ] 내장객체영역테스트 [ 직접해보세요 ] 페이지이동 [ 직접해보세요 ] 조건에따른페이지이동 [ 직접해보세요 ] <jsp:include> 액션태그를활용한모듈화 [ 도전해보세요 ] 웹사이트이동하기 5장. 쿠키와세션 5.1 쿠키 (cookie)... 234 5.2 세션 (session)... 242 세션사용하기... 244 세션관련메소드... 251 세션제거하기... 255 세션을이용한로그인처리... 259 [ 직접해보세요 ] 쿠키를생성하는 JSP [ 직접해보세요 ] 생성된모든쿠키를얻어와출력하기 [ 직접해보세요 ] id 쿠키삭제하기 [ 직접해보세요 ] 세션에값설정하기 [ 직접해보세요 ] 세션에설정한모든값얻어오기 [ 직접해보세요 ] 세션객체의메소드사용하기 [ 직접해보세요 ] 세션에저장된특정객체삭제하기 [ 직접해보세요 ] 설정된모든세션제거하기 [ 직접해보세요 ] 회원인증을위해아이디와비밀번호를입력받는폼 [ 직접해보세요 ] 회원인증처리하기 [ 직접해보세요 ] 로그인인증받은회원에게제공되는 JSP [ 직접해보세요 ] 인증된사용자의인증을무효화하는 JSP [ 도전해보세요 ] 로그인처리하기 6장. 자바빈과액션태그 6.1 자바빈과의첫데이트... 272 6.2 자바빈클래스만들기... 276 6.3 자바빈관련액션태그... 286 자바빈객체를생성하는 <jsp:usebean> 액션태그... 287 자바빈에서정보를얻어오는 <jsp:getproperty> 액션태그... 292 자바빈에정보를새롭게설정하는 <jsp:setproperty> 액션태그... 294 6.4 자바빈으로회원정보처리하기... 297 [ 직접해보세요 ] 첫자바빈만들기 [ 직접해보세요 ] 자바빈객체생성하기 (usebean 액션태그 ) [ 직접해보세요 ] 자바빈프로퍼티값얻기와변경하기 [ 직접해보세요 ] 폼양식에입력한내용을자바빈으로처리하기 [ 도전해보세요 ] 게시글정보를위한자바빈작성하기 [ 도전해보세요 ] 상품정보를위한자바빈작성하기 [ 도전해보세요 ] 영화정보를위한자바빈작성하기 7장. 표현언어와 JSTL 7.1 표현언어로표현단순화하기... 308 7.2 표현언어로요청파라미터처리하기... 314 7.3 표현언어로내장객체접근하기... 324

7.4 JSTL... 339 JSTL 라이브러리를사용하는이유... 339 JSTL 라이브러리... 340 7.5 JSTL core 태그... 347 <c:set> 과 <c:remove> 태그... 348 흐름을제어하는태그... 355 <c:import>, <c:redirect>, <c:url> 태그사용하기... 371 <c:out> 과 <c:catch> 태그사용하기... 375 7.6 JSTL fmt 태그... 378 숫자날짜형식지정관련태그... 379 로케일지정을위한태그... 388 [ 직접해보세요 ] 표현언어로간단한메시지를출력하는 JSP 페이지 [ 직접해보세요 ] 표현언어에서사용가능한데이터 [ 직접해보세요 ] 표현언어의연산자사용하기 [ 직접해보세요 ] 로그인폼만들기 [ 직접해보세요 ] EL로형변환ㅎ없이두수를입력받아합을구하기 [ 직접해보세요 ] 서블릿클래스에서두수에대한합을구해 JSP에서출력하기 [ 직접해보세요 ] 표현언어의내장객체를명시적으로사용하기 [ 직접해보세요 ] 자바빈클래스만들기 [ 직접해보세요 ] 표현언어로자바빈객체속성값얻어오기 [ 직접해보세요 ] JSTL 다운로드받아설치하기 [ 직접해보세요 ] <c:out 태그로간단한메시지를출력하는 JSP 페이지 [ 직접해보세요 ] <c:set> 태그로변수에값저장하기 [ 직접해보세요 ] 색상선택하기 [ 직접해보세요 ] 과일선택하기 [ 직접해보세요 ] 아이디중복체크를위한 JSP [ 직접해보세요 ] 영화제목을저장한배열을 <c:foreach> 태그의 varstatus 속성을사용하여인덱스와반복횟수출력하기 [ 직접해보세요 ] first, last 프로퍼티사용하기 [ 직접해보세요 ] begin, end 속성사용하기 [ 직접해보세요 ] 관심분야다중선택하기 [ 직접해보세요 ] <c:import> 사용하기 [ 직접해보세요 ] <c:url> 사용하기 [ 직접해보세요 ] <c:redirect> 사용하기 [ 직접해보세요 ] 출력과예외처리를지원하는태그사용하기 [ 직접해보세요 ] 날짜형식지정하기 [ 직접해보세요 ] 타임존설정하기 [ 직접해보세요 ] 로케일지정하기 [ 직접해보세요 ] 입력폼에서한글깨지지않고읽어오기 [ 직접해보세요 ] 요청파라미터의캐릭터인코딩지정하기 [ 도전해보세요 ] ( 조건에따라분기하는 ) 로그인페이지작성하기 8장. 데이터베이스와 JDBC 8.1 데이터베이스개요및오라클 DB 환경구축하기... 00 오라클다운로드와설치... 401 8.2 SQL... 410 테이블을생성하는 create table... 411 테이블에레코드를추가하는 insert... 413 데이터를조회하는 select... 415 저장된데이터를변경하는 update... 416 테이블에저장된레코드를삭제하는 delete... 416 8.3 JDBC를이용한데이터조작하기... 418 데이터베이스와연결하기... 420 SELECT문과 Statement, ResultSet 클래스... 424 데이터저장과 PreparedStatement 클래스... 432 [ 직접해보세요 ] 오라클다운로드 (Oracle Database 11g Express Edition) 와설치 [ 직접해보세요 ] 오라클데이터베이스관리프로그램접속하기 [ 직접해보세요 ] 사용자생성하기 [ 직접해보세요 ] 회원테이블생성하기 [ 직접해보세요 ] JDBC 드라이버연결하기 [ 직접해보세요 ] member 테이블에데이터추가하기 [ 도전해보세요 ] 사원정보관리 [ 도전해보세요 ] 상품정보관리 9장. 데이터베이스를이용한회원관리시스템구축하기 9.1 데이터베이스커넥션풀... 450 9.2 데이터베이스를연동한회원관리시스템... 458 사용자관리시스템의전체구조... 460 회원관리 member 테이블과연동하는 DAO... 463 로그인인증처리... 473

회원가입을위한프로그래밍... 489 로그아웃처리를위한프로그래밍... 505 회원정보수정을위한프로그래밍... 507 [ 직접해보세요 ] DBCP 설치하기 [ 직접해보세요 ] 이클립스에서회원정보를저장하는 VO 클래스만들기 [ 직접해보세요 ] 이클립스에서회원테이블을액세스하는 DAO 클래스만들기 [ 직접해보세요 ] 커넥션을얻어오는메소드 [ 직접해보세요 ] 회원인증을위해아이디와비밀번호를입력받는폼 [ 직접해보세요 ] 회원관리웹애플리케이션을위한자바스크립트파일 [ 직접해보세요 ] 로그인입력폼을위한서블릿클래스만들기 [ 직접해보세요 ] 홈 ( 프론트 ) 페이지 [ 직접해보세요 ] 회원인증을위한메소드추가하기 [ 직접해보세요 ] 회원인증을위한서블릿클래스만들기 [ 직접해보세요 ] 회원인증된사용자에게제공되는 JSP 페이지 [ 직접해보세요 ] 회원정보입력폼을위한서블릿클래스만들기 [ 직접해보세요 ] 회원가입을위한회원정보를입력받는폼 [ 직접해보세요 ] 중복체크페이지를새로운창으로띄우기위한자바스크립트함수 [ 직접해보세요 ] 아이디중복체크를위한메소드추가하기 [ 직접해보세요 ] 아이디중복체크를위한서블릿클래스만들기 [ 직접해보세요 ] 아이디중복체크를위한 JSP 페이지 [ 직접해보세요 ] 아이디중복체크완료처리를위한자바스크립트함수 [ 직접해보세요 ] 회원정보의유효성을체크하기위한자바스크립트함수 [ 직접해보세요 ] 회원정보를 DB에추가하기위한메소드추가하기 [ 직접해보세요 ] 회원정보를데이터베이스에추가하는서블릿 [ 직접해보세요 ] 인증된사용자의인증을무효화하는서블릿 [ 직접해보세요 ] 회원정보수정을위한폼으로이동하는처리를하는서블릿 [ 직접해보세요 ] 인증된사용자에게제공되는회원정보수정페이지 [ 직접해보세요 ] 회원정보를변경하기위한메소드추가하기 [ 직접해보세요 ] 회원정보수정처리서블릿의 dopost( ) 메소드에데이터베이스처리를위한코드추가 [ 도전해보세요 ] 사원관리프로그램만들기 쇼핑몰관리자페이지개요... 540 데이터베이스구축하기... 544 프로젝트환경설정... 548 상품정보를저장하기위한 VO 클래스정의... 549 데이터베이스처리를위한 DAO 클래스... 552 화면디자인을위한스타일시트정의하기... 554 상품등록하기... 564 상품수정하기... 575 상품삭제하기... 586 [ 직접해보세요 ] 파일전송폼만들기 [ 직접해보세요 ] 파일업로드를위한서블릿 [ 직접해보세요 ] 한꺼번에여러파일을업로드하기위한폼 [ 직접해보세요 ] 한꺼번에여러파일을업로드하기위한서블릿 [ 직접해보세요 ] 이클립스에서상품정보를저장하는 VO 클래스작성 [ 직접해보세요 ] Connection 객체얻기와사용이끝난리소스해제를위한클래스 [ 직접해보세요 ] 스타일시트파일 [ 직접해보세요 ] ProductDAO 클래스정의하기 [ 직접해보세요 ] 상품리스트를위한서블릿 [ 직접해보세요 ] 상품리스트를위한 JSP 페이지 [ 직접해보세요 ] 상품등록을위한서블릿 [ 직접해보세요 ] 상품등록화면을위한 JSP [ 직접해보세요 ] ProductDAO 클래스에상품등록을위한메소드추가하기 [ 직접해보세요 ] 폼입력정보의유효성체크를위한자바스크립트 [ 직접해보세요 ] ProductDAO 클래스에상품등록을위한메소드추가하기 [ 직접해보세요 ] ProductDAO 클래스에상품정보수정을위한메소드추가하기 [ 직접해보세요 ] 상품수정을위한서블릿 [ 직접해보세요 ] 상품삭제를위한서블릿 [ 직접해보세요 ] 상품삭제화면을위한 JSP 페이지 [ 직접해보세요 ] ProductDAO 클래스에상품삭제를위한메소드추가하기 [ 도전해보세요 ] 영화관리프로그램 10장. 파일업로드 10.1 파일업로드에사용되는 COS 라이브러리... 524 10.2 쇼핑몰관리자애플리케이션작성-cos.jar 파일을이용한이미지업로드... 540 11장.MVC 패턴 ( 모델2) 을사용한게시판 11.1 모델2 기반의 MVC 패턴개요... 602 MVC 패턴의컨트롤러 : 서블릿... 604 MVC 패턴의뷰 : JSP... 605 MVC 패턴의모델... 605

11.2 게시판 - 모델 2 기반의간단한 MVC 패턴구현하기... 606 [ 직접해보세요 ] 이클립스에서게시글정보를저장하는 VO 클래스만들기 [ 직접해보세요 ] Connection 객체얻기와사용이끝난리소스해제를위한클래스만들기 [ 직접해보세요 ] 게시글테이블을액세스하는 DAO 클래스만들기 [ 직접해보세요 ] 폼입력정보의유효성을체크하는자바스크립트 [ 직접해보세요 ] 화면레이아웃을위한스타일시트 [ 직접해보세요 ] MVC 패턴의 Controller 역할을하는서블릿만들기 [ 직접해보세요 ] 모델을동일한방식으로실행하기위한인터페이스 [ 직접해보세요 ] 커맨드 (command) 패턴으로작업처리를위한명령처리클래스 [ 직접해보세요 ] BoardServlet 클래스에코드추가하기 [ 직접해보세요 ] 게시글리스트를위한액션클래스 [ 직접해보세요 ] 게시글리스트를위한 JSP 페이지 [ 직접해보세요 ] 커맨드패턴으로작업처리를위한명령처리클래스 ActionFactory 수정 [ 직접해보세요 ] 게시글등록을위한폼으로이동하게하는액션클래스 [ 직접해보세요 ] 게시글등록화면을위한 JSP 페이지 [ 직접해보세요 ] 게시글을데이터베이스에추가하기위한액션클래스 [ 직접해보세요 ] 게시글상세보기페이로이동하게하는액션클래스 [ 직접해보세요 ] 게시글상세보기를위한 JSP 페이지 [ 직접해보세요 ] 비밀번호입력화면으로이동하게하는액션클래스 [ 직접해보세요 ] 비밀번호입력화면을위한 JSP 페이지 [ 직접해보세요 ] 게시글의비밀번호확인을위한액션클래스 [ 직접해보세요 ] 게시글의비밀번호가일치할경우처리를위한 JSP 페이지 [ 직접해보세요 ] 게시글수정화면으로이동하게하는액션클래스 [ 직접해보세요 ] 게시글수정화면을위한 JSP 페이지 [ 직접해보세요 ] 게시글을데이터베이스에수정하기위한액션클래스 [ 직접해보세요 ] 게시글삭제를위한액션클래스 [ 도전해보세요 ] 사원관리프로그램

1 장 서블릿과 JSP 개요 이장을시작하기전에 만약여러분이 자바웹애플리케이션개발환경 ( 톰캣 +JDK+ 이클립스 ) 을구축할수있거나, JSP와서블릿으로 HelloWorld 수준의웹애플리케이션을만들어실행할수있다면, 다음장으로넘어가도좋습니다. 자바문법에대해아직아리송하고잘모르고있다면, 우선은자바기본서를한번정도는정독하며학습한후에배우기를권장합니다. 이책은가능하면자바의기본문법을알고있다는전제하에설명을하고있기때문입니다. 물론좀어려운기초문법은간단히설명하고있으니겁먹지마세요. 자, 이제시작입니다. 코드를직접입력하고실행해보고변경해보면서그의미를파악하며이책의끝까지완주할수있기를바랍니다. 화이팅!

웹프로그래밍이란? 인터넷은컴퓨터들이연결된거대한네트워크구조입니다. 예를들어인터넷쇼핑을하기위해브라우저에사이트주소를입력하면이는해당사이트에있는웹페이지를내가사용하는브라우저에보내달라고요청하는것을의미합니다. 이렇게요청을받아웹페이지를찾아서보내주는일을하는컴퓨터나프로그램을웹서버라고하고요청된페이지를받아보는브라우저나컴퓨터를클라이언트라고합니다. 아래그림은인터넷쇼핑사이트의동작원리를나타내고있습니다. 되었다가보여주는것입니다. 이렇듯다양한정보를데이터베이스에서얻거나저장하기위해서등장한언어가 PHP, ASP, 서블릿 /JSP 입니다. 인터넷을통해카멜레온처럼변화무쌍한정보를얻거나쇼핑을할수있는이유는웹애플리케이션언어 (PHP, ASP, 서블릿 /JSP) 로개발한웹애플리케이션, 예를들면네이버 Naver나다음Daum과같은포털사이트, GMarket 이나티켓몬스터와같은온라인쇼핑몰이웹서버에구축되어있기때문입니다. 참고 ➊ 사이트주소를입력한다. 브라우저 ➋ 웹페이지를요청한다. 웹서버 웹애플리케이션이란? 웹애플리케이션은웹 ( 인터넷 ) 을기반으로실행되는애플리케이션 ( 프로그램 ) 을말합니다. 즉, 웹브라우저로접근하여사용되는애플리케이션을말합니다. 이책에서학습하게되는웹프로그래밍 (Web Programming) 이바로웹애플리케이션을제작하는과정을뜻합니다. 기억하세요. 이책에서의미하는웹프로그래밍이란 웹애플리케이션을제작 하는과정입니다. ➌ 해당웹페이지를찾는다. 이책을읽는독자의학습목표는서블릿 /JSP 를사용하여웹애플리케이션을개발하는것입니다. 여러분이쇼핑몰을웹애플리케이션으로구축하는것을목표로한다 면사용자가원하는상품을검색한후구입을하는과정을모두서블릿 /JSP 를사용하 ➍ 찾은웹페이지를보낸다. 여제작해야합니다. [ 클라이언트측 ( 사용자 )] [ 서버측 ] 브라우저를통해서각종정보를제공해주는웹페이지는 HTML을이용하여웹프로그래밍을한것입니다. 하지만 HTML만으로는시시각각변경되는새로운정보를제공해주지못합니다. 왜냐하면 HTML은같은내용만표시해주는정적인페이지이기때문입니다. 우리가사용하는인터넷은바로바로새로운내용을제공해주어야하기때문에 HTML만가지고웹프로그래밍을하는데문제가있습니다. 그래서등장하게된것이동적인페이지입니다. 동적인페이지에서새로운정보를제공해주기위해서는방대한정보를관리할데이터베이스가필요합니다. 예를들어게시판에게재되는글은데이터베이스에저장 서버는일반적으로사용자 ( 클라이언트 ) 의요청이들어오면이에대한처리를한결과페이지를전송하는웹서버Web Server와실질적으로요청한페이지의로직이나데이터베이스와의연동을처리할수있는비즈니스로직이구현되어야하는웹애플리케이션서버 (Web Application Server : WAS) 로이루어져있습니다. 대표적인 WAS로는 BEA사의웹로직WebLogic, IBM의웹스피어 WebSphere, SUN사의 iplanet, Oracle 9iAS, 티맥스의제우스 Jeus, 우리책에서사용하는톰캣 Tomcat 등이있습니다. 여기에서톰캣은웹서버기능이내장되어있어별도로웹서버를설치하지않고 WAS 역할까지합니다. WAS라는서버프로그램이웹애플리케이션을어떻게동작시키는지그원리를이해하기위해 회원가입을위한프로그램 ( 애플리케이션 ) 이어떤절차를거쳐서실행되는지를살펴보겠습니다. 회원가입을하기위해서는회원가입페이지에서이름, 20 1 장서블릿과 JSP 개요 21

아이디, 별명, 비밀번호등을입력한후 < 확인 > 버튼을클릭할것입니다. 그러면브라 우저는입력된회원정보를서버로전송하고서버에서는이정보를 WAS 를통해데 이터베이스에저장합니다. 앞에서도언급하였지만톰캣은웹서버를내장하고있다고했습니다. 위의그림에 서는웹서버와톰캣이분리되어있지만사실두기능을함께수행하고있는것입니다. 지금까지웹프로그래밍의전체적인그림을살펴보았다면, 다음절에서는구체적 ➊ 회원가입페이지에서회원정보를입력한후 < 확인 > 버튼을클릭 웹서버 ➋ 입력된회원정보전송 ➎ 회원가입처리결과전송 ➏ 입력된정보를다음페이지에서확인하기위해서출력해준다. 웹애플리케이션서버 ( 톰캣 ) ➌ 입력된회원정보를읽어와데이터베이스에저장 데이터베이스 ➍ 회원가입성공실패여부를결과값으로얻어옴 으로서블릿과 JSP 가무엇인지아주기초적인내용을살펴볼것입니다. 웹애플리케이션개발환경구축하기 - 프로그램설치 웹애플리케이션개발환경구축을위한설치프로그램은 JDKJava Development Kit, 톰캣Apache Tomcat, 이클립스 Eclipse입니다. 이번절에서서블릿 /JSP 웹프로그래밍을학습하기위해서웹애플리케이션개발환경을구축하는방법을학습해보도록하겠습니다. 다음은이들설치프로그램들이각각어떤역할을하는지정리한표입니다. [ 클라이언트측 ( 사용자 )] [ 서버측 ] 웹서버는요청이있을경우이를받아들여요청한페이지를응답할책임을지고있습니다. 웹서버가요청을받아응답할때까지의웹애플리케이션의동작순서는다음과같습니다. ➊ 사용자가브라우저주소입력란에특정사이트의주소를입력하게되면브라우저가해당웹서버에웹페이지를요청하는것이됩니다. 단요청한페이지가단순한정적인페이지라면웹서버에서바로클라이언트에게해당페이지를전송합니다. ➋ 해당웹서버는입력된회원정보를웹애플리케이션서버 (WAS : Web Application Server) 로전송합니다. ➌ 요청한페이지는웹서버에서바로제공되지못하고웹애플리케이션서버에서다양 설치프로그램 JDK (Java Development Kit) 톰캣 (Apache Tomcat) 이클립스 (Eclipse) 설명제일먼저무료로제공해주는자바개발도구인 JDK(Java Development Kit) 를다운받아설치해야합니다. 자바는플랫폼에독립적이므로어떠한플랫폼에서도설치할수있습니다. 우리는 JDK를설치하기위한개발플랫폼으로 Windows를선택했습니다. 톰캣 (Tomcat) 은아파치와썬마이크로시스템즈에서공동프로젝트로만든웹애플리케이션서버입니다. 웹애플리케이션서버가무엇인지모르면앞부분을다시한번살펴보세요. 이클립스는애플리케이션개발을위한코딩과컴파일을함께할수있는종합개발툴 (IDE) 입니다. 최근개발자들이가장많이사용하는툴입니다. 한로직이나데이터베이스와의연동을통해서완성되어야만제공됩니다. 웹애플리케이션서버는웹서버가클라이언트에게제공할페이지를완성하기위해이에필요한로직이나데이터베이스와의연동과데이터처리를담당합니다. ➍ 로직이나데이터베이스작업처리결과를웹서버에게보냅니다. ➎ 웹서버는이결과를다시클라이언트측브라우저에응답하게됩니다. ➏ 회원가입이성공적으로이루어졌다면가입당시에입력된정보를확인하기위해서 설치프로그램들의버전은자주최신버전으로변경됩니다. 설치방법은 [ 직접해보세요 ] 코너에서자세히알려드리겠습니다. 각각의버전은설치시점에따라약간다를수있으며해당사이트에가면이책에언급한버전과다른버전이제공될수있습니다. 버전에따라사용방법이크게다르지않기에자유롭게버전을선택해도상관없습니다. 다음은이책의집필시점의버전입니다. 출력해줍니다. 22 1 장서블릿과 JSP 개요 23

JDK(Java Development Kit) http://www.oracle.com/technetwork/java/javase/downloads/index.html Windows x86(jdk-7u17-windows-i586.exe) 라는윈도우 32 비트용버전 을다운로드하여설치합니다. 윈도우가 64 비트라면 64 비트용을다운로드해 도상관없습니다. 톰캣 (Apache Tomcat) http://tomcat.apache.org 톰캣 (Tomcat) 7.0 을다운로드하여압축을풀면됩니다. 이클립스개발도구 http://www.eclipse.org/downloads 이클립스를다운로드하여압축을풀면됩니다. 현재웹애플리케이션개발은 대부분이클립스를사용합니다. 회사에서업무를수행하기위해서워드프로 세스를공부하듯이웹애플리케이션개발을위해서는이클립스를반드시익 참고서블릿과 JSP 학습을위해 JDK를설치하는이유서블릿과 JSP를구동시키는것은 WAS입니다. 하지만, WAS에서서블릿과 JSP를구동하기위해서는자바컴파일러가필요합니다. 왜냐하면이미설명한대로서블릿과 JSP는자바를기반으로한기술이기때문입니다. 우선 JDK를다운로드하여설치하도록합시다. JDK는오라클사의홈페이지에서무료로다운로드한후설치할수있습니다. Java SE의최신버전 ( 집필시점에서는 Java SE 7u17) 을다운로드하기바랍니다. JDK는자주버전이갱신되므로설치시점에따라버전이약간다를수있다는점에주의하세요. 버전이갱신되어찾기가어려우면 Java SE(Standard Edition) 를찾으면됩니다. 다운로드하는시점에따라최신버전이다를수있으므로 7u17 버전 이아니더라도가장최신의버전을다운로드하면됩니다. 혀야합니다. 학습할때는메모장과같은윈도우즈의기본에디터를이용해서 프로그램을작성한후콘솔창에서컴파일하고브라우저에직접입력하여요청하여실행할수도있습니다. 하지만, 실제실무에서이와같은방식으로는웹애플리케이션개발이거의불가능합니다. 이클립스를사용하면소스작성은물론컴파일, 실행을원스톱으로한꺼번에실행할수있어빠른개발이가능합니다. 자주사용하면서익혀두기바랍니다. [ 직접해보세요 ] JDK 다운로드하여설치하기 1. 브라우저를열어주소란에다음 URL을입력하여오라클사이트의 JDK 다운로드페이지에접속합니다. http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK 설치하기이클립스가설치되면서자바의개발환경을자동으로설정하기때문에 JDK를먼저설치한후이클립스를설치해야합니다. 또한 JDK는서블릿과 JSP를포함한자바로작성한프로그램을컴파일하기위한툴로서이를 WAS(WAS 란앞에서이미언급한바있는 Web Application Server 의약어로서톰캣과같은웹애플리케이션서버를말합니다 ) 를설치하기전에 JDK를먼저설치해야합니다. 24 1 장서블릿과 JSP 개요 25

2. 다운로드에앞서 Accept License Agreement 에체크하여동의를거칩니다. 플랫폼 ( 운영체제 ) 별로 JVM 설계가다르므로 JDK는다음과같이여러종류로나뉘어있습니다. 사용자의 PC에설치된플랫폼에맞는 JDK를선택합니다. 윈도우즈 32비트인경우 Windows x86(jdk- 7u17-windows-i586.exe) 을다운로드합니다. 5. 이번에는 JRE의설치위치를변경하겠느냐는화면이나타납니다. JRE의설치위치역시변경하지않기로합니다. [Next] 버튼을클릭하여설치를진행합니다. 6. 설치진행화면이나타나게된후에 JDK가설치가완료되면다음그림과같이설치종료화면이나타나게됩니다. [Close] 버튼을눌러설치를종료합니다. 3. 다운로드페이지를통해받은파일을더블클릭하면설치가시작됩니다. [Next] 버튼을클릭하여설치를진행합니다. 7. JDK 설치가완료되면등록화면이뜹니다. 오라클계정없이설치하고나면바로사용할수있으므로익스플로러창을닫습니다. 4. JDK의설치위치를변경하겠느냐는화면이나타납니다. 본서에서는 JDK의설치위치를변경하지않습니다. [Next] 버튼을클릭한후계속설치합니다. 26 1 장서블릿과 JSP 개요 27

톰캣설치하기 JDK 설치가완료되었으면이제실질적으로서블릿과 JSP 를구동시키는 WAS 를설 치해보도록하겠습니다. WAS 로는 BEA 사의웹로직, IBM 의웹스피어 SUN 사의 3. 받은파일을더블클릭하여설치를시작합니다. 설치화면이나타나면 [Next] 버튼을클릭한후에나타난라이센스동의화면에서라이선스에동의하겠다는의미로 <I Agree> 버튼을클릭합니다. iplanet, Oracle 9iAS, 티맥스의제우스등이있다고이미언급했습니다. 이책에서 는이렇게다양한 WAS 중에서오픈소스프로젝트로개발되어무료로제공되는톰캣 을사용하겠습니다. [ 직접해보세요 ] 톰캣다운로드하여설치하기 1. 브라우저를열어아파치톰캣사이트 (http://tomcat.apache.org) 에접속한후화면왼쪽에있는메뉴에서 Download Tomcat 7.0을선택하여톰캣다운로드페이지로이동합니다. 4. 환경설정부분에서 Examples 에추가로체크한후 [Next] 버튼을클릭합니다. 2. 화면을스크롤하여중앙에있는 7.0.40 밑에 Binary Distributions / Core 영역의 32-bit/64- bit Windows Service Installer (pgp, md5) 를선택해다운로드합니다. 5. Tomcat 내부환경설정을변경해야합니다. 기존오라클에서사용하는포트와충돌이발생할우려가있기때문에 port를 8181로수정합니다. 오라클사용자이름인 User Name과오라클에접속하기위해서필요한비밀번호인 Password를각각 admin, 1234로지정한후 [Next] 버튼을클릭합니다. 28 1 장서블릿과 JSP 개요 29

6. 톰캣설치경로는기본설정값을사용할것이므로 [Next] 버튼을클릭하여설치를진행합니다. 설치가완료되면오른쪽과같은화면이나타납니다. [Finish] 버튼을클릭하여설치를마무리합니다. 이클립스설치하기 JDK 와톰캣이설치되었으면웹프로그램을작성하기위한이클립스를설치합니다. 이클립스까지설치가끝나면서블릿과 JSP 를학습하기위한예제를작성하고실행해 보도록하겠습니다. [ 직접해보세요 ] 이클립스다운로드하여설치하기 1. 웹브라우저를열고, http://www.eclipse.org 사이트로이동합니다. 위쪽의메뉴에서 [downloads] 메뉴를클릭한후이클립스 (Eclipse IDE for Java EE Developers) 를클릭합니다. 참고로이클립스는 Standard가아니라 EE Developers를위한 IDE로다운을받아야합니다. 7. 설치하자마자톰캣이구동됩니다. 확인은화면아래의트레이아이콘으로확인할수있습니다. 8. 브라우저를실행시켜 http://localhost:8181 을입력하여다음과같이톰캣의시작페이지가나타나면톰캣이제대로설치된것입니다. 2. 이클립스 (Eclipse IDE for Java EE Developers) 를클릭하면미러사이트로이동합니다. 미러사이트란인기있는웹사이트에서통신량이폭주하는장거리또는국제회선을경유하지않고도파일을전송받을수있도록 2개이상의파일서버를두는것을말합니다. 인터넷상에는유명한사이트의경우전세계에몇군데의미러사이트가있으므로사용자들은가까운곳또는국내에있는미러사이트를이용하는것이바람직합니다. 30 1 장서블릿과 JSP 개요 31

3. 미러사이트에서이클립스를다운로드합니다. 이클립스로첫웹애플리케이션작성하기 이클립스를사용하기에앞서먼저워크스페이스와프로젝트개념을알아봅시다. 우리는일반적으로파일을관리하기위해폴더를만듭니다. 예를들어문서파일을관리하기위해서문서라는폴더를만들어놓지요. 그런데문서에도종류가많기때문에이를구분하기위해문서폴더내부에워드문서관리폴더를만들고거기에워드파일들을, 엑셀문서관리폴더를만들어놓고거기에는엑셀파일을나누어관리합니다. 이와마찬가지로병원관리프로젝트를위한파일을 [ 병원관리 ] 폴더에저장하고학사관리프로젝트는 [ 학사관리 ] 폴더에저장합니다. 또한 [ 병원관리 ] 폴더와 [ 학 4. 받은압축파일을푸는것으로이클립스설치가끝납니다. 사관리 ] 폴더와같이개발을위한프로젝트폴더들을워크스페이스란작업을위한 공간 ( 폴더 ) 에저장해둡니다. 만일프로젝트를할때마다여기저기에저장해두면찾 기힘들까봐프로젝트를한꺼번에작업을위한공간인워크스페이스 ( 작업공간 ) 내에모아서관리하는것입니다. 대규모프로젝트나소규모프로젝트는모두프로젝트이고프로젝트폴더들을관리의편의를위해서워크스페이스라는작업공간에저장해두는것입니다. 우리가지금이클립스로간단한예제를작성하기위해서우선적으로해야할일은워크스페이스와프로젝트와 JSP 파일을만드는일입니다. 생성된 JSP 파일에실행결과로얻고싶은내용을코딩한후저장하고, 이를실행하여결과를확인합니다. 이들을만드는순서는다음과같이워크스페이스를생성한후생성된워크스페이스를작업공간으로하여프로젝트를생성합니다. 생성된프로젝트내에서블릿이나 JSP 등필요한파일을생성한후원하는결과가나타날수있도록코드를입력한후저장하 지금까지 JDK, 톰캣, 이클립스를설치하였습니다. 이제부터는본격적으로서블릿 과 JSP 로능숙하게웹애플리케이션을개발할수있도록서블릿과 JSP 문법을학습할 것입니다. 여이를실행합니다. 원하는결과가나오지않으면원하는결과가나올때까지코드 를수정한후다시저장하여실행하는작업을반복합니다. 이러한작업은이책의전 반에걸쳐반복되니지금은이런절차를거치는구나정도만알면됩니다. 워크스페이스생성프로젝트생성 JSP 파일생성코딩저장 실행 32 1 장서블릿과 JSP 개요 33

[ 직접해보세요 ] 이클립스실행하기 1. 제대로설치가되었는지확인하기위해서탐색기에서 C:\eclipse-jee-juno-SR2-win32\ eclipse 폴더안에있는 eclipse.exe 파일을더블클릭하여이클립스를실행합니다. 바탕화면에바로가기를해놓으면편리합니다. 4. 이클립스가실행되면 [Welcome] 창이나타납니다. [Welcome] 창에표시된아이콘들은자바를학습하기위한튜토리얼이나예제들과연결하는기능을합니다. 화면상단왼쪽의닫기버튼을눌러 [Welcome] 창을닫습니다. 2. 이클립스가실행되면작업공간 (workspace) 을선택하는창이나타납니다. 기본으로설정된작업공간이아닌다른작업공간을만들고자할경우에는 [Browse...] 버튼을클릭합니다. [Select a workspace] 창이나타나면 eclipse 폴더하위폴더에워크스페이스를생성하기위해서 eclipse 폴더를선택한후여기에서 [ 새폴더만들기 ] 버튼을클릭합니다. [ 새폴더 ] 항목의이름을원하는폴더명으로변경합니다. 필자의경우에는폴더이름을 web_workspace 로변경하고변경된폴더를선택한후 [ 확인 ] 버튼을누릅니다. 5. [Welcome] 창을닫으면다음과같은화면이제공됩니다. 3. 그러면 [Workspace] 항목의값이 web_workspace로변경되어적용되는것을알수있습니다. 화면아래에 [Use this as file default and do not ask again] 항목을체크하지않으면이클립스를실행할때마다워크스페이스를지정하라고 [Select a workspace] 창이매번나타나므로귀찮을경우이항목에체크하여이클립스실행할때마다해당창이나타나지않도록합니다. 34 1 장서블릿과 JSP 개요 35

참고 이클립스가실행이안된다면이렇게해보세요. 2. [New Server] 창이뜨면, [Define a New Server] 에서 [Apache Tomcat v7. 0 Server] 를선택한후 [Next] 버튼을클릭합니다. 이러한문제는메모리사이즈때문인경우가대부분이므로 eclipse.ini 파일을열어서아래 xmx 부분이메모리사이즈를나타내는데, 이부분만잘조정하면됩니다. eclipse.ini 파일의맨아래줄 Xmx512m 을 Xmx256m 으로변경합니다. 3. 그다음 [Tomcat Server] 창에서, [Browser] 버튼을클릭하여 Tomcat 경로 (C:\Program Files\Apache Software Foundation\Tomcat 7.0) 를찾아지정합니다. [ 확인 ] 버튼을클릭한후 Tomcat 경로가제대로지정되었는지확인한후에 [Finish] 버튼을클릭합니다. [ 직접해보세요 ] 이클립스에서톰캣연동하기 1. 이클립스의화면아래의 [Server] 창에서마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [New Server] 를선택합니다. 4. [Server] 창에만들어진 Tomcat 7.0 Server에서마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [Start] 를선택하여서버를구동시킵니다. 36 1 장서블릿과 JSP 개요 37

5. 서버가구동되지않고다음과같은에러창이뜨면이미톰캣서버가실행중이기때문입니다. 이클립스에서서버를구동하기위해서는이미실행중인톰캣서버를중지시켜야합니다. 그러기위해서화면하단의작업표시줄의톰캣트레이아이콘을클릭하거나시작메뉴에서 [Monitor Tomcat] 를선택하여 [Tomcat Monitor] 창을띄웁니다. 참고이클립스에서인코딩방식을 UTF-8로변경하기웹프로그래밍에서한글을위한작업을위해서는인코딩을지정해야합니다. 이클립스의기본인코딩은시스템인코딩에따릅니다. 한글윈도우에설치된이클립스의경우기본인코딩이 MS949입니다. 이것을다국어지원을위해서일반적으로보편화된 UTF-8로설정해줍시다. [Window Preferences] 메뉴를선택하여 [Preferences] 창이나타나면화면왼쪽에서는 [General] 하위항목으로 [Workspace] 를선택하고화면오른쪽상세내용중맨하단에서는 [Text file encoding] 항목의선택박스에서 UTF-8로선택하고 [Apply] 버튼을클릭합니다. 6. [Tomcat Monitor] 창이나타나면 [Stop] 버튼을클릭하여톰캣서버를중지시킵니다. [Stop] 버튼이비활성화되면톰캣서버가중지된것입니다. [ 확인 ] 버튼을클릭합니다. [Stop] 버튼을클릭하여톰캣서버를중지 7. 톰캣서버를중지했으므로다시이클립스에서톰캣서버를시작시켜봅시다. [Server] 창에만들어진 [Tomcat 7.0 Server] 에서마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [Start] 를선택합니다. 다음과같이나타나면톰캣서버가성공적으로시작된것입니다. 또한 [Preferences] 창의왼쪽에서 [Web] 하위항목으로 [JSP Files] 를선택하고화면오른쪽상세내용중 [Encoding] 항목의선택박스에서 ISO 10646/Unicode(UTF-8) 를선택합니다. 역시 [Apply] 를클릭한후 [OK] 버튼을클릭하여설정을마무리합니다. 38 1 장서블릿과 JSP 개요 39

톰캣서버가이클립스와연동되었으므로이제웹프로젝트를생성하고 JSP로간단한웹애플리케이션을생성하여실행해보도록합시다. 서블릿과 JSP 로게시판이나회원관리애플리케이션더나아가서쇼핑몰까지만들수있습니다. 이런다양한웹애플리케이션은프로젝트단위로작성합니다. 프로젝트는개발에필요한파일을관리할뿐아니라각종라이브러리나디버깅정보등을관리합니다. 자, 웹프로그래밍을학습하기위한첫번째단계로프로젝트를생성합시다. 문자인코딩이란? 인코딩은문자셋을컴퓨터가이해할수있는바이트와매핑한규칙을말합니다. 예를들면 ASCII Code에서 ABC 등은문자셋이고 A는코드 65, B는코드 66 등바이트순서와매핑한것이인코딩입니다. 따라서문자셋을어떻게매핑하느냐에따라하나의문자셋이다양한인코딩을가질수있습니다. [ 직접해보세요 ] Dynamic Web Project 만들고 jsp 파일만들기 1. 웹프로젝트를만들기위해서는화면왼쪽에 [Project Explorer] 에서마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [New Dynamic Web Project] 를선택합니다. 컴퓨터는영미권에서만들어졌기때문에영어를표현하는경우는아무런문제가없지만다른문자를사용하는나라에서자국의언어로표현하려면문제가되는경우가있습니다. 그렇기때문에한글을표현하는인코딩을적용하여문서를만들어야합니다. 한글인코딩은 MS949( 윈도 OS에서기본으로사용 ), UTF-8 등이있습니다. 브라우저는내부적으로모두유니코드로처리합니다. 그렇기때문에 HTML5에서는문자인코딩에 UTF-8을권장하고있습니다. UTF-8은전세계적으로모두통용될수있는표준화된텍스트데이터를표현하기위해서만들어진인코딩방식입니다. UTF-8 방식을이용하면다음과같이 HTML에서제공되는 <meta> 태그에 charset 속성을추가한후인코딩방식을지정해야합니다. <meta charset="utf-8"> 또한 MS949 방식을이용하면다음과같이표기합니다. 2. 프로젝트이름을입력합니다. 이책에서는프로젝트이름을 web-study-01 로하고 [Finish] 버튼을클릭합니다. <meta charset="euc-kr"> 위방식은 HTML5에서지정하는인코딩방식이고 HTML4의인코딩방식을지정하는 <meta> 태그는다음과같습니다. <meta http-equiv="content-type" content="text/html; charset=utf-8"> charset(character Set, 문자셋 ) 은하나의언어권에서사용하는언어를표현하기위한모든문자 ( 활자 ) 의모임을말하며 HTML 문서뿐만아니라다른애플리케이션에도언어권에맞는문자들의집합을언급해야할때 charset이란키워드를사용합니다. 아직은문자셋에익숙하지않겠지만앞으로예제를만들어가면서확실히이해를할수있을겁니다. 40 1 장서블릿과 JSP 개요 41

3. 이클립스의화면왼쪽에 [Project Explorer] 에웹프로젝트가추가되어나타납니다. 새롭게나타난웹프로젝트를선택한후마우스오른쪽버튼을클릭하여나타난바로가기메뉴에서 [New JSP File] 을선택합니다. 6. 실행을하기위해서는 JSP 파일을선택한후 [Run Run] 을선택합니다. 단축키를사용하고자할경우에는 [Ctrl+F11] 을누릅니다. 4. [New JSP File] 창이나타나면파일이름을입력합니다. 이책에서는파일이름을 helloworld 로합니다. 파일이름만입력하면확장자는자동으로.jsp가됩니다. 역시 [Finish] 버튼을클릭합니다. 7. JSP 파일을실행시킬서버를선택하라는창이나타납니다. 화면아래 [Always use this server when running this project] 체크박스를클릭하면실행시킬서버를선택하라는창이더이상나타나지않습니다. [Next] 버튼을누르면웹서버에웹프로젝트를추가하는화면이제공됩니다. [Finish] 버튼을클릭합니다. 5. 웹애플리케이션이제대로실행되는지확인을위해생성된 JSP 파일의 <body> 태그안에 <h1> Hello World! </h1> 을기술합니다. 42 1 장서블릿과 JSP 개요 43

8. 서버에새로운웹프로젝트를추가하려면서버가새로구동되어야합니다. [OK] 버튼을클릭하면서버에웹프로젝트가추가된후서버가새로구동되어 JSP 파일을실행합니다. 9. JSP 실행결과는이클립스내부에있는브라우저에표시됩니다. [ 직접해보세요 ] 글꼴변경과줄번호출력하기 1. 글꼴을변경하기위해서는 [Window Preferences] 메뉴를선택합니다. 이곳에서다양한환경설정을할수있습니다. [Preferences] 창이나타나면화면왼쪽에서는 [General] 하위항목으로 [Appearance Colors and Fonts] 를선택하고화면오른쪽에서는 [Basic Text Font] 항목을선택한후 [Edit...] 버튼을클릭합니다. 10. 결과화면을이클립스내부가아닌팝업창형태로외부에서확인하고자한다면 [Window Preferences] 를선택한후에 [Preferences] 창이나타나면, 화면왼쪽에서는 [General] 하위항목으로 [Web Browser] 를선택하고 [Use external web browser] 라디오버튼을선택합니다. 2. [ 글꼴 ] 창이나타나면원하는글꼴을선택합니다. 보통은 Consolas 서체를사용합니다. 11. 다음은이클립스외부의브라우저에서 JSP 파일을실행한결과를보여주는화면입니다. 44 1 장서블릿과 JSP 개요 45

3. [ 에디터 ] 뷰에라인번호가표시되지않아불편하므로, 라인번호가표시되도록이번에는 [Preferences] 창왼쪽에 General의 [Editors] 하위항목으로 [Text Editors] 를선택하고화면오른쪽에서는 [Show line numbers] 항목을체크한후에 [Ok] 버튼을클릭합니다. 서블릿과 JSP 의기초개념 이제야본론으로들어왔습니다. 앞서웹프로그래밍이필요한이유에대해서학습했 고개발환경까지세팅하였고간단하게 JSP 페이지로만들어실행해보았습니다. 이 제는웹프로그래밍의핵심기술인서블릿과 JSP 의기초개념을알아보고어떻게개 발하는지알아볼차례입니다. 서블릿서블릿 Servlet은 Server + Applet 의합성어로서버에서실행되는 Applet 이란의미로자바를이용하여웹에서실행되는프로그램을작성하는기술을말합니다. 웹애플리케이션을제작하기위해제공되는언어는이미언급한 PHP, ASP와같이 4. 글꼴이변경되고줄번호가생성된것을확인할수있습니다. 많지만요즘에많은기업에서는 JSP& 서블릿을사용하고있습니다. 이는다른웹기 술에비해빠른응답을해줄수있다는장점이있기때문입니다. PHP 처럼 JSP 라하 지않고 JSP& 서블릿이라고한이유는독특한탄생비화때문입니다. 이부분은뒤이어설명합니다. 하지만앞으로서블릿을공부하면서상속이나출력스트림, 예외처리와같은자바기술에서사용되는용어들이아주자연스럽게나오는데, 이들용어에대해서낯선분들은자바기술에대한별도의학습이필요합니다. 서블릿은자바클래스형태의웹애플리케이션을말하는데, 브라우저를통해자바클래스가실행되도록하기위해서는 javax.servlet.http 패키지에서제공하는 HttpServlet 클래스를상속받아구현해야합니다. HttpServlet 클래스를상속받아만든서브클래스를서블릿클래스라고합니다. 지금까지이클립스를설치하고간단하게 JSP 파일을생성하여실행까지해보았습니다. 성공했다는기쁨도있지만, 이클립스에의해생성된 JSP가어떻게톰캣에의해구동되는지궁금한게한두가지가아닐겁니다. 아직은서블릿에대해자세한학습을하지않은상태이기때문에이러한궁금증을풀기란시기상조이고서블릿과 JSP 의개념을우선파악하고톰캣이 JSP를어떻게동작시키지알아보도록하겠습니다. 이제본격적으로서블릿으로웹프로그래밍을하는방법을익히도록합시다. 서블릿또한자바프로그램의다른클래스들처럼자바가상머신인 JVM에서동작해야하므로클래스파일이생성되어야합니다. 그래서클래스의형태로작성합니다. JDK에는웹애플리케이션을제작할수있는클래스가제공되지않고톰캣을설치하고나면웹애플리케이션을제작할수있는클래스가제공되는데, 그클래스가바로 HttpServlet 입니다. HttpServlet 은웹서비스가가능한웹애플리케이션을제작할수있도록자바를확장해놓은클래스로톰캣을설치하면제공됩니다. HttpServlet 을상속받은클래스를서블릿이라고합니다. 이미여러기능들이미리만들어져있기 때문에개발자는편리하게 HttpServlet 을활용하여새로운기능의웹프로그램을만 들수있는것입니다. 46 1 장서블릿과 JSP 개요 47

이제서블릿클래스가어떤구조로되어있는지살펴보기위해지금부터덧셈을 해주는서블릿을이클립스를이용하여단계적으로만들어보겠습니다. [ 직접해보세요 ] 두수에대한합을구하여결과를출력하는서블릿클래스 1. 이클립스의 [Project Explorer] 에서웹프로젝트 (web-study-01) 를클릭하여선택한후 [File New Servlet] 을선택합니다. 2. [Create Servlet] 창이나타나면패키지 (unit01) 와서블릿클래스이름 (AdditonServlet01) 을입력한후 [Finish] 버튼을클릭합니다. 4. 29 번라인부터다음과같이입력합니다. 3. 서블릿클래스가생성됩니다. 5. 32줄에서에러가발생하는데이는 PrintWriter 클래스사용을위한 import문이없기때문입니다. Ctrl+Shift+O를동시에누르면 import java.io.printwriter; 와같은임포트구문이자동추가되면서발생했던에러가해결됩니다. 48 1 장서블릿과 JSP 개요 49

다음은위에서실습한 AdditonServlet01.java 파일의전체소스내용입니다. 2 장 에서서블릿에대해서자세하게설명할것이기에소스코드다음의설명을보고전체 적인내용만이해하도록합시다. 6. 작성한서블릿을실행하여결과를얻으려면 [Run Run] 을선택합니다. 7. 웹브라우저주소입력란에 http://localhost:8181/web-study-01/additonservlet01 가자동입력되어다음과같은결과가출력됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package unit01; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; /** * Servlet implementation class AdditonServlet01 */ @WebServlet("/AdditonServlet01") public class AdditonServlet01 extends HttpServlet { private static final long serialversionuid = 1L; /** * Default constructor. */ public AdditonServlet01() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { int num1 = 20; int num2 = 10; int add = num1 + num2; PrintWriter out = response.getwriter(); out.println("<html><head><title>additon</title></head>"); out.println("<body>"); out.println(num1 + "+" + num2 + "=" +add); out.println("</body>"); 50 1 장서블릿과 JSP 개요 51

39 40 41 42 43 44 45 46 47 48 out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 클라이언트는서버에 get과 post 두가지방식중하나로요청을합니다. 두전송방식의차이점은다음과같습니다. 전송방식설명주소창을타고넘어가기때문에서버로보내는데이터를사용자가그대로볼수있습 get 방식니다. 그래서보안에취약합니다. 255자이하의적은양의데이터를전송합니다. html header를타고넘어가기때문에보안에강합니다. 255자이상의대용량의데이 post 방식터를전송합니다. 1 : 패키지를만듭니다. 패키지는비슷한프로그램들을묶을때유용합니다. 패키지의유용성에대해서는자바기본서를참고하세요. 3 : 입출력시예외처리를위한클래스로 doget 메소드의 thorws 절에서 IOException을사용했기에임포트합니다. 4 : 클라이언트에결과를출력하기위한 out 객체를 PrintWriter 클래스로선언하였기때문에 PrintWriter를임포트합니다 ( 위에서자동으로임포트하는방법도배웠죠?) 6 : 서블릿에서발생하는예외처리를위한클래스로 doget 메소드의 thorws 절에서 ServletException을사용했기에임포트합니다. 7 : 15줄의 @WebServlet을사용하기위해임포트합니다. 8 : HttpServlet 클래스를 16줄에서사용하기때문에임포트해야합니다. 9~10 : 30줄과 46줄의 doget, dopost 메소드의매개변수에서사용한모든 HttpServletRequest, HttpServletResponse 클래스를사용하기위한임포트구문입니다. 15 : 서블릿을요청할때직접클래스를요청하는것이아니고 @WebServlet( ) 안에기술된 URL로요청을하는것이기에요청 URL을정하는것입니다. 16 : HttpServlet에는웹애플리케이션으로동작하도록하는기본동작즉요청에대한응답이가능하도록하는내용이기술되어있기때문에상속받아야합니다. 29 : 서블릿이요청을받으면이벤트처리방식으로자동으로호출되는메소드입니다. HttpServlet에정의된메소드인데, 이를오버라이딩해서개발자가요청이있을경우어떤처리를해야하는지명시해주어야합니다. 그래서오버라이딩해놓은것입니다. 오버라이드등의필요성에대해서는자바기본서를참고하세요. 웹프로그래밍에서가장중요한것은클라이언트가어떻게서버에요청하는지를알아야합니다. 이것을이해해야서블릿의동작방식을이해할수있기때문입니다. 서블릿클래스에대한문법적인내용은 2장에서자세히살펴보고이번예제에서는서블릿동작방식을이해하기위해클라이언트가어떻게서버에요청하는지부터살펴봅시다. 1 바이트가 8 비트인것처럼, 연필한자루가 12 개인것처럼, 주소입력란에데이터 를전송하는데는제한이있습니다. 컴퓨터는 2 진수체계이므로 2 8 에저장할수있는 최댓값이 255 이다보니 255 자까지저장가능하도록한것이다. 서블릿클래스에는 doget() 혹은 dopost() 가있는데, 요청방식에따라호출되 는메소드가달라집니다. get 방식으로요청하면 doget() 이호출되고 post 방식으 로요청하면 dopost() 가호출됩니다. 그렇기때문에요청방식에따라 doget() 혹은 dopost() 메소드내부에호출되었을때해야할일을써넣어야합니다. doget() 혹은 dopost() 메소드중어떤메소드가호출되는지실질적인 HTML 코 드로설명하겠습니다. 보통 <form> 태그를통해서버에무엇인가를전달하거나요청 을하게됩니다. 다음과같이말입니다. 요청할서블릿 <form action="callservlet"> <input type="submit" value=" 전송 "> </form> 클릭하면서블릿이요청된다. 위그림은 <form> 태그로서버측에존재하는많은서블릿중하나를정해서요청 하고있습니다. 이를위해 action 이라는속성값에요청할서블릿이름을기술해야합 니다. 전송버튼이눌리는순간에 action 속성값에지정된서블릿이요청됩니다. 전 송버튼은일반버튼이아닌 <input> 태그의 type 속성값을 submit 으로지정하여 만들어야합니다. <form> 태그가서블릿을요청할때는 get 과 post 두가지전송방식중한가지 로전송됩니다. 개발자가원하는전송방식을결정해줄수있는데, 그러기위해서는 52 1 장서블릿과 JSP 개요 53

method 속성값을 <form> 태그에추가하면됩니다. method 속성값으로 get 을기술 하면 doget() 메소드가, post 를기술하면 dopost() 메소드가호출됩니다. 그런데폼태그에서블릿이름을넣어놓으면서버에서는어떻게해당서블릿을찾 요청에대한처리를위한 doget() 과 dopost() 메소드는어떤요청이왔느냐에따 라둘중하나가호출된다는것빼고는메소드의형태는완전히동일합니다. 다음은 doget(), dopost() 의형태입니다. 을수있을까요? 그것은 WAS( 톰캣엔진 ) 가운영체제와같은시스템프로그램이므로 확장자가.class 인파일을톰캣이가지고있다가요청이들어오면해당서블릿클래 스들을찾아서실행하는원리입니다. 뒷부분으로갈수록이런동작원리는확실하게 이해할수있을겁니다. <form> 태그를이용한 get 방식의요청의예 <form method="get" action="callservlet"> <input type="submit" value=" 전송 "> </form> public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { } public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { } <form> 태그를이용한 post 방식의요청의예 <form method="post" action="callservlet"> <input type="submit" value=" 전송 "> </form> method 속성을생략한채전송방식을결정하지않으면기본값인 get 방식으로 요청을하게됩니다. <form> 태그외에도 HTML 의 <a> 태그를사용하여링크를걸어주면서블릿은 get 방식으로요청한것으로인식합니다. doget(), dopost() 에서동일한방식으로처리되기때문에 doget() 메소드만대표 로살펴보도록합시다. 요청처리 응답처리 public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { } 예외처리 그렇다면어떤경우에 post 방식을쓰고어떤경우에 get 방식을쓸까요? <a> 태그를이용한 get 방식요청의예 <a href="callservlet"> get 방식의요청 </a> 1 분만생각해봅시다 주소입력란에서직접서블릿요청을위한 URL 을입력해도 get 방식으로요청한 것으로인식합니다. http://localhost:8181/web-study-01/callservlet 앞에서도잠깐언급했지만 get 방식은서버로데이터가전송될때주소창을타고넘어가기때문에보안에취약합니다. 그렇기때문에로그인폼을만들면서 get 방식을사용한다면회원이입력한암호가그대로노출됩니다. 그래서 get 혹은 post를선택할수있는일반적인폼에서는 post 방식을사용하는것이일반적입니다. 반면폼이아닌 <a> 태그를통해서도페이지를이동할수있는데, 이렇게하이퍼링 크를통해서서버가요청되는경우에는무조건 get 방식으로요청됩니다. 54 1 장서블릿과 JSP 개요 55

doget() 메소드는 throws 절로메소드에서발생하는 IOException, Servlet Exception 예외를외부에서처리하도록정의되어있고두개의매개변수를갖습 니다. HttpServletRequest 형으로선언된첫번째매개변수는클라이언트의요청 (request) 을처리하고, HttpServletResponse 형으로선언된두번째매개변수는 요청처리결과를클라이언트에게되돌리기 ( 응답하기, response) 위해사용됩니다. 서버가요청에대한처리를마치고클라언트에게결과를되돌려주기위해서는아 래와같이 doget() 혹은 dopost() 의두번째매개변수인 HttpServletRequest 로부 터 PrintWriter 형의출력스트림객체를얻어와야합니다. public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getwriter(); } 요한페이지를위한로직이나데이터베이스와의연동을위해필요한것들을포함합니다. 이러한서버페이지에서실행되는로직을구현하기위해서는프로그래밍언어가필요한데, JSP에서는자바를사용하고있습니다. 여기서말하는자바는우리가알고있는썬마이크로시스템즈 ( 현오라클로변경 ) 의 자바 를말합니다. 즉 JSP에서는자바언어로로직 ( 프로그램 ) 을구현합니다. 다음은서블릿클래스를학습하면서살펴본두수에대한합을구하여결과를출력하는예제를 JSP로변환한예입니다. 이예제를실행하기위해서는주소입력란에서직접 JSP 페이지를기술하여실행합니다. http://localhost:8181/web-study-01/addition02.jsp 또한아래와같이 PrintWriter 출력스트림객체의 println() 을호출하면브라우 저에 HTML 코드를보내주어결과를얻어볼수있게됩니다. public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getwriter(); out.println("<html><head><title>additon</title></head>"); } 자바의문법적인형태를그대로닮은서블릿에대해서살펴보았으니이제같은목 적을위해나왔지만자바의성격은거의느끼지못하는 HTML 과유사한 JSP 의전반 적인개요에대해서살펴보도록하겠습니다. JSP JSP 는 Java Server Page 의줄임말로자바로서버페이지를작성하기위한언어입니 다. HTML 과 JSP 태그 ( 스크립트릿 ) 로구성되어화면을작성하는데유리한웹프로 그래밍기술입니다. 서버페이지는웹서버에서실행되는페이지를말하며요청에필 두수에대한합을구하여결과를출력하는 JSP [ 파일이름 : addition02.jsp] <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <html> <head> <title>addition</title> </head> <body> <% int num1 = 20; int num2 = 10; int add = num1 + num2; %> <%=num1%>+<%=num2%>=<%=add%> </body> </html> 앞에서이클립스로 JSP 페이지를만들고실행하는방법을알려주었는데, 그방법 대로여러분이직접 JSP 페이지를만들고실행해보기바랍니다. 위 JSP 예제를살 펴보면서블릿과는사뭇다르다는것을느낄것입니다. 서블릿은자바코드내부에 56 1 장서블릿과 JSP 개요 57

HTML 코드가들어가는구조이지만, JSP 는이와반대로 HTML 문서내부에자바코 드가들어가는구조입니다. HTML 문서일부분에서자바를사용할수있도록하기위해서 JSP 는다양한태그 를제공합니다. 위예 (addition02.jsp) 에서는 <%@ page %> 태그가사용되었는데이 태그는해당페이지내에사용되는전반적인환경을결정해주는태그입니다. 이페이 지에서 language="java" 는사용하는언어가자바이며 contenttype="text/html"; 은이페이지가 html 문서이며 charset=utf-8 pageencoding="utf-8" 은한글인코 딩을 UTF-8 로처리하겠다는의미입니다. <% %> 태그를스크립트릿 scriptlet 이라고하고 <%= %> 태그는표현식 (expression) 이라고합니다. JSP 페이지에기술한내용은 HTML 로간주되기때문에자바코드를 기술하기위해서는 <% %> 태그내부에기술해야하며변수에저장된값이나함수의 결과값을출력하기위해서는 <%= %> 태그를사용합니다. 자세한내용은뒤에서살펴 볼예정이니이런게있구나정도만기억하고넘어가시기바랍니다. 서블릿과 JSP 를비교해보면 JSP 로개발하는편이훨씬쉽고간단하다는것을알 수있을것입니다. 그렇다면서블릿은필요없을까요? 지금까지살펴본예제에서는 로직이복잡하지않기때문에 HTML 코드중심의구조인 JSP 로페이지를개발하는 것이효율적으로보이지만쇼핑몰과같은웹애플리케이션을개발하다보면복잡한 자바코드가기술되어야하는데, 이를 JSP 페이지에기술해두면디자이너가실수로 코드를건드려문제가발생하게됩니다. 그렇기때문에실무에서는아래에서보여주는예 (AdditonServlet03.java, addition03.jsp) 와같이복잡한로직은서블릿에기술해놓고결과만을 JSP 페이지 를통해클라이언트에제공하는형태로개발합니다. 두수에대한합을구하는서블릿클래스 [ 파일이름 : unit03\additonservlet03.java] package unit02; import java.io.ioexception; import javax.servlet.*; import javax.servlet.annotation.webservlet; import javax.servlet.http.*; @WebServlet("/AdditonServlet03") public class AdditonServlet03 extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { int num1 = 20; int num2 = 10; int add = num1 + num2; request.setattribute("num1", num1); request.setattribute("num2", num2); request.setattribute("add", add); RequestDispatcher dispatcher = request.getrequestdispatcher("02_addition.jsp"); dispatcher.forward(request, response); } } AdditonServlet03 클래스의내용은 AdditonServlet01.java 내용보다간단합니 다. 이클립스에서자동으로생성해주는클래스에는불필요한내용이많기때문에코 드길이가길어져서이해하기힘들어질수있기때문에필요한내용만남겨두고정 리해둔것입니다. 이후에나오는서블릿클래스도이와마찬가지로이클립스에서생 성해준코드보다는훨씬간단한형태일것입니다. 직접만든서블릿클래스와내용이 다르다고혼동하지말기바랍니다. 두수의합을출력하는 JSP [ 파일이름 : addition03.jsp] <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <html> <head> <title>addition</title> </head> <body> ${num1}+${num2}=${add} </body> </html> 58 1 장서블릿과 JSP 개요 59

AdditonServlet03.java 에서는두수에대한합을구하는자바코드를기술하고 출력할데이터를 request 객체의속성값으로저장한후서버상에서페이지가이동 되는포워드방식으로 addition03.jsp 페이지로이동을하면 addition03.jsp 페이지 퀴즈로정리합시다 에서는 request 객체에저장된속성값을얻어와출력해줍니다. 포워드방식은 4 장에 서자세히학습합니다. 이와같이로직과표현을분리하여프로그래밍을하는것을 MVC 패턴이라고합니다. 서블릿이비즈니스로직을구현하는 Model 역할을하고 JSP가결과를출력하는 View 역할을하고있습니다. MVC 패턴으로웹프로그래밍을하는것은복잡하고까다로운것이므로서블릿과 JSP 문법을다습득한후에다루도록하겠습니다. 문제의답은로드북홈페이지 (http://roadbook.co.kr/126) 에서확인할수있습니다. 1. 다음 Java 기술중웹애플리케이션을지원하며 HTML과 JSP 태그 ( 스크립트릿 ) 로구성되어화면을작성하는데유리한것은? 1 JSP 2 Servlet 3 Java Bean 4 JDBC 2. 웹서버와웹애플리케션서버가무엇인지개념을설명하시오. 3. 알고있는 WAS 를모두기술하시오. 4. 어떤식으로요청을하면 doget 메소드가호출되는지사례를들어설명하시오. 5. 서블릿과 JSP 의차이점을기술하시오. 6. 한글인코딩은무엇이며왜해야하는지설명하시오. 7. localhost 는자신의컴퓨터를지칭하는도메인네임이다. 이도메인네임에대응되 는 IP 주소는무엇인가? 8. 웹프로그래밍을하기위해 WAS 서버로톰켓 (tomcat) 을사용했을때에, 사용할 웹포트번호를변경하기위해수정해야할파일명은 ( ) 이다. 9. Tomcat 에대한설명으로바른것은? 1 Apache Software Foundation 에서개발한서블릿 /JSP 컨테이너 2 C 언어로구현된 HTTP 웹서버 3 오픈소스의통합개발환경 4 Java 플랫폼 60 1 장서블릿과 JSP 개요 61

도전해보세요 문제의답은로드북홈페이지 (http://roadbook.co.kr/126) 에서확인할수있습니다. 자신의이름을출력하는 JSP 작성하기 2 장 서블릿의기초 목표이클립스에서워크스페이스 (self_study) 를생성하고서버를설정하고웹프로젝트 (self-study-01) 를새롭게만들고환경설정을하며 JSP 파일 (name.jsp) 을만들어실행하는과정을익힙니다. 난이도중힌트새롭게워크스페이스를만들경우 [File Switch Workspace Other] 를선택하여야합니다. 또한톰캣서버도새롭게등록해야합니다. 이장을시작하기전에 이제서블릿을본격적으로학습할시간입니다. 서블릿의라이프사이클을잘알고있다면 서블릿에서한글처리와데이터통신을잘할수있다면 get 방식과 post 방식을자세하게알고싶다면이장을꼭보셔야합니다. 폼을만들어데이터를가져와서브라우저에표현하는서블릿을능숙하게만들수있다면, 다음장으로건너뛰어도좋습니다. 62 1 장

서블릿프로그램을만들어보자 복잡한개념을먼저설명하기전에우선서블릿이라는프로그램을한번만들어봅시 다. 보통처음프로그래밍언어를배울때처럼여기에서도역시 Hello Servlet 을 3. URL Mapping이란서블릿을동작시키기위해서실제자바클래스이름대신에사용하는문자열을말합니다. 즉그문자열을부르면맵핑된해당서블릿이호출되는것이죠. [URL mappings:] 목록에서항목을선택한후 [Edit] 버튼을클릭합니다. [URL Mappings] 창이나타나면 [Pattern:] 입력란에패턴명 (/hello) 을입력한후에 [OK] 버튼을클릭합니다. 출력하기위한서블릿클래스를만들어보겠습니다. 또한서블릿을요청하기위한 URL Mapping( 바로뒤에설명 ) 을실제자바클래스 명과는다른이름으로지정하는방법도알아보겠습니다. [ 직접해보세요 ] Dynamic Web Project 만들고서블릿만들기 1. [File New Dynamic Web Project] 를선택하여프로젝트이름 (web-study-02) 을입력합니다. [Project Explorer] 에서새로생성된웹프로젝트 (web-study-02) 를클릭하여선택한후 [New Servlet] 을선택합니다. 4. 이번에작성하는서블릿클래스는브라우저의주소란에서블릿이름을직접입력해서실행시키는 get 방식으로요청할것이므로 doget만체크한후 [Finish] 버튼을클릭합니다. 2. [Create Servlet] 창이나타나면패키지 (unit01) 와서블릿클래스이름 (HelloServlet) 을입력한후 [Next] 버튼을클릭합니다. 5. 다음과같은서블릿클래스가생성됩니다. 64 2 장서블릿의기초 65

23 24 25 26 out.print("</h1></body></html>"); out.close(); } } 4 : 출력스트림인 PrintWriter를사용하기위해서는 import를해야하는데, 이클립스에서는 [Ctrl+Shift+ 오우 ( 알파벳 )] 을누르면자동으로 import됩니다. 혹시 PrintWriter를입력하는동안에 import 구문이자동으로추가될수도있으므로컴파일에러메시지가나타날경우에만 [Ctrl+Shift+ 오우 ( 알파벳 )] 을눌러자동 import하면됩니다. 20~24 : 서블릿은실행결과를클라이언트에게 HTML 문서로응답해주기때문에 response로부터얻어온출력스트림인 out 객체의출력메소드인 print에일일이하드코딩한 HTML 태그를기술해주어야합니다. 24 : 출력스트림과같은자원들은사용이끝나면이를안전하게닫아주어야합니다. 6. 생성된서블릿클래스의 doget( ) 내부에클라이언트에게응답해줄메시지 ("Hello Servlet") 를 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 HTML 코드로작성합니다. package unit01; import java.io.ioexception; import java.io.printwriter; // PrintWriter 클래스사용을위한 import 문 import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/hello") public class HelloServlet extends HttpServlet { private static final long serialversionuid = 1L; protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // 클라이언트에게응답할페이지정보를셋팅한다. response.setcontenttype("text/html"); // [Ctrl+Shift+ 오우 ( 알파벳 )] : 자동 import PrintWriter out=response.getwriter(); out.print("<html><body><h1>"); out.print("hello Servlet"); 참고 private static final long serialversionuid = 1L; 는무엇일까요? 자동으로추가된 14라인은클래스를구분하기위한값으로사람에게주민등록번호와같은역할을합니다. 객체의직렬화와같이객체에저장된데이터를일렬로입출력할때 JVM은같은클래스이름과버전 ID를가진객체를출력합니다. JVM은버전 ID가다른객체의직렬화된형태와연결하는것을거부합니다. 클래스는명시적으로 serialversionuid 필드를정의해클래스버전에따른고유번호를포함하기때문입니다. 7. 실행을하기위해서는서블릿클래스를선택한후에 [Run Run] 을선택합니다. 단축키를사용하고자할경우에는 [Ctrl + F11] 을누릅니다. 참고코드인사이트로코딩을손쉽게합시다. 코드편집과정에서클래스의앞부분 ( r ) 만입력한후에 [ 컨트롤 + 스페이스바 ] 를누르면해당스펠링으로시작되는클래스들을목록으로보여줍니다. 목록에서원하는클래스이름 ( response ) 을클릭하면코드가자동입력됩니다. 이를코드인사이트라고합니다. 66 2 장서블릿의기초 67

언트에서비스가되는것입니다. 하나의웹서버는병원관리나학원관리, 영화예매관리, 온라인쇼핑몰등다양한서비스를제공할수있습니다. 이러한각각의서비스는개별적인웹애플리케이션으로작성해야하며웹애플리케이션하나당하나의프로젝트를생성합니다. 병원관리를위한웹애플리케이션은병원관리프로젝트로학원관리웹애플리케이션은학원관리프로젝트를개별적으로생성합니다. 이클립스에서생성하는하나의프로젝트는하나의웹애플리케이션이됩니다. http://localhost:8181 까지입력하여웹서 코드를입력하다보면팝업창에해당클래스가갖고있는메소드나멤버변수들이나타나는것을볼수있는데이는프로그래머가메소드의이름을일일이입력해야하는불편함을해소시켜줍니다. response.set 까지입력하고 [ 컨트롤 + 스페이스바 ] 를클릭하면해당스펠링으로시작되는메소드목록을보여줍니다. 목록에서원하는메소드 (setcontenttype) 를선택하면코드가자동으로입력됩니다. 버까지접근했다면어떤서비스를받을지에따라그이후에기술되는내용이달라지는데, 이후에기술하는문자열을컨텍스트패스라고하고이에의해서요청되는웹애플리케이션이달라집니다. 컨텍스트패스 Context Path란개념을다시정리해서말하자면웹서버에서제공하는다양한웹애플리케이션을구분하기위해서사용하는것입니다. 병원관리를위한 웹애플리케이션을위한병원관리프로젝트를 hospital 이란이름으로이클립스에서 생성하면 hospital 이란컨텍스트패스가추가되고외부에서이애플리케이션에접근 할때에는다음과같은 URL 을입력합니다. http://localhost:8181/ hospital 병원관리애플리케이션에접근하기위한컨텍스트패스 영화예매웹애플리케이션을 movie 란이름으로프로젝트를생성하면 movie 란 서블릿을요청하기위한 URL은다음과같습니다. http://localhost:8181/ web-study-02 / hello 켄텍스트패스서블릿요청 URL 패턴서블릿을요청하기위한 URL에서 http://localhost 는웹서버에접속하기위한 IP 주소이고 8181은톰캣을설치하면서지정한포트번호입니다. 그렇기때문에 http:// localhost:8181 은톰캣서버에접속하겠다는의미입니다. 컴퓨터가웹서버로동작하도록하기위해서 1장에서 WAS의한종류인톰캣서버를설치했습니다. 우리가작성하는웹애플리케이션은톰캣서버에의해서클라이 컨텍스트패스가추가되고외부에서이애플리케이션에접근할때에는다음과같은 URL 을입력합니다. http://localhost:8181/ movie 영화예매애플리케이션에접근하기위한컨텍스트패스 톰캣서버에서클라이언트에게웹애플리케이션을서비스해주기위해서는톰캣 서버에웹애플리케이션을등록해야합니다. 등록방법은톰캣서버의 server.xml 파 일의 <Context> 태그를사용하여컨텍스트패스를추가합니다. 68 2 장서블릿의기초 69

<Context docbase="web-study-02" path="/web-study-02" reloadable="true" source="org.eclipse.jst.jee.server:web-study-02" /> 뒤에추가되어한줄에 <Context> 태그가여러번기술되기때문에스크롤바를움직 여오른쪽끝으로가야보입니다. 이클립스를사용하지않고웹애플리케이션을개발할때에는일일이 <Context> 태그를개발자가기술해야했지만이클립스는컨텍스트패스를프로젝트단위로자동생성해줍니다. 톰캣서버의환경설정을위한 server.xml 파일을열어보면이클립스에서자동으로추가해주는컨텍스트패스를확인할수있습니다. 나중에추가된웹프로젝트에대한 <Context> 태그를찾으려면스크롤바를움직여서오른쪽끝으로가서확인하는번거로운작업을반복해야하기때문에들여쓰기를하여 <Context> 태그가서로다른라인에출력되도록하면됩니다. 하지만들여쓰기를개발자가직접하는것이번거롭다면 [Source Format] 메뉴를선택하거나단축키인 [Ctrl+Shift+F] 를사용하면코드가자동으로들여쓰기가 server.xml 을이클립스에서열어보면위와같이나오지않고 1 장에서만든 <Context 됩니다. docbase="web-study-01".../> 만보이고 <Context docbase="web-study-02".../> 는보이지않습니다. 이러한현상이나타나는이유는 <Context> 태그가웹애플리케이션을최초로실 행시키면서추가되는데, 새로운 <Context> 태그가이미존재하는 <Context> 태그 <Context> 태그에 path 속성이바로서블릿을요청할때지정할 URL에기술할가상패스입니다. 앞의그림에서보면 path 속성값이프로젝트이름인 /webstudy-02 로지정되어있음을확인할수있습니다. 이클립스에의해 serever. xml 파일에자동추가된 <Context> 태그덕분에톰캣이컨텍스트패스 /webstudy-02 를인식할수있게됩니다. 이제위에서실습한서블릿클래스의구조에대해서살펴보도록합시다. 70 2 장서블릿의기초 71

@WebServlet("/hello") public class HelloServlet extends HttpServlet { ➊ ➋ 그렇다면 URL 매핑을하는이유는뭘까요? } protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out=response.getwriter(); out.print("<html><body><h1>"); out.print("hello Servlet"); out.print("</h1></body></html>"); out.close(); } ➌ ➍ ➎ ➏ ➐ 2 분만생각해봅시다 실제서블릿클래스를공개하지않기위해서입니다. 실제호출되는서블릿클래스 는 HelloServlet 이지만외부에서이서블릿을요청할때에는서블릿클래스이름이 아닌서블릿클래스와매핑된 URL 인 hello 로접근합니다. hello 로요청하면 @WebServlet 어노테이션으로 URL 매핑 @WebServlet(➊) 은서블릿 3.0에서부터제공되었으며서블릿클래스의요청을위한 URL 매핑을보다쉽게자바클래스에서설정할수있도록제공되는어노테이션입니다. 서블릿 3.0 이전에는 web.xml 에서매핑을했기때문에다소불편함이있었습니다. 참고 @WebServlet(/hello) HelloServlet 클래스가요청을받는다. public class HelloServelt extends HttpServlet{ } 즉, 서블릿클래스를요청하기위해서브라우저의주소입력란에서블릿클래스이름대신 URL 매핑으로지정한이름을입력하여호출하기위한설정입니다. 이이름은서블릿클래스를생성하는단계에서직접지정한이름입니다. 어노테이션 (Annotation) Java 5.0부터 AT 사인 (@) 으로시작하는어노테이션이지원되었습니다. 어노테이션은문장이나문서에추가적인정보를기입하는것을말합니다. 자바프로그램에영향을주는것이아니라컴파일할때환경설정을변경해줄것을알려주는주석형태를말합니다. 이전에는환경설정을 XML 파일에서직접해왔습니다. 하지만 XML 파일을열어서일일이환경설정하는일이번거롭기도하고 XML 문법을시간내어학습해야만하기때문에개발자가직접 XML 파일에서작업하지않고자바코드에서어노테이션을사용하는방식으로쉽게환경을설정하기위해자바 5.0에서부터등장하게된것입니다. 어노테이션등장덕분에개발시간이단축되었습니다. URL Mapping 이란서블릿을동작시키기위해서실제자바클래스명 (HelloServlet) 을사용하는대신서블릿을요청하기위한문자열 (hello) 을서블릿클래스와매핑시키 는것을말합니다. 마지막에기술한 hello 는 URL pattern 으로 @WebServlet 어노테이션에의해서 자바클래스명인 HelloServlet 대신 hello 로서블릿을요청할수있습니다. 72 2 장서블릿의기초 73

참고개발자가어노테이션으로패턴을지정하는것과이클립스에서직접패턴을지정하는것의차이가있나요? 개발자가 URL pattern을이클립스메뉴에서변경하든하지않았든, 사용자가서블릿을요청하기위해서는브라우저주소입력란에 URL pattern을기술해야만서블릿이요청됩니다. URL Mapping 없이는서블릿을호출하지못합니다. 개발자는자신이만든서블릿클래스가어느경로에무슨이름으로만들어졌는지알아야하지만클라이언트는어느디렉토리에어느파일명으로존재하는지는관심없고 URL 이름을입력하여원하는서비스만받을수있으면됩니다. 만일사용자가서블릿의실제경로와파일이름을직접입력해야한다면디렉토리구조가바뀌었을때사용자에게일일이변경된위치를통보해주어야합니다. 개발자가아닌사용자가실제개발구조를다알아야만사용할수있다면수정된내용을다알고있어야합니다. 하지만매핑을통해사용자가접근하는 URL 이름은실제물리적인위치정보가아니기에이런문제에유연하게대처할수있게됩니다. 또한사용자에게디렉토리구조와파일명을모두공개한다는것은보안측면에서도심각한문제가발생할수있습니다. 요청은 URL pattern으로하고 http://localhost:8181/web-study-02/ hello 서블릿요청 URL 패턴이패턴을 @WebServlet 어노테이션코드의 URL Mapping에서찾아서일치하면이 URL Mapping 바로아래선언된서블릿클래스가요청됩니다. @WebServlet(/hello) HelloServlet 클래스가요청을받는다. public class HelloServelt extends HttpServlet{ } 개발자가직접패턴을지정하지않아도서블릿클래스를생성하면서자동으로서블릿클래스이름을 URL pattern으로하는 @WebServlet 어노테이션코드가추가되어있습니다. 왜냐하면서블릿요청은 URL pattern으로해야하고이렇게패턴으로요청하면패턴과매핑해놓은서블릿이호출되기때문입니다. 우리가이클립스메뉴를열어서패턴을바꾼것은서블릿클래스이름과동일한패턴을사용하지않고전혀다른이름으로서블릿을호출하기위한작업입니다. 메뉴에서패턴을지정한작업에의해서 @WebServlet 어노테이션코드내의패턴이름만바뀐것입니다. 여전히 @WebServlet 어노테이션코드는존재하고이 @ WebServlet 어노테이션코드를통해서만 URL pattern과클래스이름이매핑됩니다. 서블릿클래스정의하기 1 장에서이미언급한대로서블릿클래스를정의하는것은정형화되어있습니다. 새 롭게서블릿클래스를정의하기위해서는 javax.servlet.http 패키지에서제공하는 HttpServlet(➋) 클래스를상속받아구현해야하고브라우저를통해외부에서실행 되기때문에접근제한자는반드시 public(➋) 이어야합니다. 접근제한자는반드시 public 이어야함 public class HelloServelt extends HttpServlet { } 서블릿클래스이름 HttpServlet 의상속을받아야함 우스운질문일수있겠으나, 왜서블릿은위와같이정형화한형태를띄게된걸까 요? 그냥일반자바클래스처럼만들면안될까요? 다시한번언급하지만 URL Mapping은 URL pattern과서블릿클래스이름을매핑해놓는것을의미합니다. 1 분만생각해봅시다 개발자가 URL pattern을변경하지않은경우 @WebServlet("/HelloServlet ") public class HelloServlet extends HttpServlet { } 개발자가 URL pattern을변경한경우 @WebServlet("/hello ") public class HelloServlet extends HttpServlet { } 서블릿이정형화되어있다는말은자바클래스에서사용하던상속이란개념을그대로사용하는데자바클래스에서는어떤클래스의상속을받아도되지만서블릿클래스는 HttpServlet 클래스의상속만을받아야하는것으로정해디져있다는것을말합니다. 74 2 장서블릿의기초 75

요청메소드 1장에서설명한것처럼요청방식에따라 doget() 혹은 dopost() 가호출되기때문에요청방식에맞추어서 HttpServlet 클래스의 doget() 혹은 dopost() 를오버라이딩해야합니다. 이메소드는요청이되면호출되기때문에요청메소드라고불리기도합니다. 참고 요청 request 응답 response 클라이언트의요청이있을때마다 doget 메소드가자동호출된다. HttpServlet 을상속받은서브클래스 (HelloServlet) doget 웹서버 HttpServletRequest 객체에의해서요청이처리되고 HttpServletResponse 객체에의해서처리결과가전달된다. 오버라이딩을기억하시나요? 자바의클래스들은부모 ( 수퍼 ) 클래스에모든필드나메소드를상속받아사용합니다. 상속받아사용하던메소드의기능을더이상사용하지않고자식 ( 서브 ) 클래스에서새롭게메소드를정의해서사용하는것을오버라이딩이라고합니다. 참고로위의서블릿은 get 방식으로만요청을처리하는데, 하나의서블릿이라도 get 과 post 방식에따라서로다른기능을제공해야하는경우도있기때문에그럴 경우에는 doget() 과 dopost() 를모두오버라이딩해야합니다. 응답객체에콘텐트타입지정하기 우리가처음으로작성할서블릿은브라우저의주소란에직접서블릿이름을입력 하여수행시킬것이기때문에 HttpServlet 의 doget() 을오버라이딩 (➌) 하여처리를 위한코드를입력하겠습니다. HttpServletResponse 객체인 response 로 setcontenttype() 메소드 (➍) 를호출하 여클라이언트에게응답할페이지에대한환경설정을결정해주어야합니다. 응답 방식이 text/html 로지정되어있으므로 text 나 html 로보여주겠다는의미입니다. 요청처리 응답처리 참고 public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException, { 예외처리 } doget() 은두개의매개변수 (HttpServletRequest, HttpServletResponse) 를갖습니다. HttpServletRequest는클라이언트의요청 (request) 을처리하고, 서블릿의실행방식일반적인자바클래스를실행하기위해서는 main 메소드가있는클래스에서객체를생성하여실행해야합니다. 하지만서블릿은이런방식으로실행되지않고웹서버가실행을해주는독특한방식을갖습니다. 서블릿은 Event-Driven Programming으로사용자의요청이들어오면동작 ( 실행 ) 을시작합니다. 요청이들어오면톰캣서버가서블릿객체를생성한후에 init( ) 메소드를호출한후요청방식에따라 doget( ) 혹은 dopost( ) 메소드가호출됩니다. 뒤에자세하게배우게되니지금은이정도만알고넘어갑시다. HttpServletResponse 는요청처리결과를클라이언트에게되돌리기 ( 응답하기, response) 위해사용됩니다. doget() 은반드시예외처리 (IOException, Servlet Exception) 를해주어야하는데, 일반적으로 throws 절을이용해서 doget 메소드를 결과로출력할내용이한글일경우인코딩방식을지정하지않으면한글이깨지는 현상이나타납니다. 호출한웹서버에게예외처리를넘깁니다. 76 2 장서블릿의기초 77