SlideShare a Scribd company logo
1 of 22
Download to read offline
자바 웹 개발 시작하기
(9주차 : 프로젝트 구현 – 추가적인 뷰)
2011. 12. 21

DEVELOPMENT #2

이덕곤
§  프로젝트 설계
§  명세서를 만들어 보자
§  로그인과 보드의 통합
§  단위테스트
§  숙제 : 프로젝트 새로 시작해서 만들어 보기
다들 시작 해 보셨나요?
§  프로젝트 구현
§  추가적인 뷰에 대한 공부
§  커스텀 태그
§  RSS뷰

§  @Async
§  과제 : 작품 명세서 완성하기
§  커스텀 태그(Custom Tag)란?
§  사용자가 직접 정의해서 사용하는 태그

§  태그 라이브러리(Tag Library)
§  사용자가 정의한 태그들을 모아 라이브러리 형태로 만든 것

§  커스텀 태그의 장점
§  한번 작성한 커스텀 태그는 어디서든 사용 가능함
§  JSP 페이지 내에 스크립트 코드를 줄임으로써 가독력을
높일 수 있음
§  태그 라이브러리를 잘 정의함으로써 JSP를 모르는 디자이너도
쉽게 동적인 페이지를 만들 수 있음
§  태그 핸들러 클래스(Tag Handler Class)
§  태그 라이브러리 서술파일(Tag Library Descriptor, TLD)
§  태그를 사용하는 JSP 파일
§  사용할 TLD를 정의하고 커스텀 태그를 사용

2

TDL에 등록

TLD(Tag Library Descriptor)
4

3

접두어와 name으로
해당 클래스 호출

태그 라이브러리 URI 지정
및 커스텀 태그 사용

JSP
1

태그 핸들러 클래스 작성

Tag Handler Class

5

해당 태그 처리 및 결과 반환
§  Tag
§  SimpleTagSupport 상속받아 제작
§  여러가지 파라미터 및 필수 값 등 설정 가능

§  Function
§  하나의 메서드가 하나의 함수
§  간단한 유틸리티를 만들 때 사용

§  .tag 파일
§  특별한 설정이나 클래스, 메서드 없음

§  상황에 맞게 사용
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://ww
w.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.
com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>2.1</tlib-version>
<short-name>simpleTags</short-name>
<uri>http://study.starpl.com/taglib/sstag</uri>
<tag>

... </tag>

<function> … </function>
</taglib>
다양하고 많은 클래스가 있지만… SimpleTagSupport 사용
public class StarplFormatDateTag extends SimpleTagSupport
{
@Override
public void doTag() throws JspException, IOException
{
PageContext pageContext = (PageContext) getJspContext();
…… // 처리 할 일들
pageContext.getOut().print(출력할_값);
}
}
<tag>
<name>formatDate</name>
<tag-class>com.starpl.study.base.taglib.FormatDateTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>locale</name>
<required>false</required> <!-- 필수 값인가? -->
<rtexprvalue>true</rtexprvalue> <!-- EL 표현식 사용 여부 -->
</attribute>
<attribute>
……
</attribute>
……
</tag>
Tag Class처럼 상속받아 만들 필요가 없음
public class ElFunctions
{
public static int rollDice()
{
int result = (int) (Math.random() * 6) + 1;
return result;
}
…… // 추가할 메서드
}
<function>
<name>rollIt</name>
<function-class>
com.starpl.study.base.taglib.ElFunctions</function-class>
<function-signature>int rollDice()</function-signature>
</function>
<function>
<name>escapeXml</name>
<function-class>
com.starpl.study.base.taglib.ElFunctions</function-class>
<function-signature>
String escapeXml(java.lang.String)</function-signature>
</function>
<!-- 5. TAG-LIBRARY 설정입니다. -->
<jsp-config>
<taglib>
<taglib-uri>http://study.starpl.com/taglib/tag</taglib-uri>
<taglib-location>
/WEB-INF/tags/taglibrary.tld</taglib-location>
</taglib>
</jsp-config>
§  정의
§  Tag, function : <%@ taglib
prefix="st" uri="http://study.starpl.com/taglib/tag"%>

§  사용
§  Tag : <st:formatDate value="<%=new Date()%>" />
§  Function : ${st:rollIt()}

