Top

스트럿츠2 프로그래밍

  • 지은이현철주, 정광선, 민상기
  • ISBN : 9788960770287
  • 40,000원
  • 2008년 01월 03일 펴냄
  • 페이퍼백 | 808쪽 | 188*255mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

완전히 새로운 아키텍처 엔진을 장착한 차세대 웹 개발 프레임워크
- 제로 컨피규레이션 지향으로 한층 간결해진 환경설정
- POJO 기반의 개발이 가능한 자유로운 프로그래밍
- 직관적이고 진보적인 웹 애플리케이션 프레임워크
- 수월한 개발, 뛰어난 확장성의 오픈소스 프레임워크



[ 책 소개 ]

국내에 MVC 기반의 개발과 오픈소스 프레임워크의 확산을 이끌었던 스트럿츠가 새로운 모습으로 나타났다. 기존의 틀에 얽매이지 않고, 그 동안 많은 개발자들의 협업과 경험을 통해 습득된 더 나은 아이디어들을 흡수하며, 정반합의 발전과정을 밟아나가고 있다.
여전히 스트럿츠2의 목적은 더 쉽고 빠른 개발을 통한 생산성 향상이며, 이를 위해서 오픈소스 진영의 베스트 프렉티스를 받아들이는 데 주저함이 없는 듯하다.

“스트럿츠 차기 버전은 루비온 레일즈(Ruby on Rails)나 나노웹(NanoWeb)의 심플함, 웹워크2의 세련미, 비하이브의 툴 친화성과 페이지 플로우와 같은 장점들과 스트럿츠1을 결합하는 것을 그 목적으로 하고 있다.”

스트럿츠 차기 버전의 제안에 담겨있는 위의 문장은 스트럿츠2의 향후 발전 모습을 기대해 볼 수 있는 단초가 된다.
POJO 기반의 액션과 폼, AJAX 태그, 인터셉터 기반의 액션 처리, 편리한 디폴트 환경 설정, 강력한 플러그인 프레임워크와 같은 특징들은 기존의 스트럿츠 사용자에게 큰 매력으로 다가올 것이다. 또한 자바 웹 개발 입문자에게는 직관적인 스트럿츠2 설정과 액션의 개발을 통해 쉽게 MVC 기반의 웹 개발을 가능하게 하는 좋은 도우미가 될 것이다.


[ 이 책에서 다루는 내용 ]

● 스트럿츠2 개발 환경 구축하기
● 스트럿츠2의 기본 개념(액션, 리절트, 인터셉터)
● 태그 컴포넌트 사용법
● 스트럿츠2 아키텍처와 환경 설정 방법
● AJAX 기능 활용 방법
● 파일 처리, 유효성 검사, 국제화
● 다양한 플러그인 사용법
● 예외 처리, 프로파일링, 로깅
● 태그 레퍼런스


[ 이 책의 구성 ]

이 책은 개발 환경 세팅부터 스트럿츠의 주요 개념과 아키텍처, 태그뿐만 아니라 다양한 기능들을 예제를 통해 학습할 수 있도록 구성되었다. 또한 웹 개발 입문자를 위해 스트럿츠2를 이해하는 데 필요한 웹 개념들을 부분적으로 포함했다. 누구나 이 책을 통해서 쉽게 스트럿츠2 개발 환경을 구축하고, 다양한 스트럿츠2의 기능들을 활용해 볼 수 있을 것이다. 다양한 스트럿츠2 태그의 레퍼런스를 포함하여, 태그 사용법을 익히는 데 시간을 절약할 수 있도록 했다.

1부는 초보 개발자라도 스트럿츠2를 사용하여 쉽게 웹 애플리케이션을 개발할 수 있도록 구성하였다. 스트럿츠2의 아키텍처에 대한 이해가 깊지 않더라도 예제를 따라 실습하다 보면, 쉽게 스트럿츠2의 기본적이고 중요한 개념을 익힐 수 있다.

2부는 스트럿츠2의 아키텍처를 자세하게 다룬다. 1부를 통해 기본적인 스트럿츠2의 사용법을 익혔더라도, 이를 충분히 활용하기 위해 스트럿츠2의 아키텍처를 이해해야 한다. 2부를 통해서 스트럿츠2가 내부적으로 어떻게 동작하는지 자세하게 이해할 수 있다.

3부는 스트럿츠2를 활용하는 기술에 대해 다룬다. 웹 애플리케이션을 쉽게 국제화하고, 다른 유용한 오픈 소스를 플러그인 방식으로 손쉽게 활용할 수 있는 방법과 태그 라이브러리의 사용법을 살펴볼 것이다. 예제 중심으로 구성되어 있으며, 차례 대로 실습해보면 스트럿츠2가 제공하는 플러그인을 유용하게 사용할 수 있다.

4부는 부록으로서, 이 책을 통해 제공되는 예제를 실습하기 위한 개발 환경을 구축하는 방법과 국제화 지원을 위한 국가별 ISO-639-1 코드를 실었다. 스트럿츠2 애플리케이션을 개발하는 데 도움이 될 것이다.

이 책을 읽는 독자는 다양한 분야와 기술에 이미 익숙한 독자도 있을 것이고, 막 첫 걸음을 땐 자바 웹 애플리케이션 개발의 새내기도 있을 것이다. 자신의 관심 사항에 맞게 책을 읽어나갈 수 있도록 1부에서는 기초적인 내용 위주로 다루었고, 2부부터는 심화된 내용을 학습할 수 있도록 구성하였다.

[ 부록 CD 소개 ]

- 이 책에서 사용하는 예제 소스와 프로젝트
- 아파치 톰캣, 이클립스 통합환경과 플러그인
- 스트럿츠2, 스프링2외 다수의 라이브러리
- J2SE5 설치 파일


[ 추천의 글 ]

