Top

스트럿츠 2.3 프로그래밍 [자바 웹 애플리케이션 개발을 위한 오픈소스 프레임워크]

  • 지은이현철주, 정광선, 민상기
  • ISBN : 9788960773714
  • 59,000원
  • 2012년 11월 30일 펴냄
  • 페이퍼백 | 1,236쪽 | 188*250mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

이 책은 스트럿츠2가 추구하는 직관성과 간결함의 철학을 따른다. 웹 애플리케이션을 개발할 때 꼭 알아야 할 가장 기본적인 웹의 작동 원리를 설명하며, 초보 웹 개발자가 프레임워크의 윤곽을 어렵지 않게 파악하도록 도와준다. 이번 개정판에서는 스트럿츠 2.3버전에 맞춰 내용을 개정했으며, 최신 트렌드를 위한 Ajax, JSON, RESTful 웹 서비스에 대한 내용을 반영했다. 표준 기반의 웹 애플리케이션 개발을 위한 예제를 새롭게 구성했으며, 고급 웹 개발을 위해 스트럿츠2의 아키텍처에 대한 자세한 설명과 현 실무에서 가장 많이 사용되는 데이터베이스 프로그래밍에 대한 내용을 보충했다.

간결하지만 강한 심장을 가진 자바 웹 개발 프레임워크의 표준
- 직관적이고 진보적인 웹 애플리케이션 프레임워크
- 간편한 개발환경 구축, 수월한 개발, 뛰어난 확장성
- 모바일 환경과 친밀하게 연동할 수 있는 레스트풀 서비스 지원


[ 소개 ]

자바 웹 애플리케이션 전문 개발 프레임워크인 스트럿츠2는 MVC 아키텍처 기반의 개발과 오픈소스 프레임워크의 정착을 이끌었다.

스트럿츠2의 목적은 직관적인 개발, 따라서 더욱 쉽고, 빠르고, 안정적인 웹 애플리케이션 개발을 하자는 것이다. 이를 위해 오픈 소스의 베스트 프랙티스를 주저함없이 받아들이는 오픈 마인드를 실현하고 있다.

스트럿츠2는 여전히 발전하고 있으며 최근 모바일 환경과 오픈 API 환경을 쉽게 지원할 수 있도록 레스트 서비스를 보강하고 있다.

POJO 기반의 엔터프라이즈 서비스를 지원하는 애플리케이션을 쉽게 만들고 싶다면 스트럿츠2의 간결함을 철학으로 하는 아키텍처와 플러그인 형식으로 접목할 수 있는 다양한 오픈소스 프레임워크를 지원하는 특징과 자바 웹 개발 초보자라도 쉽게 접근할 수 있도록 최소화한 설정 기능은 더욱 큰 매력으로 다가올 것이다.

이 책은 개발환경 구축부터 스트럿츠2의 주요 아키텍처까지 충분한 설명을 하고 있으며, 많은 예제를 통해 스스로 깨달을 수 있도록 구성하였다. 이 책을 읽고 스트럿츠2만을 배우는 것이 아니라 웹 개발에 대한 기초를 닦을 수 있도록 힘썼다.

이번 개정판에서는 최신 트렌드를 위한 Ajax, JSON, RESTful 웹 서비스에 대한 내용을 반영했다. 표준 기반의 웹 애플리케이션 개발을 위한 예제를 새롭게 구성했고, 또한 고급 웹 개발을 위하여 스트럿츠2의 아키텍처에 대한 자세한 설명과 현 실무에서 가장 많이 사용되는 데이터베이스 프로그래밍에 대한 내용을 보충했다.

퍼시스턴스 레이어를 구성하는 방법, 순수 JDBC 프로그래밍뿐만 아니라 스프링과 아이바티스 프레임워크을 스트럿츠2에서 연동하는 방법을 소개하고 있어, 프로젝트 개발에 직접적인 도움을 줄 수 있는 내용을 포함하고 있다.


[ 개정판에서 달라진 점 ]