§  .tag 파일
§  정의 : <%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
§  사용 : <t:test data="dataTest"/>
<?xml version="1.0" encoding="UTF-8"?>
<%@ page contentType="text/xml;charset=UTF-8" pageEncoding="
UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="st" uri="http://study.starpl.com/taglib/tag"%>
<rss version="2.0">
<channel>
…
</channel>
</rss>
<rss version="2.0">
<channel>
<title><![CDATA[보드 RSS]]></title>
<link>http://http://127.0.0.1:8080/board</link>
<description><![CDATA[아카이브, 타임라인, 소셜 네트워킹, 블로그
, 커뮤니티 서비스]]></description>
<language>ko-kr</language>
<generator>http://study.starpl.com</generator>
</channel>
<item> … <item>
</rss>
<c:forEach var="item" items="${boardList}">
<item>
<title><![CDATA[
<c:out value="${item.subject}" escapeXml="true" />]]></title>
<link>http://http://127.0.0.1:8080/board/view/${item.boardIdx}</link>
<description><![CDATA[${item.content}]]></description>
<author><![CDATA[
<c:out value="${item.nickName}" escapeXml="true" />]]></author>
<guid>http://http://127.0.0.1:8080/board/view/${item.boardIdx}</guid>
<pubDate><s:formatDate value="${item.regDate}" language="en" locale="U
S" pattern="EE, dd MMM yyyy HH:mm:ss Z"/></pubDate>
</item>
</c:forEach>
@RequestMapping(
value = { "/rss" }, method = RequestMethod.GET)
public String showRssList(Model model)
{
List<Board> boardList = boardDao.getBoardList();
model.addAttribute("boardList", boardList);
return viewBase + "/rss";
}
§  @Async 어노테이션 메서드 위에 작성하면 됨
§  반환값은 void, java.util.concurrent.Future만 가능
§  사용하기 위한 환경 설정
§  xmlns:task=
"http://www.springframework.org/schema/task"
§  http://www.springframework.org/schema/task http://w
ww.springframework.org/schema/task/spring-task.xsd
§  <!-- Spring 3.0 @Task @Async -->
§  <task:annotation-driven />
§  사용자화 된 뷰를 만들어 보았습니다
§  커스텀 태그를 만들 수 있습니다
§  RSS뷰를 만들 수 있습니다
§  비동기 처리에 대해 배워보았습니다
§  숙제 : 진행하시고 있는 프로젝트에 커스텀 태그를
한 곳 이상 사용해 주세요
§  프로젝트 명세서 발표
§  명세서를 발표하는 시간을 가지겠습니다
미완성이어도 좋습니다
§  페이징 뷰를 고민해 봅니다
§  기타 웹 개발에 대한 고민은 같이 해 봅시다
§  과제 : 뒷풀이 참석, 12월 31일까지 명세서 완성
작품은 2012년 1월까지 완성
§  커스텀 태그
§  http://www.4te.co.kr/566
§  http://bum20.springnote.com/pages/2445740
§  http://0thinktank.tistory.com/146

§  RSS
§  http://en.wikipedia.org/wiki/RSS
§  http://www.rssboard.org/rss-specification
§  http://golmong.tistory.com/8

§  @Async
§  http://whiteship.me/?tag=async
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)

More Related Content

What's hot

자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획DK Lee
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
DK Lee
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis BasicJi-Woong Choi
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료수홍 이
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cliChoonghyun Yang
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 

What's hot (20)

자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cli
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 

Viewers also liked

자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)DK Lee
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며DK Lee
 
Rainbow Project Web App
Rainbow Project Web AppRainbow Project Web App
Rainbow Project Web Appbingoori
 
Google App Engine의 이해
Google App Engine의 이해Google App Engine의 이해
Google App Engine의 이해Sun-Jin Jang
 
3희망공감브랜드제안
3희망공감브랜드제안3희망공감브랜드제안
3희망공감브랜드제안Heejeong Yu
 
프로젝트+4조+기획안
프로젝트+4조+기획안프로젝트+4조+기획안
프로젝트+4조+기획안진환 김
 
2조 팀+프로젝트+기획안
2조 팀+프로젝트+기획안2조 팀+프로젝트+기획안
2조 팀+프로젝트+기획안진환 김
 
TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발Jongmyoung Kim
 
관리자 화면설계 V 1 0 레이아웃
관리자 화면설계  V 1 0 레이아웃관리자 화면설계  V 1 0 레이아웃
관리자 화면설계 V 1 0 레이아웃guest02cfd10
 
#1 공업입문 블로그 만들기 프로젝트 준비 PPT
#1 공업입문 블로그 만들기 프로젝트 준비 PPT#1 공업입문 블로그 만들기 프로젝트 준비 PPT
#1 공업입문 블로그 만들기 프로젝트 준비 PPT형 원
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)brain816
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
캡스톤설계1(강의계획서)2013-1
캡스톤설계1(강의계획서)2013-1캡스톤설계1(강의계획서)2013-1
캡스톤설계1(강의계획서)2013-1Yong Heui Cho
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부mosaicnet
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
Anatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataAnatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataSri Ambati
 

Viewers also liked (19)

자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며
 