자바만큼 다양하고 많은 웹 개발 기술을 가진 언어도 없습니다. 자바에는 표준 웹 기술인 서블릿, JSP, JSF와 J2EE 블루프린트에 소개된 WAF(Web Application Framework)를 비롯해서 스트럿츠를 필두로 한 오픈 소스 웹 프레임워크와 상용 솔루션까지 하면 수백여 개가 존재합니다. 이렇게 수많은 웹 기술이 존재하는 것이 자바 개발자들에게 그다지 반가운 일은 아닙니다. 어떤 프레임워크를 사용해야 할지 선택하는 것이 항상 고민이기 때문입니다. 또 매번 사용해야 할 웹 프레임워크를 학습해야 하는 부담 또한 만만치 않습니다.

이런 웹 기술의 홍수 속에서 주목 받던 두 개의 프레임워크가 있었습니다. 하나는 스트럿츠고 하나는 웹워크입니다. 스트럿츠는 웹 개발은 지저분한 스파게티 코드일 수밖에 없다는 그간의 통념을 깨고 MVC라는 멋진 아키텍처를 웹에 결합시켜서 등장한 자바 웹 프레임워크의 원조라고 불릴 수 있는 기술입니다. 다양한 벤더와 툴의 지원과 왕성한 활동을 가진 커뮤니티의 지원을 받아서 지금까지 가장 많이 사용되었던 웹 기술입니다. 웹워크는 스트럿츠에 비해서 많이 알려지지는 않았지만 견고한 아키텍처와 뛰어난 기능으로 MVC 아키텍처를 가진 프레임워크 중 기술적으로 가장 뛰어나다는 평가를 받아왔습니다. 하지만 스트럿츠는 초기 설계의 경직성과 복잡한 설정 등의 기술적인 한계를 가지고 있었고 웹워크는 뛰어난 기술임에도 문서와 도구의 부족과 충분한 커뮤니티를 확보하지 못한 이유로 그만큼 알려지지 않았던 문제가 있었습니다.

스트럿츠2는 바로 이 두 개의 뛰어난 프레임워크가 가진 단점을 극복하고, 장점을 결합시켜서 만들어진 획기적인 프레임워크입니다. 웹워크라는 뛰어난 기술을 가진 프레임워크를 기반으로 해서 스트럿츠라는 견고한 커뮤니티의 활동을 결합시켜 새로운 프레임워크를 탄생시켰습니다. 웹워크의 유연한 구조가 스트럿츠 커뮤니티라는 왕성한 활동을 통해서 어떻게 스트럿츠2라는 진화된 모습으로 발전해가는지를 지켜보는 것은 매우 즐거운 일이었습니다.

뛰어난 기술과 커뮤니티의 통합이라는 멋진 과정을 통해서 탄생한 스트럿츠2가 한국에서도 많이 보급되어 자바 개발자들의 웹 개발에 많은 유익을 주기를 기대합니다.

아직은 주로 영어권의 커뮤니티를 통해서만 소개되고 자료가 공개되어 있는 스트럿츠2에 대한 학습의 부담을 가지고 있는 한국 개발자들에게 현철주님의 『스트럿츠2 프로그래밍』은 매우 친절한 안내자가 되어줄 것입니다.

『스트럿츠2 프로그래밍』은 지루하고 방대한 레퍼런스 또는 너무 뻔한 초보적인 예제 소개라는 기술 소개서가 가지는 함정에 빠지지 않고, 절제된 핵심 내용을 실용적인 예제와 함께 현실에서 꼭 필요로 하는 확장기술까지 고려해서 소개하고 있는 최적화된 가이드입니다. 뛰어난 프레임워크인 스트럿츠2가 만난 『스트럿츠2 프로그래밍』은 마치 웹워크가 열정적인 스트럿츠 커뮤니티를 만난 것과 같습니다. 함께 함으로 그 진가가 드러날 수 있다는 원리가 스트럿츠와 웹워크가 그랬던 것처럼, 스트럿츠2와 『스트럿츠2 프로그래밍』 그리고 이 책을 접하는 개발자들을 통해서 또 다시 증명되기를 기대합니다.

이 일 민
DevelopGate 대표, toby.epril.com 블로그
에이콘 오픈 소스 프로그래밍 시리즈 에디터

저자/역자 소개

[ 저자 소개 ]

현철주
경희대학교 문리대 물리학과 재학 중 카이스트 부설 시스템 공학센터(SERI)의 교육과정을 이수했다. 졸업 후 비트 전산 교육센터에서 윈도우즈 과정을 수료했고, 이후 대우정보시스템에서 네트워크 기반 문자인식 이미지 처리 시스템을 개발했으며, 문서 자동 입력 시스템 등 금융, 공공기관, 자동차 회사 등의 프로젝트를 수행했다. 또한 EDMS 솔루션을 개발했고, 자바 기반의 대학 종합 정보화 사업의 아키텍트 및 물류 시스템 PM 및 개발 업무에서 스트럿츠 기반의 자체 프레임워크를 이용해 시스템 개발 작업을 수행하면서 오픈소스에 관심을 갖기 시작했다.
최근 아첸 소프트웨어를 창업하여 1년간 월간 마이크로소프트웨어에 스트럿츠2 관련 기사를 기고했으며, 다수의 비즈니스 시스템 개발 및 컨설팅과 함께 아첸 자바 커뮤니티(www.artszen.org) 사이트를 운영하고 있다.

정광선
숭실대학교 컴퓨터학부와 소프트웨어공학 연구실을 졸업한 후, 대우정보시스템 기술연구소에서 자바 분야의 오픈소스를 활용한 개발 프레임워크 구축, 지원, 교육을 진행하고 있다. 2006년부터 J2EE 애플리케이션의 성능 및 신뢰성 테스트를 수행했으며, 현재는 스트럿츠2와 스프링 기반으로 개발하는 프로젝트를 기술 지원하고 있다.

민상기
경원대학교 산업공학과 졸업 후 2000년부터 대우정보시스템에서 이미지 솔루션사업부를 시작으로 SI사업부를 거치면서 이미지 솔루션과 문자인식 관련 시스템을 개발했으며, 다양한 사이트에서 웹개발환경을 경험하였다. 현재 아첸 자바 커뮤니티를 운영하며 스트럿츠2 보급에 힘쓰고 있다.