스트럿츠2가 2.1.x 버전에 이르러 적지 않은 변화를 맞이함에 따라, 초판에서 소개한 예제들이 제대로 실행되지 않는 경우가 발생했다. 이는 스트럿츠2를 새롭게 배우려는 분들과 이미 초판을 통해 스트럿츠2를 이용하는 분들에게 걸림돌이 됐다.

스트럿츠2의 새로운 버전에서 달라진 점과 2.0.x 버전에서 2.1.x 버전으로 업그레이드하는 방법의 전체적인 윤곽을 알아보려면, 부록 C ‘스트럿츠2의 버전 업데이트’에서 설명하고 있으니 꼭 읽어보길 바란다.

초판에서는 스트럿츠2에 직접적으로 관련이 없는 내용은 과감하게 생략했다. 그러나 개정판에서는 최대한 실무와 가까운 환경에서 스트럿츠2를 이용한 웹 애플리케이션 개발 방법을 함께 배울 수 있게 도움을 주고자 했다.

첫째, 새로운 버전의 기능을 문제없이 적용할 수 있도록 책 전반에 걸쳐 변경된 내용을 수정했다.

둘째, 초판에서 스트럿츠2의 기능을 배우고 스트럿츠2 태그의 사용법을 자연스럽게 알아갈 수 있도록 구성했던 예제들을 최대한 그대로 사용했지만, 화면을 구성할 때 표준 기반으로 작업할 수 있도록 EL과 JSTL을 사용해 화면을 구성하는 방법을 예제마다 별도로 소개한다. 웹 애플리케이션을 개발하는 사람이라면 EL과 JSTL 관련 지식이 꼭 필요하기 때문에 좀 더 체계적인 학습을 위해 부록에 EL과 JSTL 사용법을 추가해뒀으니 좋은 참고 자료가 되길 바란다.

셋째, 새롭게 추가된 여러 플러그인 중 유용한 것을 선별해 소개한다. 애노테이션을 이용해 설정을 최소화하는 방법과 응답을 JSON 형식으로 쉽게 변환할 수 있는 JSON 플러그인 등을 추가로 소개하고 있다.

네 번째 변화는 좀 더 활용적인 측면에 중점을 두었다. 실무에서 널리 사용하는 기술을 다뤄보고, 각 기술의 기본적인 개념을 이해할 수 있게 집약적인 자료를 소개하고 있다.

또한 스트럿츠2와 스프링 프레임워크의 연동을 위해 스프링 프레임워크를 사용하는 이유와 핵심 개념을 간략하게 다뤘다.

그리고 최근 모바일 웹이 핫 이슈가 되는 상황에서 레스트풀(RESTful) 웹 서비스의 사용이 매우 적절한 통신 방식으로 떠오르고 있다. 레스트풀 웹 서비스를 쉽게 이해할 수 있게 기본적인 개념을 소개하며, 스트럿츠2를 이용해 레스트풀 웹 서비스를 개발하는 방법을 설명한다.

웹 애플리케이션은 결국 동적인 데이터를 처리하는 것이 목적이므로, 가장 많이 사용하는 데이터베이스 액세스 방법을 기초적인 부분부터 차근히 소개하여 오픈 소스 프레임워크를 연동해 효율적으로 개발할 수 있게 한다. 서비스 계층과 데이터 액세스 계층의 설계 방법과 JDBC API를 이용한 서비스 계층과 데이터 액세스 계층 구성 방법, 그리고 아이바티스, 스프링 프레임워크를 함께 사용해 진보된 형식의 아키텍처를 이용한 각 계층의 구성 방법도 소개한다. SQL 매퍼 프레임워크인 아이바티스를 설명하고, 스프링을 이용한 선언적 트랜잭션 처리를 위한 AOP의 개념도 소개한다.

실무에 가까운 주제를 다루면 내용이 제법 무거워질 수 있기 때문에 최대한 간결함을 유지하고자 노력했고, 스트럿츠2뿐만 아니라 웹 애플리케이션을 개발할 때 필요한 개념을 익힐 수 있는 기회를 만들어보려 노력했다.