Rainbow Project Web App
Rainbow Project Web AppRainbow Project Web App
Rainbow Project Web App
 
Google App Engine의 이해
Google App Engine의 이해Google App Engine의 이해
Google App Engine의 이해
 
3희망공감브랜드제안
3희망공감브랜드제안3희망공감브랜드제안
3희망공감브랜드제안
 
프로젝트+4조+기획안
프로젝트+4조+기획안프로젝트+4조+기획안
프로젝트+4조+기획안
 
2조 팀+프로젝트+기획안
2조 팀+프로젝트+기획안2조 팀+프로젝트+기획안
2조 팀+프로젝트+기획안
 
TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발TTS System을 이용한 교육용 소프트웨어 개발
TTS System을 이용한 교육용 소프트웨어 개발
 
관리자 화면설계 V 1 0 레이아웃
관리자 화면설계  V 1 0 레이아웃관리자 화면설계  V 1 0 레이아웃
관리자 화면설계 V 1 0 레이아웃
 
Database design
Database designDatabase design
Database design
 
#1 공업입문 블로그 만들기 프로젝트 준비 PPT
#1 공업입문 블로그 만들기 프로젝트 준비 PPT#1 공업입문 블로그 만들기 프로젝트 준비 PPT
#1 공업입문 블로그 만들기 프로젝트 준비 PPT
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
캡스톤설계1(강의계획서)2013-1
캡스톤설계1(강의계획서)2013-1캡스톤설계1(강의계획서)2013-1
캡스톤설계1(강의계획서)2013-1
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부
 
P2P Transfers
P2P TransfersP2P Transfers
P2P Transfers
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
Anatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataAnatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club Data
 

Similar to 자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)

Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담Javajigi Jaesung
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정Javajigi Jaesung
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJung Han
 
김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오Yun-hwan Kim
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start정기 김
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
Catalyst Framework 살펴보기
Catalyst Framework 살펴보기Catalyst Framework 살펴보기
Catalyst Framework 살펴보기corund
 

Similar to 자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰) (20)

Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
Scala for play
Scala for playScala for play
Scala for play
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Linq
LinqLinq
Linq
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Angular js quick start
Angular js quick startAngular js quick start
Angular js quick start
 
E government framework
E government frameworkE government framework
E government framework
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Catalyst Framework 살펴보기
Catalyst Framework 살펴보기Catalyst Framework 살펴보기
Catalyst Framework 살펴보기
 