[ 저자 서문 ]

정돈된 자료나 가이드가 흔치 않았던 웹 개발 초창기, 혜성처럼 나타난 스트럿츠1은 웹 애플리케이션 개발에 대한 훌륭한 가이드를 제공하면서 개발자들을 사로잡았다. 스트럿츠1을 접하게 된 개발자들은 스트럿츠1뿐만 아니라 이전까지 크게 흥미를 느끼지 못하던 오픈 소스에 대한 관심을 키워나갔다. 스트럿츠1과 함께 개발자들은 다양한 오픈 소스를 접하면서 그들의 막강한 기능과 가능성에 눈을 뜨기 시작했던 것이다.

세계 곳곳의 열정적인 개발자들과 커뮤니티의 활동을 통해 다양하고 유용한 오픈 소스 프레임워크들이 탄생하고, 실제 시스템 개발에 큰 도움을 주고 있다. 심지어 상용 벤더들도 이러한 오픈 소스 프레임워크를 상용 솔루션에 포함시킬 정도로 그 기능과 신뢰가 더욱 두터워졌다.

웹 개발의 새로운 기준을 마련하기 위해 스트럿츠2는 스트럿츠1의 모습을 과감히 탈피하고, 여러 유용한 프레임워크의 장점을 흡수하여 새로운 모습으로 탄생시키기에 이르렀다. 또한 스트럿츠2는 개발자 의도대로 직관적으로 개발할 수 있는 쉬운 사용법을 제공하며, 복잡하고 반복적인 처리는 프레임워크가 떠안을 수 있도록 하고 있다.

스트럿츠2로 프로그래밍을 하는 것은 간단하고 명료해서 좋다.

“복잡한 처리를 위한 아키텍처는 프레임워크가 모두 책임질 테니, 개발자는 편안하고 쉽게 작업 하라.” 이것이 바로 스트럿츠2의 철학이 아닐까. 이 책을 읽는 여러분은 기존의 모습과 확연히 달라진 새로운 웹 애플리케이션 개발 프레임워크로서 스트럿츠2의 흥미로움에 매료될 것이다. 스트럿츠2는 단순하고, 편리한 개발을 할 수 있는 환경을 제공해주는 반면 프레임워크를 사용하며 프레임워크에 종속되지 않는 자유로움을 느낄 수 있는 개발을 배려하고 있다. 스트럿츠2는 아키텍처의 모습에서도 많은 매력을 지니고 있지만 실제 개발 현장에서 접할 때 진정 그 장점을 느낄 수 있다.

독자분들께서 스트럿츠2와 이 책 『스트럿츠2 프로그래밍』을 통해 좀더 쉬운 방법으로 고급스런 웹 애플리케이션을 만들며, 새로운 학습과 경험을 통해 또 하나의 틀을 깨고 한 단계 아니 그 이상 성장하시기를 바란다.

목차