[ 이 책에서 다루는 내용 ]

■ 스트럿츠2 개발 환경 구축
■ 웹 개발 기본 개념
■ 스트럿츠2의 기본 핵심 개념: 액션, 리절트, 인터셉터
■ 표준 기반의 웹 개발을 위한 스트럿츠2 활용 방법 (예제 포함)
■ 스트럿츠2의 핵심 아키텍처
■ 스트럿츠2와 데이터베이스 연동(스프링, 아이바티스 연동)
■ Ajax 활용방법
■ RESTful 웹 서비스
■ 파일 처리, 유효성 검사, 국제화
■ 스트럿츠2 태그 레퍼런스
■ 다양한 플러그인 사용법


[ 예제 파일 ]

<스트럿츠2 예제 프로젝트>
- 기본 출력 (문자열, 객체 값, 리스트 형식의 데이터)
- 기본 입출력 (문자열, 객체 값, 날짜 형식 데이터 등)
- 어노테이션을 이용한 개발 (액션, 리절트 정의 생략 가능)
- Ajax
- 스트럿츠2 기본 태그 라이브러리 이용
- 파일 업로드, 다운로드
- 유효성 검사
- 국제화
- JDBC 프로그래밍
– 스프링/아이바티스(iBatis)연동
- 플러그인 (JSON, REST, Sitemesh, JasperReport 등)
- 예외처리
- 스트럿츠2 태그 레퍼런스 예제


[ 이 책의 대상 독자 ]

이 책의 독자는 이미 다양한 분야와 기술에 익숙한 사람일 수도, 첫 입문자일 수도 있다. 자신의 관심 사항에 맞도록 1부에서는 기초적인 내용을 위주로, 2부부터는 심화된 내용으로 구성했다.

자바 웹 프로그래밍을 경험해 본 독자라면 예제를 통해 스트럿츠2로 웹 애플리케이션을 개발하는 방법을 학습하는 데 큰 어려움이 없을 것이다. 스트럿츠2를 배우기 위해 기타 다른 프레임워크 또는 스트럿츠1에 대한 선지식이 필요하지 않다. 스트럿츠2는 스트럿츠1의 업그레이드 버전이 아닌 새로운 아키텍처를 기반으로 하고 있기 때문이다.


[ 이 책의 구성 ]

이 책의 1부는 초보 개발자라도 스트럿츠2를 사용해 쉽게 웹 애플리케이션을 개발할 수 있도록 구성했다. 스트럿츠2의 아키텍처를 깊이 이해하고 있지 못하더라도 예제를 실습하다 보면 스트럿츠2의 기본적인 개념을 자연스럽게 익힐 수 있다.

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

3부는 스트럿츠2를 활용하는 기술에 대해 다룬다. 국제화를 지원하는 웹 애플리케이션을 만드는 법, 다른 유용한 오픈 소스를 플러그인 방식으로 스트럿츠2와 함께 활용할 수 있는 방법과 스트럿츠2 프레임워크와 데이터베이스와 연동하는 방법을 소개하고, 스트럿츠2의 태그 라이브러리 사용법을 살펴볼 것이다.

끝으로 4부는 부록으로서, 이 책에서 제공하는 예제를 실습하는 데 필요한 개발 환경을 구축하는 방법과 국제화 지원을 위한 국가별 ISO-639-1 코드, 스트럿츠2 새로운 버전의 업데이트 내용과, 표준 기반의 작업에 도움을 주기 위해 EL과 JSTL의 사용법을 요약식으로 정리했다. 스트럿츠2 애플리케이션을 개발하는 데 도움이 될 것이다.

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

저자/역자 소개

[ 저자 서문 ]

초기 혼돈스러웠던 웹 개발 시절 스트럿츠1을 처음 접하고 웹 애플리케이션 개발에 대한 훌륭한 가이드를 제공받으며, 이전에는 크게 흥미를 느끼지 못했던 오픈 소스에 대한 관심이 커졌다. 이후 여러 오픈 소스를 접하며 그들의 막강한 기능과 가능성에 눈을 뜨기 시작했다.

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

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