자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)

  • 1. 자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰) 2011. 12. 21 DEVELOPMENT #2 이덕곤
  • 2. §  프로젝트 설계 §  명세서를 만들어 보자 §  로그인과 보드의 통합 §  단위테스트 §  숙제 : 프로젝트 새로 시작해서 만들어 보기 다들 시작 해 보셨나요?
  • 3. §  프로젝트 구현 §  추가적인 뷰에 대한 공부 §  커스텀 태그 §  RSS뷰 §  @Async §  과제 : 작품 명세서 완성하기
  • 4. §  커스텀 태그(Custom Tag)란? §  사용자가 직접 정의해서 사용하는 태그 §  태그 라이브러리(Tag Library) §  사용자가 정의한 태그들을 모아 라이브러리 형태로 만든 것 §  커스텀 태그의 장점 §  한번 작성한 커스텀 태그는 어디서든 사용 가능함 §  JSP 페이지 내에 스크립트 코드를 줄임으로써 가독력을 높일 수 있음 §  태그 라이브러리를 잘 정의함으로써 JSP를 모르는 디자이너도 쉽게 동적인 페이지를 만들 수 있음
  • 5. §  태그 핸들러 클래스(Tag Handler Class) §  태그 라이브러리 서술파일(Tag Library Descriptor, TLD) §  태그를 사용하는 JSP 파일 §  사용할 TLD를 정의하고 커스텀 태그를 사용 2 TDL에 등록 TLD(Tag Library Descriptor) 4 3 접두어와 name으로 해당 클래스 호출 태그 라이브러리 URI 지정 및 커스텀 태그 사용 JSP 1 태그 핸들러 클래스 작성 Tag Handler Class 5 해당 태그 처리 및 결과 반환
  • 6. §  Tag §  SimpleTagSupport 상속받아 제작 §  여러가지 파라미터 및 필수 값 등 설정 가능 §  Function §  하나의 메서드가 하나의 함수 §  간단한 유틸리티를 만들 때 사용 §  .tag 파일 §  특별한 설정이나 클래스, 메서드 없음 §  상황에 맞게 사용
  • 7. <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://ww w.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun. com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>2.1</tlib-version> <short-name>simpleTags</short-name> <uri>http://study.starpl.com/taglib/sstag</uri> <tag> ... </tag> <function> … </function> </taglib>
  • 8. 다양하고 많은 클래스가 있지만… SimpleTagSupport 사용 public class StarplFormatDateTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { PageContext pageContext = (PageContext) getJspContext(); …… // 처리 할 일들 pageContext.getOut().print(출력할_값); } }
  • 9. <tag> <name>formatDate</name> <tag-class>com.starpl.study.base.taglib.FormatDateTag</tag-class> <body-content>empty</body-content> <attribute> <name>locale</name> <required>false</required> <!-- 필수 값인가? --> <rtexprvalue>true</rtexprvalue> <!-- EL 표현식 사용 여부 --> </attribute> <attribute> …… </attribute> …… </tag>
  • 10. Tag Class처럼 상속받아 만들 필요가 없음 public class ElFunctions { public static int rollDice() { int result = (int) (Math.random() * 6) + 1; return result; } …… // 추가할 메서드 }
  • 12. <!-- 5. TAG-LIBRARY 설정입니다. --> <jsp-config> <taglib> <taglib-uri>http://study.starpl.com/taglib/tag</taglib-uri> <taglib-location> /WEB-INF/tags/taglibrary.tld</taglib-location> </taglib> </jsp-config>
  • 13. §  정의 §  Tag, function : <%@ taglib prefix="st" uri="http://study.starpl.com/taglib/tag"%> §  사용 §  Tag : <st:formatDate value="<%=new Date()%>" /> §  Function : ${st:rollIt()} §  .tag 파일 §  정의 : <%@ taglib prefix="t" tagdir="/WEB-INF/tags"%> §  사용 : <t:test data="dataTest"/>
  • 14. <?xml version="1.0" encoding="UTF-8"?> <%@ page contentType="text/xml;charset=UTF-8" pageEncoding=" UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="st" uri="http://study.starpl.com/taglib/tag"%> <rss version="2.0"> <channel> … </channel> </rss>
  • 15. <rss version="2.0"> <channel> <title><![CDATA[보드 RSS]]></title> <link>http://http://127.0.0.1:8080/board</link> <description><![CDATA[아카이브, 타임라인, 소셜 네트워킹, 블로그 , 커뮤니티 서비스]]></description> <language>ko-kr</language> <generator>http://study.starpl.com</generator> </channel> <item> … <item> </rss>
  • 16. <c:forEach var="item" items="${boardList}"> <item> <title><![CDATA[ <c:out value="${item.subject}" escapeXml="true" />]]></title> <link>http://http://127.0.0.1:8080/board/view/${item.boardIdx}</link> <description><![CDATA[${item.content}]]></description> <author><![CDATA[ <c:out value="${item.nickName}" escapeXml="true" />]]></author> <guid>http://http://127.0.0.1:8080/board/view/${item.boardIdx}</guid> <pubDate><s:formatDate value="${item.regDate}" language="en" locale="U S" pattern="EE, dd MMM yyyy HH:mm:ss Z"/></pubDate> </item> </c:forEach>
  • 17. @RequestMapping( value = { "/rss" }, method = RequestMethod.GET) public String showRssList(Model model) { List<Board> boardList = boardDao.getBoardList(); model.addAttribute("boardList", boardList); return viewBase + "/rss"; }
  • 18. §  @Async 어노테이션 메서드 위에 작성하면 됨 §  반환값은 void, java.util.concurrent.Future만 가능 §  사용하기 위한 환경 설정 §  xmlns:task= "http://www.springframework.org/schema/task" §  http://www.springframework.org/schema/task http://w ww.springframework.org/schema/task/spring-task.xsd §  <!-- Spring 3.0 @Task @Async --> §  <task:annotation-driven />
  • 19. §  사용자화 된 뷰를 만들어 보았습니다 §  커스텀 태그를 만들 수 있습니다 §  RSS뷰를 만들 수 있습니다 §  비동기 처리에 대해 배워보았습니다 §  숙제 : 진행하시고 있는 프로젝트에 커스텀 태그를 한 곳 이상 사용해 주세요
  • 20. §  프로젝트 명세서 발표 §  명세서를 발표하는 시간을 가지겠습니다 미완성이어도 좋습니다 §  페이징 뷰를 고민해 봅니다 §  기타 웹 개발에 대한 고민은 같이 해 봅시다 §  과제 : 뒷풀이 참석, 12월 31일까지 명세서 완성 작품은 2012년 1월까지 완성
  • 21. §  커스텀 태그 §  http://www.4te.co.kr/566 §  http://bum20.springnote.com/pages/2445740 §  http://0thinktank.tistory.com/146 §  RSS §  http://en.wikipedia.org/wiki/RSS §  http://www.rssboard.org/rss-specification §  http://golmong.tistory.com/8 §  @Async §  http://whiteship.me/?tag=async