목차
  • 1부 기본 23
  • 1장 스트럿츠2란 무엇인가? 25
    • 1.1 스트럿츠2의 배경과 달라진 점 25
    • 1.2 스트럿츠2 들여다 보기 28
    • 1.3 스트럿츠2의 핵심: 액션과 리절트 32
    • 1.4 스트럿츠2의 컨트롤러: 필터 디스패처 41
    • 1.5 웹 요청 처리에 대한 몇 가지 기본 지식 43
  • 2장 기본 예제를 통해 스트럿츠2와 친해지기 49
    • 2.1 문자열 출력 49
    • 2.2 문자열 목록 출력 55
    • 2.3 객체 출력 59
    • 2.4 객체 목록 출력 64
    • 2.5 날짜 출력 69
  • 3장 다양한 태그 컴포넌트 다루기 75
    • 3.1 스트럿츠2 구성 요소 미리보기 75
      • 3.1.1 인터셉터 개요 77
      • 3.1.2 인터셉터 스택이란? 81
      • 3.1.3 리절트의 종류 85
      • 3.1.4 환경설정의 개요 88
      • 3.1.5 태그 라이브러리의 종류 93
    • 3.2 태그 사용을 위한 필수 지식 97
      • 3.2.1 액션, 인터셉터, 밸류 스택과 태그와의 관계 97
      • 3.2.2 비 문자열 속성 99
      • 3.2.3 태그의 value 속성은 객체이다! 100
      • 3.2.4 표현식 언어의 표기법 101
      • 3.2.5 OGNL 이란? 101
    • 3.3 텍스트 필드를 이용한 문자열 입출력 106
    • 3.4 문자열 상자 사용하기 115
    • 3.5 날짜 입출력 컴포넌트를 사용하기 121
    • 3.6 태그를 이용한 페이지 링크 127
    • 3.7 리스트 타입을 이용하여 과목 선택 체크 박스 만들기 137
    • 3.8 리스트 타입을 이용하여 과목 선택 셀렉트 박스 만들기 142
    • 3.9 조건 처리 태그를 사용하여 영화 순위 목록 페이지 만들기 153
    • 3.10 태그를 이용하여 분리된 리스트 합치기 157
  • 2부 심화 165
  • 4장 스트럿츠2 아키텍처 167
    • 4.1 스트럿츠2 아키텍처 개념도 167
    • 4.2 필터 디스패처의 역할 170
    • 4.3 액션 프록시와 액션 인보케이션 171
      • 4.3.1 액션 프록시와 액션 인보케이션의 관계 171
      • 4.3.2 액션 인보케이션의 역할 174
    • 4.4 액션 컨텍스트 178
    • 4.5 액션 매퍼 182
      • 4.5.1 기본 액션 매퍼 182
      • 4.5.2 커스텀 액션 매퍼 191
      • 4.5.3 레스트풀 액션 매퍼 191
      • 4.5.4 레스트풀2 액션 매퍼 192
      • 4.5.5 혼합 액션 매퍼 193
    • 4.6 인터셉터 195
      • 4.6.1 인터셉터의 개념 195
      • 4.6.2 인터셉터 인터페이스 197
      • 4.6.3 인터셉터의 종류 198
      • 4.6.4 인터셉터의 파라미터 오버라이딩 217
      • 4.6.5 인터셉터와 필터의 차이 218
      • 4.6.6 인터셉터의 기능별 분류 219
      • 4.6.7 인터셉터 분석: 프리페어 인터셉터 220
    • 4.7 액션 227
      • 4.7.1 액션의 개념 227
      • 4.7.2 액션 상관 관계 228
      • 4.7.3 액션 체인 233
      • 4.7.4 액션 다중 호출 241
    • 4.8 리절트 247
      • 4.8.1 리절트의 개념 247
      • 4.8.2 기본 리절트 타입 249
      • 4.8.3 프리 리절트 리스너 257
  • 5장 스트럿츠2 환경설정 261
    • 5.1 환경설정 파일 개요 261
      • 5.1.1 web.xml에 정의할 수 있는 내용 262
      • 5.1.2 struts.xml 소개 267
      • 5.1.3 struts.properties 소개 273
      • 5.1.4 struts-default.xml 소개 280
      • 5.1.5 velocity.properties 소개 287
    • 5.2 관리적인 요소의 환경설정 288
      • 5.2.1 빈 설정 289
      • 5.2.2 상수 설정 290
      • 5.2.3 패키지 설정 292
      • 5.2.4 네임스페이스 설정 294
      • 5.2.5 인클루드 설정 295
    • 5.3 요청 처리에 관련된 요소의 환경설정 296
      • 5.3.1 인터셉터 설정 296
      • 5.3.2 액션 설정 297
      • 5.3.3 리절트 설정 302
      • 5.3.4 와일드 카드를 이용한 액션, 액션 메소드, 리절트 설정 306
    • 5.4 예외 처리 요소의 환경설정 313
      • 5.4.1 예외 설정 313
    • 5.5 성능 튜닝 316
      • 5.5.1 로깅과 개발 모드 해제 316
      • 5.5.2 불필요한 인터셉터 제거 317
      • 5.5.3 올바른 HTTP 헤더 사용 320
      • 5.5.4 스트럿츠2의 정적 데이터 복사 320
      • 5.5.5 /WEB-INF/classes 밑에 freemarker.properties 파일 생성 320
      • 5.5.6 템플릿 파일의 복사 321
      • 5.5.7 테마의 오버라이딩 321
      • 5.5.8 불필요한 세션은 생성하지 마라 321
      • 5.5.9 프리마커를 사용할 때는 프리마커 태그를 사용하라 321
    • 5.6 어노테이션 322
      • 5.6.1 액션 어노테이션 322
      • 5.6.2 인터셉터 어노테이션 324
      • 5.6.3 유효성 검사 어노테이션 326
      • 5.6.4 타입 변환 어노테이션 338
      • 5.6.5 어노테이션을 사용한 액션과 리절트 정의 343
  • 6장 스트럿츠2 태그를 이용한 손쉬운 Ajax 구현 349
    • 6.1 Ajax의 개념과 스트럿츠2의 Ajax 구성 349
    • 6.2 Ajax 기능을 이용한 메뉴 만들기 364
    • 6.3 자동 요청 기능을 이용한 리얼타임 인기 검색어 예제 372
    • 6.4 탭 패널 컴포넌트를 이용한 세미나 목록과 일정 예제 380
    • 6.5 트리 컴포넌트를 이용한 컴퓨터 부품 목록 출력 예제 387
  • 7장 파일 업로드/다운로드 397
    • 7.1 파일 업로드 397
      • 7.1.1 Apache Commons - IO, FileUpload 컴포넌트 다운로드 및 설치 397
      • 7.1.2 파일 업로드 크기 설정 401
      • 7.1.3 파일 업로드를 위한 액션 클래스와 태그 구성 401
      • 7.1.4 단일 파일 업로드 예제 만들기 406
      • 7.1.5 배열을 이용한 다중 파일 업로드 예제 만들기 414
      • 7.1.6 리스트를 이용한 다중 파일 업로드 예제 만들기 420
    • 7.2 파일 다운로드 427
      • 7.2.1 다운로드 액션에서 사용하는 프로퍼티 427
      • 7.2.2 struts.xml에서 다운로드 액션 정의하기 428
      • 7.2.3 액션 클래스 소스 출력하는 예제 만들기 430
      • 7.2.4 파일 다운로드 예제 만들기 435
  • 8장 유효성 검사 443
    • 8.1 스트럿츠2의 유효성 검사 443
      • 8.1.1 유효성 검사 규칙 정의 446
      • 8.1.2 넌 필드 유효성 검사자와 필드 유효성 검사자 448
      • 8.1.3 유효성 검사의 단락 450
    • 8.2 예제로 배우는 유효성 검사 452
      • 8.2.1 기본 유효성 검사를 이용한 퀴즈 예제 만들기 452
      • 8.2.2 클라이언트 유효성 검사를 이용한 퀴즈 예제 만들기 458
      • 8.2.3 필드 유효성 검사를 이용한 예제 만들기 462
      • 8.2.4 넌필드 유효성 검사를 이용한 예제 만들기 469
    • 8.3 어노테이션을 이용한 유효성 검사 473
    • 8.4 스트럿츠2 유효성 검사자 요약 476
      • 8.4.1 required validator 477
      • 8.4.2 requiredStringValidator 477
      • 8.4.3 int validator 478
      • 8.4.4 date validator 479
      • 8.4.5 expression validator 480
      • 8.4.6 fieldexpression validator 481
      • 8.4.7 email validator 481
      • 8.4.8 url validator 482
      • 8.4.9 visitor validator 483
      • 8.4.10 conversion validator 484
      • 8.4.11 stringlength validator 486
      • 8.4.12 regex validator 487
  • 3부 활용 489
  • 9장 애플리케이션의 국제화 491
    • 9.1 국제화 491
      • 9.1.1 애플리케이션의 국제화란? 491
      • 9.1.2 Locale 클래스 이해 492
    • 9.2 스트럿츠2 리소스 번들 494
      • 9.2.1 액션 리소스 번들 495
      • 9.2.2 부모 클래스 리소스 번들 496
      • 9.2.3 인터페이스 리소스 번들 497
      • 9.2.4 패키지 리소스 번들 498
      • 9.2.5 글로벌 리소스 번들 498
      • 9.2.6 리소스 번들의 검색 순서 499
      • 9.2.7 리소스 번들 활용 500
      • 9.2.8 커스텀 리소스 번들 506
      • 9.2.9 리소스 번들 포맷 사용하기 507
  • 10장 스트럿츠2 플러그인 517
    • 10.1 사이트메쉬 플러그인을 이용한 페이지 레이아웃 적용 517
      • 10.1.1 사이트메쉬 개요 517
      • 10.1.2 사이트메쉬 라이브러리 다운로드 및 설치 520
      • 10.1.3 사이트메쉬 플러그인을 사용하기 위한 환경설정 521
      • 10.1.4 데코레이터 페이지 만들기 527
      • 10.1.5 사이트메쉬를 활용한 메인 페이지 출력 예제 만들기 529
    • 10.2 jFreeChart 플러그인을 이용한 차트 출력 540
      • 10.2.1 JFreeChart 개요 540
      • 10.2.2 JFreeChart 라이브러리 다운로드 및 설치 542
      • 10.2.3 JFreeChart를 사용하기 위한 환경설정 544
      • 10.2.4 사이트 방문자 수 차트 출력 예제 만들기 545
    • 10.3 JasperReport 플러그인을 이용한 보고서 출력 551
      • 10.3.1 JasperReport 개요 551
      • 10.3.2 스트럿츠2의 JasperReport 플러그인 555
      • 10.3.4 JasperReport 라이브러리 다운로드 및 설치 558
      • 10.3.5 도서 목록 보고서 pdf 출력 예제 만들기 559
    • 10.4 스프링 플러그인을 사용한 의존성 주입 568
      • 10.4.1 스프링 개요 568
      • 10.4.2 스프링 라이브러리 다운로드 및 설치 570
      • 10.4.3 스프링을 사용하기 위한 환경설정 572
      • 10.4.4 코드 서비스를 스프링으로 관리하는 예제 만들기 575
    • 10.5 스트럿츠2의 기타 플러그인 582
      • 10.5.1 코드 비하인드 플러그인 소개 582
      • 10.5.2 컨피그 브라우저 플러그인 소개 585
      • 10.5.3 JSF 플러그인 소개 590
      • 10.5.4 플렉서스 플러그인 소개 593
      • 10.5.5 스트럿츠1플러그인 소개 594
  • 11장 예외처리/프로파일링/로깅 599
    • 11.1 예외 처리 599
      • 11.1.1 간단한 선언적 예외 처리 방법 601
      • 11.1.2 글로벌 예외 매핑 605
      • 11.1.3 다수의 예외 매핑 608
      • 11.1.4 예외 메시지 가져오기 612
      • 11.1.5 예외 처리 인터셉터 615
      • 11.1.6 예외 로그를 남기기 위한 설정 617
    • 11.2 프로파일링 618
      • 11.2.1 프로파일링 기능의 활성화 619
      • 11.2.2 프로파일 정보 제어하기 623
      • 11.2.3 나만의 프로파일 정보 만들기 623
    • 11.3 로깅 625
      • 11.3.1 로그 설정하기 626
  • 12장 태그 라이브러리 예제 모음 631
    • 12.1 컨트롤 태그 632
      • 12.1.1 <s:generator /> 633
      • 12.1.2 <s:merge /> 638
      • 12.1.3 <s:sort /> 642
      • 12.1.4 <s:subset /> 647
    • 12.2 데이터 태그 653
      • 12.2.1 <s:bean /> 653
      • 12.2.2 <s:debug /> 656
      • 12.2.3 <s:i18n /> 658
      • 12.2.4 <s:include /> 661
      • 12.2.5 <s:push /> 664
      • 12.2.6 <s:set /> 672
    • 12.3 폼 태그 676
      • 12.3.1 <s:checkboxlist /> 678
      • 12.3.2 <s:combobox /> 687
      • 12.3.3 <s:doubleselect /> 692
      • 12.3.4 <s:hidden /> 699
      • 12.3.5 <s:optiontransferselect /> 699
      • 12.3.6 <s:optgroup /> 705
      • 12.3.7 <s:password /> 707
      • 12.3.8 <s:radio /> 710
      • 12.3.9 <s:reset /> 713
      • 12.3.10 <s:submit /> 717
      • 12.3.11 <s:token /> 725
      • 12.3.12 <s:updownselect /> 726
    • 12.4 넌폼 태그 730
      • 12.4.1 <s:actionerror /> 730
      • 12.4.2 <s:actionmessage /> 732
      • 12.4.3 <s:component /> 735
      • 12.4.4 <s:div /> 745
      • 12.4.5 <s:fielderror /> 757
  • 4부 부록 761
  • A1장 개발 환경 구축 763
    • A1.1 J2SE 설치 763
    • A1.2 톰캣 설치 766
    • A1.3 이클립스 WTP 설치 768
    • A1.4 스트럿츠2 설치 771
      • A1.4.1 스트럿츠2 샘플 애플리케이션 설치 및 테스트 772
    • A1.5 샘플 프로젝트 구성 773
      • A1.5.1 이클립스용 톰캣 플러그인 설치 773
      • A1.5.2 이클립스용 프로퍼티 에디터 플러그인 설치 776
      • A1.5.3 이클립스에 Debug Perspective, Resource Perspective 버튼 추가 776
      • A1.5.4 이클립스를 이용한 샘플 프로젝트 작성 778