스트럿츠2를 이용한 프로그래밍은 간단하고 명료해서 좋다.

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

- 현철주


[ 저자 소개 ]

현철주
경희대학교 문리대 물리학과를 졸업했다. 전산 전공자가 아니지만 컴퓨터로 뭔가 재미있는 일을 만들고 싶었던 열망이 현재까지 개발자로 활동하고 있게 만들고 있다. 나에겐 전산이란 것은 늘 좋은 취미였고, 심지어 95년도 당시 대우그룹의 자회사인 대우정보시스템에 입사하며 전산이 주업무가 되었지만, 매우 오픈 마인드를 가지고 있던 팀장 덕분에 일을 일로서가 아니고 프로그래밍을 즐길 수 있었다. 앞으로의 컴퓨팅에서도 기계 냄새가 아닌 따뜻한 사람 냄새를 맡을 수 있는 뭔가 재미나고 유용한 일들을 해낼 수 있을 거라는 믿음을 갖는 한 사람으로 남고 싶다.
대학 재학 중 카이스트 부설 시스템 공학센터(SERI)의 교육과정을 이수했다. 졸업 후 비트 전산 교육센터에서 윈도우즈 과정을 수료했고, 이후 대우정보시스템에서 네트워크 기반 문자인식 이미지 처리 시스템을 개발했으며, 문서 자동 입력 시스템 등 금융, 공공기관, 자동차 회사 등의 프로젝트를 수행했다. 또한 EDMS 솔루션을 개발했고, 자바 기반의 대학 종합 정보화 사업의 아키텍트 및 물류 시스템 PM 및 개발 업무에서 스트럿츠 기반의 자체 프레임워크를 이용해 시스템 개발 작업을 수행하면서 오픈소스에 관심을 갖기 시작했다.
2007년 아첸 소프트웨어를 창업하여 1년간 월간 마이크로소프트웨어에 스트럿츠2 관련 기사를 기고했으며, 다수의 비즈니스 시스템 개발 및 컨설팅과 함께 아첸 자바 커뮤니티(www.artszen.org) 사이트를 운영하고 있다.
2011년부터 지식경제부와 정보통신산업진흥원(NIPA)이 주관하는 소프트웨어 산업의 미래를 이끌어갈 국가 인재양성 프로그램인 SW Maestro의 멘토로 활동중이며, 최근 모바일 개발 환경에서 자바 오픈소스 프레임워크를 보다 효율적으로 사용할 수 있는 연구를 계속하고 있다.

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

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

목차