관련 블로그 글

(공지) 스트럿츠2 데이: 두 번째 아첸 오픈 세미나

지난 1월 7일 열렸던 아첸 오픈 세미나 1st에 이어 제2회 스트럿츠2 오픈 세미나가 3월 29일 토요일 오후 3시에 한빛 ENI 교육 센터에서 열립니다. 첫 행사 때에는 많은 분이 찾아 주셔서 자리를 가득 채우며 뜨거운 성원을 보여주셨죠. 이번 2회 세미나에서는 1회때 진행했던 시간보다 1시간을 추가해서 스트럿츠2와 스프링 IoC를 함께 사용하는 방법과 TDD 부분을 추가할 예정이라고 합니다.

아첸 자바 커뮤니티 신청 게시판에 등록하신 후 참가비 1만원을 입금하시면 『스트럿츠2 프로그래밍』저자 현철주, 민상기, 정광선님 세 분과 김태완님의 열강을 들으실 수 있습니다. 여기서 자세한 내용을 확인해보세요. 아직 여유가 남아있는 듯하니 스트럿츠2에 관심있는 분들, 어서 서두르셔서 많이 참여하시기 바랍니다. (1회 세미나 배너에 이어 이번 배너도 저자 현철주 사장님이 직접 만들어주셨습니다. 봄을 맞아서 노란 색으로 새단장을 해주셨습니다. 재주도 많으시어요~ ^^)

참, 소식 한가지요. 지난 토요일에는 『스트럿츠2 프로그래밍』의 저자들을 저희 에이콘에 소개해주시고 집필의 처음부터 끝까지 산파 역할을 톡톡히 해주신 김태완님이 대전에서 혼인식을 올렸습니다. 지금 일본 규슈에서 신혼여행의 단꿈을 꾸고 계시겠죠? 10년이란 긴긴 시간동안 사귀면서 마치 하루같이 서로에 대한 뜨거운 마음으로 사랑해오신 태완님과 선영님의 행복한 출발을 진심으로 축하드려요. 사실 10년 커플이 그렇게 염장 모드인 건 생전 처음 봤답니다. ㅎㅎ 천생연분인 듯, 정말 행복해보여요~ ^^*

우여곡절끝에 식장에 도착하신 kenu님의 뒷모습이 보이네요. kenu님, 축하곡은 언제 들려주실 건가요? ^^;

약간 이야기가 빗나가긴 했지만, 행복한 결혼 축하드리면서 스트럿츠2 세미나에도 많은 성원 부탁합니다. ^^/ 참여하신 분 중 몇 분을 추첨해서 스트럿츠2 책을 드린답니다~
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

(안내) "스트럿츠 2"를 배울 수 있는 곳
스트럿츠2 프로그래밍』를 출간된 후 며칠되었을 뿐인데, 저자분들이 직강하는 스트럿츠2 세미나가 벌써 두 건이나 계획되어 있네요.

아첸 자바 커뮤니티에서 주관하는 아첸 오픈세미나 1st Struts2 Day가 오는 1월 19일 (토) 오후 12시 30분에 신촌 토즈 본점에서 열립니다.

오늘부터 접수를 받고 있으며, 『스트럿츠2 프로그래밍』을 저술하신 저자 현철주, 정광선, 민상기 세 분이 직접 스트럿츠2의 전반적인 소개와 실습예제에 대한 강의를 진행할 예정입니다. 세미나 장소 마련을 위해서 참가비는 만원을 받고 있다고 합니다. 그래야 이건 제 생각이지만, 혹시나 신청 후 나타나지 않으셔서 다른 분의 참가 기회를 앗는 일은 없으시겠죠? ^^;

자세한 강의내용은 여기서 확인해보시고 어서 등록하세요. 지금 벌써 신청대기중인 분이 많은데요. 아마 인원을 조금 늘리실 계획이라고 하니까 자세한 건 아첸 자바 커뮤니티에서 확인해보세요.

두 번째로 안내해드릴 교육과정은 한빛 교육센터에서 진행하는 "실무 중심의 Struts2" 과정입니다. 노동부 지원과정으로서 1월 26일부터 매주 토요일 아침 9시부터 저녁 6시까지 총 5일간 진행된다고 합니다. 스트럿츠2에 대해 좀더 총체적이고 전문적인 내용을 다루게 될 것 같습니다. 자세한 내용은 해당 웹사이트를 확인해보세요.

스트럿츠 커뮤니티가 웹워크라는 프레임워크를 채택함으로써 새롭게 탄생한 스트럿츠2, 새해를 맞아 열릴 이 두 세미나가 스트럿츠2에 관심 있는 분들의 갈증을 달래줄 좋은 자리가 될 수 있을 것 같습니다.
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

『스트럿츠2 프로그래밍』출간!
에이콘의 108번째 책(오늘 만난 저자 현철주님은 백팔번뇌라는 말로 받아치시더군요), 7번째 저서, 그리고 오픈소스 프로그래밍 시리즈의 11번째 책인 『스트럿츠2 프로그래밍』이 출간되었습니다. 요새 저희가 숫자놀음에 참 재미를 붙였죠? 이 책의 숫자 조합은 저희가 보기에도 참으로 좋더이다! ^^

아시는 분은 아시겠지만, 아쉽게도 며칠 차이로 국내 첫, 혹은 세계 최초의 스트럿츠2 책이라는 찌라시 문구를 남발할 기회는 놓쳤지만, 그래도 오랫동안 정말 공들여 준비한 스트럿츠2 책이라는 점 하나만은 자랑해도 될 것 같습니다. 게다가 아직 외국에서도 스트럿츠2 책은 나온 게 없으니까요. :)