목차
  • 1부_기본
    • 1장 스트럿츠2란 무엇인가?
      • 1.1 스트럿츠2의 배경과 달라진 점
      • 1.2 스트럿츠2 들여다보기
      • 1.3 스트럿츠2의 핵심: 액션과 리절트
      • 1.4 스트럿츠2의 컨트롤러: 필터 디스패처
      • 1.5 웹 요청 처리에 대한 기본 지식
      • 1.6 정리
    • 2장 기본 예제를 통해 스트럿츠2와 친해지기
      • 2.1 문자열 출력
      • 2.2 문자열 목록 출력
      • 2.3 객체 출력
      • 2.4 객체 목록 출력
      • 2.5 날짜 출력
      • 2.6 정리
    • 3장 다양한 태그 컴포넌트 다루기
      • 3.1 스트럿츠2 구성요소 미리보기
        • 3.1.1 인터셉터 개요
        • 3.1.2 인터셉터 스택이란?
        • 3.1.3 리절트의 종류
        • 3.1.4 환경설정의 개요
        • 3.1.5 태그 라이브러리의 종류
      • 3.2 태그 사용을 위한 필수지식
        • 3.2.1 액션, 인터셉터, 밸류 스택과 태그의 관계
        • 3.2.2 비 문자열 속성
        • 3.2.3 태그의 value 속성은 객체다!
        • 3.2.4 표현식 언어의 표기법
        • 3.2.5 OGNL이란?
      • 3.3 문자열 입출력
      • 3.4 문자열 상자 사용하기
      • 3.5 날짜 입출력 컴포넌트 사용하기
      • 3.6 태그를 이용한 페이지 링크
      • 3.7 체크박스 만들기
      • 3.8 셀렉트박스 만들기
      • 3.9 조건 처리 태그를 사용해 영화 순위목록 페이지 만들기
      • 3.10 태그를 이용해 분리된 리스트 합치기
      • 3.11 정리
  • 2부_심화
    • 4장 스트럿츠2 아키텍처
      • 4.1 스트럿츠2 아키텍처 개념도
      • 4.2 필터 디스패처의 역할
      • 4.3 액션 프록시 / 액션 인보케이션
        • 4.3.1 액션 프록시와 액션 인보케이션의 관계
        • 4.3.2 액션 인보케이션의 역할
      • 4.4 액션 컨텍스트
      • 4.5 액션 매퍼
        • 4.5.1 기본 액션 매퍼
        • 4.5.2 커스텀 액션 매퍼
        • 4.5.3 레스트풀 액션 매퍼
        • 4.5.4 레스트풀2 액션 매퍼
        • 4.5.5 혼합 액션 매퍼
      • 4.6 인터셉터
        • 4.6.1 인터셉터의 개념
        • 4.6.2 인터셉터 인터페이스
        • 4.6.3 인터셉터의 종류
        • 4.6.4 인터셉터의 파라미터 오버라이딩
        • 4.6.5 인터셉터와 필터의 차이
        • 4.6.6 인터셉터의 기능별 분류
        • 4.6.7 인터셉터 분석: 프리페어 인터셉터
      • 4.7 액션
        • 4.7.1 액션의 개념
        • 4.7.2 액션의 상관관계
        • 4.7.3 액션 체인
        • 4.7.4 액션의 다중 호출
      • 4.8 리절트
        • 4.8.1 리절트의 개념
        • 4.8.2 리절트 타입
        • 4.8.3 프리 리절트 리스너
      • 4.9 정리
    • 5장 스트럿츠2 환경설정
      • 5.1 환경설정 파일 개요
        • 5.1.1 web.xml에 정의할 수 있는 내용
        • 5.1.2 struts.xml 소개
        • 5.1.3 struts.properties 소개
        • 5.1.4 struts-default.xml 소개
        • 5.1.5 velocity.properties 소개
      • 5.2 관리적인 요소의 환경설정
        • 5.2.1 빈 설정
        • 5.2.2 상수 설정
        • 5.2.3 패키지 설정
        • 5.2.4 네임스페이스 설정
        • 5.2.5 인클루드 설정
      • 5.3 요청 처리 요소의 환경설정
        • 5.3.1 인터셉터 설정
        • 5.3.2 액션 설정
        • 5.3.3 리절트 설정
        • 5.3.4 와일드카드를 이용한 액션, 액션 메소드, 리절트 설정
      • 5.4 예외 처리 요소의 환경설정
      • 5.5 성능 튜닝
      • 5.6 애노테이션
        • 5.6.1 액션 애노테이션
        • 5.6.2 인터셉터 애노테이션
        • 5.6.3 유효성 검사 애노테이션
        • 5.6.4 타입 변환 애노테이션
      • 5.7 정리
    • 6장 스트럿츠2 태그를 이용한 손쉬운 Ajax 구현
      • 6.1 Ajax의 개념과 스트럿츠2의 Ajax 구성
        • 6.1.1 Ajax의 개념
      • 6.2 Ajax의 기능을 이용한 메뉴 만들기
      • 6.3 자동 요청 기능을 이용한 리얼타임 인기 검색어 출력
      • 6.4 탭 패널 컴포넌트를 이용한 세미나 목록과 일정
      • 6.5 트리 컴포넌트를 이용한 컴퓨터 부품 목록 출력
      • 6.6 정리
    • 7장 파일 업로드/다운로드
      • 7.1 파일 업로드
        • 7.1.1 아파치 커먼스 IO, FileUpload 컴포넌트 다운로드와 설치
        • 7.1.2 파일 업로드 크기 설정
        • 7.1.3 파일 업로드를 위한 액션 클래스와 태그 구성
        • 7.1.4 단일 파일 업로드 예제 만들기
        • 7.1.5 배열을 이용한 다중 파일 업로드 예제 만들기
        • 7.1.6 리스트를 이용한 다중 파일 업로드 예제 만들기
      • 7.2 파일 다운로드
        • 7.2.1 다운로드 액션에서 사용하는 프로퍼티
        • 7.2.2 struts.xml에서 다운로드 액션 정의하기
        • 7.2.3 텍스트 파일을 스트림 형식으로 출력하는 예제 만들기
        • 7.2.4 파일 다운로드 예제 만들기
      • 7.3 정리
    • 8장 유효성 검사
      • 8.1 스트럿츠2의 유효성 검사
        • 8.1.1 유효성 검사 규칙 정의
        • 8.1.2 넌필드 유효성 검사자와 필드 유효성 검사자
        • 8.1.3 유효성 검사의 단락
      • 8.2 예제로 배우는 유효성 검사
        • 8.2.1 기본 유효성 검사를 이용한 퀴즈 예제 만들기
        • 8.2.2 클라이언트 유효성 검사를 이용한 퀴즈 예제 만들기
        • 8.2.3 필드 유효성 검사를 이용한 예제 만들기
        • 8.2.4 넌필드 유효성 검사를 이용한 예제 만들기
      • 8.3 애노테이션을 이용한 유효성 검사
      • 8.4 스트럿츠2 유효성 검사자 요약
        • 8.4.1 required 유효성 검사자
        • 8.4.2 requiredString 유효성 검사자
        • 8.4.3 int 유효성 검사자
        • 8.4.4 double 유효성 검사자
        • 8.4.5 date 유효성 검사자
        • 8.4.6 expression 유효성 검사자
        • 8.4.7 fieldexpression 유효성 검사자
        • 8.4.8 email 유효성 검사자
        • 8.4.9 url 유효성 검사자
        • 8.4.10 visitor 유효성 검사자
        • 8.4.11 conversion 유효성 검사자
        • 8.4.12 stringlength 유효성 검사자
        • 8.4.13 regex 유효성 검사자
      • 8.5 정리
  • 3부_활용
    • 9장 애플리케이션의 국제화
      • 9.1 국제화
        • 9.1.1 애플리케이션의 국제화란?
        • 9.1.2 Locale 클래스
      • 9.2 스트럿츠2의 리소스 번들
        • 9.2.1 액션 리소스 번들
        • 9.2.2 부모 클래스 리소스 번들
        • 9.2.3 인터페이스 리소스 번들
        • 9.2.4 패키지 리소스 번들
        • 9.2.5 글로벌 리소스 번들
        • 9.2.6 리소스 번들의 검색 순서
        • 9.2.7 UTF-8 리소스 번들 사용하기
        • 9.2.8 리소스 번들 활용
        • 9.2.9 커스텀 리소스 번들
        • 9.2.10 리소스 번들 포맷 사용하기
      • 9.3 정리
    • 10장 스트럿츠2 플러그인
      • 10.1 사이트메쉬 플러그인을 이용한 페이지 레이아웃 적용
        • 10.1.1 사이트메쉬 개요
        • 10.1.2 사이트메쉬 플러그인 라이브러리 설치
        • 10.1.3 사이트메쉬 플러그인을 사용하기 위한 환경설정
        • 10.1.4 데코레이터 페이지 만들기
        • 10.1.5 사이트메쉬를 활용한 메인 페이지 출력 예제 만들기
      • 10.2 JFreeChart 플러그인을 이용한 차트 출력
        • 10.2.1 JFreeChart 개요
        • 10.2.2 JFreeChart 라이브러리 다운로드와 설치
        • 10.2.3 JFreeChart를 사용하기 위한 환경설정
      • 10.3 JasperReport 플러그인을 이용한 보고서 출력
        • 10.3.1 JasperReport 개요
        • 10.3.2 JasperReport 리절트 타입 정의
        • 10.3.3 JasperReport 관련 라이브러리 다운로드와 설치
        • 10.3.4 도서 목록 보고서 pdf 출력 예제 만들기
      • 10.4 스프링 플러그인을 사용한 의존성 삽입
        • 10.4.1 스트럿츠2에서 스프링 플러그인의 역할
        • 10.4.2 스프링 소개
        • 10.4.3 스프링의 기본 개념
        • 10.4.4 스프링 라이브러리 다운로드와 설치
        • 10.4.5 스프링을 사용하기 위한 환경설정
        • 10.4.6 코드 서비스를 스프링으로 관리하는 예제 만들기
      • 10.5 REST 플러그인을 이용한 레스트풀 서비스 개발
        • 10.5.1 REST 웹 서비스 기본 개념
        • 10.5.2 REST 웹 서비스 개발
        • 10.5.3 REST 플러그인의 사용법
        • 10.5.4 사용자 정보 관리 레스트 웹 서비스 예제 만들기
      • 10.6 스트럿츠2의 기타 플러그인
        • 10.6.1 코드 비하인드 플러그인
        • 10.6.2 컨피그 브라우저 플러그인 소개
        • 10.6.3 JSF 플러그인
        • 10.6.4 플렉서스 플러그인
        • 10.6.5 스트럿츠1 플러그인
        • 10.6.6 JUnit 플러그인
        • 10.6.7 Json 플러그인
      • 10.7 정리
    • 11장 예외 처리, 프로파일링, 로깅
      • 11.1 예외 처리
        • 11.1.1 간단한 선언적 예외 처리 방법
        • 11.1.2 글로벌 예외 매핑
        • 11.1.3 다수의 예외 매핑
        • 11.1.4 예외 메시지 가져오기
        • 11.1.5 예외 처리 인터셉터
        • 11.1.6 예외 로그를 남기기 위한 설정
      • 11.2 프로파일링
        • 11.2.1 프로파일링 기능의 활성화
        • 11.2.2 프로파일 정보 제어하기
        • 11.2.3 나만의 프로파일 정보 만들기
      • 11.3 로깅
        • 11.3.1 로그 설정하기
      • 11.4 정리
    • 12장 데이터베이스 연동
      • 12.1 데이터베이스 액세스를 위한 서비스, 데이터 액세스 계층 구성
        • 12.1.1 서비스 계층과 데이터 액세스 계층 구성하기
        • 12.1.2 인터페이스를 활용한 설계의 이점
      • 12.2 JDBC를 이용한 서비스, 데이터 액세스 계층 구성
        • 12.2.1 JDBC를 이용해 서비스, 데이터 액세스 계층을 구성하기 위한 준비 작업
        • 12.2.2 JDBC를 이용해 사용자 정보 검색, 등록, 수정, 조회, 삭제 예제 만들기
      • 12.3 아이바티스, 스프링을 이용한 서비스, 데이터 액세스 계층 구성
        • 12.3.1 아이바티스 소개
        • 12.3.2 아이바티스와 스프링 프레임워크 연동
        • 12.3.3 아이바티스와 스프링을 이용해 서비스, 데이터 액세스 계층 구성하기
      • 12.4 정리
    • 13장 태그 라이브러리 예제 모음
      • 13.1 컨트롤 태그
        • 13.1.1 <s:generator />
        • 13.1.2 <s:merge />
        • 13.1.3 <s:sort />
        • 13.1.4 <s:subset />
      • 13.2 데이터 태그
        • 13.2.1 <s:bean />
        • 13.2.2 <s:debug />
        • 13.2.3 <s:i18n />
        • 13.2.4 <s:include />
        • 13.2.5 <s:push />
        • 13.2.6 <s:set />
      • 13.3 폼 태그
        • 13.3.1 <s:checkboxlist />
        • 13.3.2 <s:combobox />
        • 13.3.3 <s:doubleselect />
        • 13.3.4 <s:hidden />
        • 13.3.5 <s:optiontransferselect />
        • 13.3.6 <s:optgroup />
        • 13.3.7 <s:password />
        • 13.3.8 <s:radio />
        • 13.3.9 <s:reset />
        • 13.3.10 <s:submit />
        • 13.3.11 <s:token />
        • 13.3.12 <s:updownselect />
      • 13.4 넌폼 태그
        • 13.4.1 <s:actionerror />
        • 13.4.2 <s:actionmessage />
        • 13.4.3 <s:component />
        • 13.4.4 <sx:div />
        • 13.4.5 <s:fielderror />
      • 13.5 정리
  • 4부_부록
    • 부록 A 개발 환경 구축
      • A.1 J2SE 설치
      • A.2 톰캣 설치
      • A.3 이클립스 설치
      • A.4 스트럿츠2 다운로드와 샘플 설치
        • A.4.1 스트럿츠2 다운로드
        • A.4.2 스트럿츠2 샘플 애플리케이션 설치와 테스트
      • A.5 샘플 프로젝트 구성
        • A.5.1 이클립스를 이용한 샘플 프로젝트 작성
      • A.6 오라클 데이터베이스 익스프레스 에디션 11g 설치
        • A.6.1 오라클 데이터베이스 익스프레스 에디션 11g 설치
        • A.6.2 오라클 데이터베이스 익스프레스 에디션 웹 관리 콘솔 사용하기
    • 부록 B국가별 코드
      • B.1 언어의 국가별 ISO -639-1 코드
      • B.2 화폐의 국가별 ISO -4217 코드
    • 부록 C 스트럿츠2의 버전 업데이트
      • C.1 스트럿츠2 릴리스 노트
      • C.2 스트럿츠 2.0.1에서 2.1.x로의 마이그레이션 문제점 가이드
        • C.2.1 라이브러리 의존성 업데이트
        • C.2.2 커스텀 타입 컨버터 업데이트
        • C.2.3 struts.xml 설정 파일 업데이트
        • C.2.4 플러그인 설정의 마이그레이션
        • C.2.5 EL 표현식을 OGNL로 변환
        • C.2.6 OGNL을 통한 정적 메소드 사용법 리팩토링
        • C.2.7 로깅의 최소화
        • C.2.8 단위 테스트 갱신
        • C.2.9 url 태그상의 includeParams 속성 설정
        • C.2.10 필터 매핑, 기본 액션 확장명, 서블릿
        • C.2.11 문제점 해결
    • 부록 D EL과 JSTL
      • D.1 EL
        • D.1.1 EL 표현식
        • D.1.2 변수
        • D.1.3 EL의 내장 객체
        • D.1.4 상수 값
        • D.1.5 연산자
        • D.1.6 예약어
        • D.1.7 함수
      • D.2 JSTL
        • D.2.1 JSTL 태그 라이브러리의 기능적인 개요
        • D.2.2 코어 태그 라이브러리
        • D.2.3 국제화 태그 라이브러리
        • D.2.4 SQL 태그 라이브러리
        • D.2.5 XML 태그 라이브러리

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표
  • 2014.05 - 2014.

[p.773 16행]
var url = "userinfo.json" + "?searchName=" +
→ var url = "user-info.json" + "?searchName=" +

[p.774 23행]
var url = "userinfo/" + id + ".json"; → var url = "user-info/" + id + ".json";

[p.775 11행]
var url = "userinfo.json";
→ var url = "user-info.json";

[p.775 33행]
var url = "userinfo/" + id + ".json"; → var url = "user-info/" + id + ".json";

[p.776 21행]
var url = "userinfo/" + id + ".json"; → var url = "user-info/" + id + ".json";

[p.777 6행]
var url = "userinfo/" + id + ".json";
→ var url = "user-info/" + id + ".json";