지난 번 출간 알림 블로그 글을 올린 후 오늘까지도 매우 뜨거운 댓글 행진이 이어졌는데요. 혹시 그 댓글들에서 뭔가 유사한 점을 발견하셨나요? 몇 분(호랭이, 짱가)님을 제외하고는 (1) 모두 실명을 쓰셨다는 점 (2) 블로그나 사이트 등 링크가 전혀 없다는 점 ... 뭔가 냄새가 나지 않으신가요? ㅎㅎ 오늘 저자분들이 오셨기에 혹시라도 사연을 알고 계신지 집중 심문을 펼친 결과... 저자분들 중 특히 정모광선님의 탁월한 인간관계 덕이라는 결론을 내리기에 이르렀습니다. ^^; 어찌 됐든 공개적인 자리에서 이처럼 뜨거운 성원을 보내기도 쉽지 않은 일이었음에도 불구하고 응원해주신 여러분께, 그리고 예약주문으로 책을 구입해주신 분들, 앞으로 책 많이 아껴주실 독자분들께 감사 말씀 올립니다.

오늘 케잌까지 사오셔서 함께 출간 축하 해주신 저자분들(현철주님, 민상기님, 정광선님)과 동료 노진환님, 정지영님, 그리고 출판사와 저자분들을 연결해주시고 책 기획, 저술 과정에서도 많은 힘 써주신 김태완님(왼쪽부터 시계방향 ^^;). 모두 즐거웠습니다. 책 나오고 모두 기뻐하시는 모습 보는 게 저희 낙이기도 한 것 같아요.
와, 이 커플시계의 정체는. 아첸자바 커뮤니티를 이끌고 있는 현철주님이 저술을 모두 마치고 난 후 함께 나머지 두 분 역자와 김태완님께 시계를 사주셨다네요! 네 분이 커플시계를 하고 다니시게 된 거죠. 엄청 부러워하는 에이콘 직원들에게도 증쇄를 하게 되면 시계를 사주신다고 약속, 아니 협박을 받았다는 후문이 전해집니다. --;
이제 다음 주 월요일에는 『찰스 페졸드의 WPF』에 이은 마이크로소프트 기술 후속작 『WDF: 윈도우를 위한 차세대 통합 드라이버 개발 모델』이 출간됩니다. 아직 책을 구입하지 못하신 분들은 어서 온라인 서점으로 달려가보세요.
이제 드디어 쥐띠해가 밝은 지 사흘이 넘었네요. 작심삼일이라고 과도하게 세우신 목표들은 3일이 지났으니 이미 접으셨을 테죠? ^^ 2008년 쥐의 해에도 이 마우스와 생사고락을 함께 할 개발자 여러분들 모두 건강하시고 원하시는 것 모두 이루시길 바라겠습니다. (이 시점에서 '웬 뜬금없는 마우스?'하며 쎈스없음을 과시하실 분들이나, 이런 '유치한 짤방을!'이라며 글쓴이의 저급 유머감각을 비웃으실 분은 없으실 거라고 믿으며...)

여기 오신 모든 독자분들. 새해 복 많~이 받으세요. :D

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

스트럿츠2 프로그래밍의 바이블이 출간됩니다!
현철주 정광선 민상기 지음 | 2008년 1월 3일 출간
808페이지 | 40,000원 | 9788960770287

완전히 새로운 아키텍처 엔진을 장착한 차세대 웹 개발 프레임워크, 스트럿츠2!

아첸 자바 커뮤니티의 세분 저자와 그 외 많은 분들이 함께 심혈을 기울여 집필하신 역작 『스트럿츠2 프로그래밍』이 내년 1월 3일 출간됩니다. 2008년 새해를 여는 에이콘 독자들께 드리는 첫 선물이 되겠네요. 위 사진은 오늘 필름교정을 본 출력소에서 인쇄해온 표지를 저희 다른 책에 살짜쿵 끼워서 찍어본 것입니다. :) 실제 출간이 되면 훨씬 더 멋들어진 책으로 탄생하겠죠!

스트럿츠는 초기 설계의 경직성과 복잡한 설정 등의 기술적인 한계를 가지고 있었고 웹워크는 뛰어난 기술임에도 문서와 도구의 부족과 충분한 커뮤니티를 확보하지 못한 이유로 그만큼 알려지지 않았던 문제가 있었습니다.

스트럿츠2는 바로 이 두 개의 뛰어난 프레임워크가 가진 단점을극복하고, 장점을 결합시켜서 만들어진 획기적인 프레임워크입니다. 웹워크라는 뛰어난 기술을 가진 프레임워크를 기반으로 해서 스트럿츠라는 견고한 커뮤니티의 활동을 결합시켜 새로운 프레임워크를 탄생시켰습니다. 웹워크의 유연한 구조가 스트럿츠 커뮤니티라는 왕성한 활동을 통해서 어떻게 스트럿츠2라는 진화된 모습으로 발전해가는지를 지켜보는 것은 매우 즐거운 일이었습니다.

아직은 주로 영어권의 커뮤니티를 통해서만 소개되고 자료가 공개되어있는 스트럿츠2에 대한 학습의 부담을 가지고 있는 한국 개발자들에게 현철주님의 『스트럿츠2 프로그래밍』은 매우 친절한 안내자가 되어줄 것입니다. 『스트럿츠2 프로그래밍』은 지루하고 방대한레퍼런스 또는 너무 뻔한 초보적인 예제소개라는 기술 소개서가 가지는 함정에 빠지지 않고, 절제된 핵심내용을 실용적인 예제와 함께 현실에서 꼭 필요로 하는 확장기술까지 고려해서 소개하고 있는 최적화된 가이드입니다. 뛰어난 프레임워크인 스트럿츠2가 만난 『스트럿츠2 프로그래밍』은 마치 웹워크가 열정적인 스트럿츠 커뮤니티를 만난 것과 같습니다.

-추천의 글 중에서, 이일민(toby.epril.com)

저자분들은 지난 5월부터 매주 금요일 밤, 삼각지에 있는 아첸 자바 커뮤니티 사무실에 모여 주말 밤을 새하얗게 불태우며 집필을 하셨다죠. 크리스마스 이브였던 이 날 밤에도 마지막 원고 리뷰에 피치를 올리시던
저자들이십니다. (사진 왼쪽부터 민상기님, 정광선님, 현철주님. 그러고 보니 모두 총각 필자들이시군요~ 그래서 매주 모여 다함께 새하얗게 불태우기(!)가 가능했던 건지도 모르겠군요..)

예제로 배우는 Adobe 플렉스2』의 감수를 맡아주신 김태완님의 소개로
저자분들을 만난 건 지난 5월이었습니다. 만나자 마자 "에이콘스럽게" 저녁을 먹고 영화관으로 향했죠. 그날 모두 함께 단체관람을 한 건 임권택 감독의 '천년학'이라는 영화였습니다. 고상하게 영화를 보고나서 삼청동 찻집에 모여서 집필 회의를 가졌습니다. 이번 책부터 에이콘 오픈소스 프로그래밍 시리즈 에디터를 맡아주신 이일민님께서 전체 가이드를 해주셨고, 모두들 어떻게 하면 스트럿츠2의 새 장을 열 훌륭한 책을 만들까에 모두 저마다 의견을 모았습니다. 이젠 추억으로 남은 그 현장으로 가보실까요? 이 사진들은 아마도 저자분들도 처음 보실 거에요. :)

저자 정광선님과 현철주님.
저자 민상기님과 정광선님.
열심히 감수해주신 이일민님과 책의 산파 역할을 톡톡히 해준 김태완님. 정말로, 두 분께 깊이 감사드립니다!
화기애애한 저서 킥오프 미팅 자리였습니다. 이젠 몇 장의 사진으로 남은 아련한 추억들, 한 권의 책으로 묶여 돌아오네요~! :D

저도 이 책의 편집을 맡았지만, 800페이지가 넘는 내용 중에, 수많은 예제와 소스코드, 그림 등 저자분들의 올 한 해를 담아내어 열정을 모두 불사른 역작입니다. 정말 모두들 고생 많으셨습니다. 사실 저희도 "바이블"이라는 진부한 용어는 기피하고 싶습니다만, 이 책을 두고서는 그 말 말고는 다른 적당한 단어가 떠오르지 않네요. 스트럿츠2라는 새로운 프레임워크의 가이드가 될 훌륭한 책이 되리라 믿어 마지 않습니다. 많이 기대해주세요~

스트럿츠2 프로그래밍』은 지금 교보문고, YES24, 강컴, 인터파크, 알라딘에서 예약판매중입니다.
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p27 12행 ]
정의해할 → 정의해

[ p35 그림 1.11 아래로 2행 ]
따라서 '/WEB-INF/struts.xml'과 → 따라서 '/WEB-INF/classes/struts.xml'과

[ p59 표 2.2 'status' 행 ]
status | 아니오 | false | Boolean
→ status | 아니오 | | Object/String

[ p88 10행 ]
3부의 파일 다운로드, JFreeChart
2부의 파일 다운로드, 3부의 JFreeChart

[ p106 4행 ]
#session'key' or #session.foo → #session['key'] or #session.key

[ p237 9행 ]
name="product.name" (/> → name="product.name" />

[ p262 표 5.2 '이름' 열 5행 ]
AutoContextCleanUp → ActionContextCleanUp

[ p357 리스트 6.3 아래에서 4행 ]
(firstChild.nodeValue; → firstChild.nodeValue;

[ p361 리스트 6.7 4행 ]
<action name="etTemperature" → <action name="getTemperature"

[ p409 리스트 7.3 2행 ]
byte buffer = new byte1024; → byte[] buffer = new byte[1024];

[ p415 리스트 7.9 7~10행 ]
private File upload;
private String uploadFileName;
private String uploadContentType;
private String serverFullPath;

private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
private String[] serverFullPath;

[ p416 2행 ]
serverFullPath = new String uploadupload.length;
→ serverFullPath = new String upload[upload.length];

[ p416 4~6행 ]
serverFullPathi =
        fileService.saveFile(uploadi, basePath,
        uploadFileNamei);

serverFullPath[i] =
        fileService.saveFile(upload[i], basePath,
        uploadFileName[i]);

[ p416 11, 14, 18, 22행 ]
public void setUpload(File upload) { this.upload = upload; }
→ public void setUpload(File[] upload) { this.upload = upload; }

public void setUploadContentType(String uploadContentType) {
→ public void setUploadContentType(String[] uploadContentType) {

public void setUploadFileName(String uploadFileName) {
→ public void setUploadFileName(String[] uploadFileName) {

public void setServerFullPath(String serverFullPath) {
→ public void setServerFullPath(String[] serverFullPath) {

[ p418 리스트 7.12 6~9행 ]
... uploadContentType#stat.index
... uploadFileName#stat.index
... serverFullPath#stat.index
... upload#stat.index

... uploadContentType[#stat.index]
... uploadFileName[#stat.index]
... serverFullPath[#stat.index]
... upload[#stat.index]

[ p424 리스트 7.18의 17, 19, 21, 23행 ]
... uploadContentType#stat.index
... uploadFileName#stat.index
... serverFullPath#stat.index
... upload#stat.index

... uploadContentType[#stat.index]
... uploadFileName[#stat.index]
... serverFullPath[#stat.index]
... upload[#stat.index]

[ p467 리스트 8.18 16, 18, 21, 23행 ]
필수 입력 문자열 오류 (requiredStringValidatorField) :<br/>
<s:fielderror>
    <s:param value="%{requiredStringValidatorField'}" />
</s:fielderror>
<hr/>
문자열 길이 오류 (stringLengthValidatorField) :<br/>
<s:fielderror>
    <s:param>stringLengthValidatorField</s:param>
</s:fielderror>

필수 입력 문자열 오류 (requiredStringValidator) :<br/>
<s:fielderror>
    <s:param value="%{requiredStringValidator'}" />
</s:fielderror>
<hr/>
문자열 길이 오류 (stringLengthValidator) :<br/>
<s:fielderror>
    <s:param>stringLengthValidator</s:param>
</s:fielderror>

[ p492 표 9.1 아래로 1행 ]
코드 표는 부록 3장을 → 코드 표는 부록 A2를

[ p557 리스트 10.28 2행 ]
extends="struts=default" → extends="struts-default"