SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
자바 웹 개발 시작하기
(7주차 : 국제화, 확인검증, 예외처리)
2011. 12. 09

DEVELOPMENT #2

이덕곤
§  간단한 게시판을 커뮤니티를 만들어보자!
§  DataBase : MySQL, JDBC, DBCP
§  하이버네이트, 기초 쿼리(CRUD)
§  Transaction(TX)
§  쿠키와 세션
§  커뮤니티 프로젝트의 시작
§  로그인과 테스트와 국제화, 검증, 예외처리
§  jUnit : 단위 테스트 전략 알아보기(다음시간)
§  세션과 로그인 처리
§  국제화 : I18N
§  Validation
§  예외처리 : Exception
§  과제 : 국제화된 커뮤니티로 만들어 오기
§  세션에 사용자 정보를
담아서 인증합니다

package com.starpl.study.base.bean;
public class UserSession
{
private boolean logged;

§  세션 객체를 제작

private int userIdx;
private String userName;

§  저장할 정보

private String nickName;
private String userId;

§  로그인 여부 : boolean

private String email;

§  사용자 번호 : int

public int getUserIdx() {

§  아이디 : String

return userIdx;

§  이름 : String

}
public void setUserIdx(int userIdx) {

§  별명 : String

this.userIdx = userIdx;

§  전자우편 : String

}
}
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAda
pter">
<property name="customArgumentResolvers">
<list>
<bean class="com.starpl.study.base.aop.GlobalArgumentResolver" />
</list>
</property>
<property name="messageConverters">
……
</property>
</bean>
<mvc:interceptors>
<bean class="com.starpl.study.base.aop.RequestInterceptor" />
</mvc:interceptors>
package com.starpl.study.base.aop;
public class GlobalArgumentResolver implements WebArgumentResolver {
@Override
public Object resolveArgument(MethodParameter methodParameter,
NativeWebRequest webRequest) {
if (UserSession.class == methodParameter.getParameterType()) {
HttpSession session = (HttpSession) webRequest.getSessionMutex();
if (session != null) {
UserSession userSession = (UserSession) session.getAttribute("userSession");
if (userSession != null) {
return userSession;
} else {
return new UserSession();
}
}
}
return UNRESOLVED;
}
}
package com.starpl.study.base.aop;
public class RequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception
{
HttpSession session = request.getSession();
UserSession userSession = (UserSession) session.getAttribute("userSession");
if (userSession != null) {
request.setAttribute("_USER", userSession);
} else {
request.setAttribute("_USER", userSession = new UserSession());
}
return true;
}
}
§  확인 : 시스템 구성 단위가 목표한 대로 동작하기 위한
작업으로, 시스템의 모든 계층에 꼭 필요함
§  JSR 303 Bean Validation
§  도메인 객체를 확인하기 위한 Java 표준 기술
§  어노테이션으로 확인 규칙을 명시

§  hibernate-validator-4.2.0.Final.jar
§  validation-api-1.0.0.GA.jar
§  스프링 폼 태그와 연동
<bean id="validator“
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="customArgumentResolvers">
……
</property>
<property name="messageConverters">
……
</property>
<property name="webBindingInitializer">
<bean
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
package com.starpl.study.model.domain;
public class UserJoinCommand
{
@Length(min = 4, max = 16) private String userId;
@Length(min = 4, max = 16) private String userName;
@Length(min = 4, max = 16) private String nickName;
@Length(min = 4, max = 16) private String userPassword;
@Length(min = 4, max = 16) private String userPassword2;
@Email @NotBlank private String email;
// getter, setter 정의
}
@RequestMapping(value = { "/join" }, method = RequestMethod.POST)
public String joinUser(HttpServletRequest request, Model model,
@Valid UserJoinCommand userJoinCommand, BindingResult result)
{
// @Valid 수행 후 에러가 있으면
if (result.hasErrors())
{
// 다시 가입폼으로 보내줍니다.
return viewBase + "/join";
}
…… // 이상이 없으면 가입 처리
}
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<style>
.form-item { margin: 20px 0; }
.form-label { font-weight: bold; }
.form-error-field { background-color: #FFC; }
.form-error-message { font-weight: bold; color: #900; }
</style>
<form:form commandName="userJoinCommand">
<div class="form-item">
<div class="form-label">userId:</div>
<form:input path="userId" size="20" cssErrorClass="form-error-field"/>
<div class="form-error-message"><form:errors path="userId" /></div>
</div>
</form:form>
§  선택이 아닌 필수
§  properties 파일에 저장
§  messages_en.properties
§  messages_ko.properties
§  Properties Editor 플러그인 필요
§  이클립스 마켓에서 다운
§  properties 파일을 ascii값으로 변경
§  "안녕하세요“ 변경하면…
"uc548ub155ud558uc138uc694"
<bean id="messageSource" class="org.springframework.context.support.ReloadableResour
ceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8"/>
<property name="basename" value="/WEB-INF/view/i18n/messages" />
</bean>
<bean id="messageSourceAccessor" class="org.springframework.context.support.Messa
geSourceAccessor">
<constructor-arg ref="messageSource" />
</bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<bean class="com.starpl.study.base.aop.RequestInterceptor" />
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleRe
solver" />
§  messages_en.properties
§  org.hibernate.validator.constraints.NotBlank.message=Can not be empty.
§  org.hibernate.validator.constraints.Length.message
=length must be between {2} and {1}.
§  already_login_err=Have already Logined.
§  not_login_err=No login information.

§  messages_ko.properties
§  org.hibernate.validator.constraints.NotBlank.message=비워둘 수 없습니다.
§  org.hibernate.validator.constraints.Length.message
=길이는 {2}와 {1} 사이 여야합니다.
§  already_login_err=이미 로그인 되어 있습니다.
§  not_login_err=로그인 정보가 없습니다.
§  자바에서 사용하기
§  @Autowired private MessageSourceAccessor msa;
§  msa.getMessage("not_login_err");

§  JSP에서 사용하기
§  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
§  Locale = ${pageContext.response.locale}
( <a href="?locale=ko_kr">ko</a>|<a href="?locale=en_us">us</a> )
§  <fmt:message key="Join"/>
§  에러(Error) 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
§  예외(Exception) 프로그램 실행 중에 발생하는 예기치 않은 사건 중
프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
§  예외가 발생하는 예
§  정수를 0으로 나누는 경우
§  배열의 첨자가 음수 또는 범위를 벗어나는 경우
§  부적절한 형 변환이 일어나는 경우
§  입출력을 위한 파일이 없는 경우 등

§  자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공
§  예외 블록의 지정
try {
...... // try 블록 : 예외가 발생할 가능성이 있는 문장을 지정한다
}
catch(예외타입N 매개변수N) {
...... // 예외 처리 블록 N
}
finally {
...... // finally 블록 : 예외의 발생여부와 상관없이 무조건 수행
}

§  예외를 발생시키기 위해 throw 문 사용
throw new 예외객체타입(매개변수);
Ex : throw new StarplStudyI18nException("already_login_err");
public class StarplStudyException extends RuntimeException
{
private static final long serialVersionUID = 1L;
String message;
/**
* @param message
*/
public StarplStudyException(String message)
{
super(message);
this.message = message;
}
}
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.starpl.study.base.bean.StarplStudyException">
common/exception</prop>
<prop key="com.starpl.study.base.bean.StarplStudyI18nException">
common/exceptionI18n</prop>
</props>
</property>
</bean>
<%@ page language="java“
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" /><title>에러</title>
<link type="text/css" rel="stylesheet" href="/res/css/board.css" />
</head>
<body>
<p align="center">${exception.message}</p>
<div class="button"><a href="javascript:history.back()">뒤로</a></div>
</body>
</html>
§  세션을 사용해 로그인을 관리할 수 있습니다
§  국제화된 어플을 만들 수 있습니다
§  유효성 검사를 할 수 있습니다
§  예외처리를 할 수 있습니다
§  그동안 수고하셨습니다. 다음주 부터는 실전!! ^^*
§  프로젝트 설계
§  명세서를 만들어 보자
§  로그인과 보드의 통합
§  단위테스트
§  동작하는 소프트웨어가 포괄적인 문서보다 우선
이다 : 애자일 동맹 선언 중
§  Properties Editor
http://blog.kangwoo.kr/6
§  국제화
http://choija.com/216
§  Validation
http://www.slideshare.net/kingori/spring-3-jsr-303
§  예외처리
http://blog.ohmynews.com/icorea77/34761
http://ivis.changwon.ac.kr/wiki/index.php?title=%EA%B7%B8%EB%
A6%BC:Java_%EC%98%88%EC%99%B8%EC%B2%98%EB%A6
%AC_%EC%84%B8%EB%AF%B8%EB%82%98.ppt&redirect=no
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)

Weitere ähnliche Inhalte

Was ist angesagt?

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

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

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
DK Lee
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
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
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis BasicJi-Woong Choi
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시태현 김
 
스프링캠프 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수홍 이
 

Was ist angesagt? (20)

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

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

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

 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
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를 사용한
 초간단 커뮤니티 앱 제작
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시
 
스프링캠프 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
 

Andere mochten auch

20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)DK Lee
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며DK Lee
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기Myung Woon Oh
 
8주 dom & event basic
8주  dom & event basic8주  dom & event basic
8주 dom & event basic지수 윤
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2지수 윤
 
4주 CSS Layout
4주 CSS Layout4주 CSS Layout
4주 CSS Layout지수 윤
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)brain816
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
구글 앱 엔진의 활용(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
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 

Andere mochten auch (16)

20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
8주 dom & event basic
8주  dom & event basic8주  dom & event basic
8주 dom & event basic
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
 
4주 CSS Layout
4주 CSS Layout4주 CSS Layout
4주 CSS Layout
 
Database design
Database designDatabase design
Database design
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
구글 앱 엔진의 활용(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
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 

Ähnlich wie 자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)

02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기sung ki choi
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator승훈 오
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기John Kim
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks영욱 김
 

Ähnlich wie 자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리) (20)

02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
okspring3x
okspring3xokspring3x
okspring3x
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
vine webdev
vine webdevvine webdev
vine webdev
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
테스트
테스트테스트
테스트
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
E government framework
E government frameworkE government framework
E government framework
 
20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks
 

자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)

  • 1. 자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리) 2011. 12. 09 DEVELOPMENT #2 이덕곤
  • 2. §  간단한 게시판을 커뮤니티를 만들어보자! §  DataBase : MySQL, JDBC, DBCP §  하이버네이트, 기초 쿼리(CRUD) §  Transaction(TX) §  쿠키와 세션 §  커뮤니티 프로젝트의 시작
  • 3. §  로그인과 테스트와 국제화, 검증, 예외처리 §  jUnit : 단위 테스트 전략 알아보기(다음시간) §  세션과 로그인 처리 §  국제화 : I18N §  Validation §  예외처리 : Exception §  과제 : 국제화된 커뮤니티로 만들어 오기
  • 4. §  세션에 사용자 정보를 담아서 인증합니다 package com.starpl.study.base.bean; public class UserSession { private boolean logged; §  세션 객체를 제작 private int userIdx; private String userName; §  저장할 정보 private String nickName; private String userId; §  로그인 여부 : boolean private String email; §  사용자 번호 : int public int getUserIdx() { §  아이디 : String return userIdx; §  이름 : String } public void setUserIdx(int userIdx) { §  별명 : String this.userIdx = userIdx; §  전자우편 : String } }
  • 5. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAda pter"> <property name="customArgumentResolvers"> <list> <bean class="com.starpl.study.base.aop.GlobalArgumentResolver" /> </list> </property> <property name="messageConverters"> …… </property> </bean> <mvc:interceptors> <bean class="com.starpl.study.base.aop.RequestInterceptor" /> </mvc:interceptors>
  • 6. package com.starpl.study.base.aop; public class GlobalArgumentResolver implements WebArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) { if (UserSession.class == methodParameter.getParameterType()) { HttpSession session = (HttpSession) webRequest.getSessionMutex(); if (session != null) { UserSession userSession = (UserSession) session.getAttribute("userSession"); if (userSession != null) { return userSession; } else { return new UserSession(); } } } return UNRESOLVED; } }
  • 7. package com.starpl.study.base.aop; public class RequestInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); UserSession userSession = (UserSession) session.getAttribute("userSession"); if (userSession != null) { request.setAttribute("_USER", userSession); } else { request.setAttribute("_USER", userSession = new UserSession()); } return true; } }
  • 8. §  확인 : 시스템 구성 단위가 목표한 대로 동작하기 위한 작업으로, 시스템의 모든 계층에 꼭 필요함 §  JSR 303 Bean Validation §  도메인 객체를 확인하기 위한 Java 표준 기술 §  어노테이션으로 확인 규칙을 명시 §  hibernate-validator-4.2.0.Final.jar §  validation-api-1.0.0.GA.jar §  스프링 폼 태그와 연동
  • 9. <bean id="validator“ class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="validationMessageSource" ref="messageSource" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="customArgumentResolvers"> …… </property> <property name="messageConverters"> …… </property> <property name="webBindingInitializer"> <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="validator" ref="validator" /> </bean> </property> </bean>
  • 10. package com.starpl.study.model.domain; public class UserJoinCommand { @Length(min = 4, max = 16) private String userId; @Length(min = 4, max = 16) private String userName; @Length(min = 4, max = 16) private String nickName; @Length(min = 4, max = 16) private String userPassword; @Length(min = 4, max = 16) private String userPassword2; @Email @NotBlank private String email; // getter, setter 정의 }
  • 11. @RequestMapping(value = { "/join" }, method = RequestMethod.POST) public String joinUser(HttpServletRequest request, Model model, @Valid UserJoinCommand userJoinCommand, BindingResult result) { // @Valid 수행 후 에러가 있으면 if (result.hasErrors()) { // 다시 가입폼으로 보내줍니다. return viewBase + "/join"; } …… // 이상이 없으면 가입 처리 }
  • 12. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <style> .form-item { margin: 20px 0; } .form-label { font-weight: bold; } .form-error-field { background-color: #FFC; } .form-error-message { font-weight: bold; color: #900; } </style> <form:form commandName="userJoinCommand"> <div class="form-item"> <div class="form-label">userId:</div> <form:input path="userId" size="20" cssErrorClass="form-error-field"/> <div class="form-error-message"><form:errors path="userId" /></div> </div> </form:form>
  • 13. §  선택이 아닌 필수 §  properties 파일에 저장 §  messages_en.properties §  messages_ko.properties §  Properties Editor 플러그인 필요 §  이클립스 마켓에서 다운 §  properties 파일을 ascii값으로 변경 §  "안녕하세요“ 변경하면… "uc548ub155ud558uc138uc694"
  • 14. <bean id="messageSource" class="org.springframework.context.support.ReloadableResour ceBundleMessageSource"> <property name="defaultEncoding" value="UTF-8"/> <property name="basename" value="/WEB-INF/view/i18n/messages" /> </bean> <bean id="messageSourceAccessor" class="org.springframework.context.support.Messa geSourceAccessor"> <constructor-arg ref="messageSource" /> </bean> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> <bean class="com.starpl.study.base.aop.RequestInterceptor" /> </mvc:interceptors> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleRe solver" />
  • 15. §  messages_en.properties §  org.hibernate.validator.constraints.NotBlank.message=Can not be empty. §  org.hibernate.validator.constraints.Length.message =length must be between {2} and {1}. §  already_login_err=Have already Logined. §  not_login_err=No login information. §  messages_ko.properties §  org.hibernate.validator.constraints.NotBlank.message=비워둘 수 없습니다. §  org.hibernate.validator.constraints.Length.message =길이는 {2}와 {1} 사이 여야합니다. §  already_login_err=이미 로그인 되어 있습니다. §  not_login_err=로그인 정보가 없습니다.
  • 16. §  자바에서 사용하기 §  @Autowired private MessageSourceAccessor msa; §  msa.getMessage("not_login_err"); §  JSP에서 사용하기 §  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> §  Locale = ${pageContext.response.locale} ( <a href="?locale=ko_kr">ko</a>|<a href="?locale=en_us">us</a> ) §  <fmt:message key="Join"/>
  • 17. §  에러(Error) 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 §  예외(Exception) 프로그램 실행 중에 발생하는 예기치 않은 사건 중 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 §  예외가 발생하는 예 §  정수를 0으로 나누는 경우 §  배열의 첨자가 음수 또는 범위를 벗어나는 경우 §  부적절한 형 변환이 일어나는 경우 §  입출력을 위한 파일이 없는 경우 등 §  자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공
  • 18. §  예외 블록의 지정 try { ...... // try 블록 : 예외가 발생할 가능성이 있는 문장을 지정한다 } catch(예외타입N 매개변수N) { ...... // 예외 처리 블록 N } finally { ...... // finally 블록 : 예외의 발생여부와 상관없이 무조건 수행 } §  예외를 발생시키기 위해 throw 문 사용 throw new 예외객체타입(매개변수); Ex : throw new StarplStudyI18nException("already_login_err");
  • 19. public class StarplStudyException extends RuntimeException { private static final long serialVersionUID = 1L; String message; /** * @param message */ public StarplStudyException(String message) { super(message); this.message = message; } }
  • 20. <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="com.starpl.study.base.bean.StarplStudyException"> common/exception</prop> <prop key="com.starpl.study.base.bean.StarplStudyI18nException"> common/exceptionI18n</prop> </props> </property> </bean>
  • 21. <%@ page language="java“ contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8" /><title>에러</title> <link type="text/css" rel="stylesheet" href="/res/css/board.css" /> </head> <body> <p align="center">${exception.message}</p> <div class="button"><a href="javascript:history.back()">뒤로</a></div> </body> </html>
  • 22. §  세션을 사용해 로그인을 관리할 수 있습니다 §  국제화된 어플을 만들 수 있습니다 §  유효성 검사를 할 수 있습니다 §  예외처리를 할 수 있습니다 §  그동안 수고하셨습니다. 다음주 부터는 실전!! ^^*
  • 23. §  프로젝트 설계 §  명세서를 만들어 보자 §  로그인과 보드의 통합 §  단위테스트 §  동작하는 소프트웨어가 포괄적인 문서보다 우선 이다 : 애자일 동맹 선언 중
  • 24. §  Properties Editor http://blog.kangwoo.kr/6 §  국제화 http://choija.com/216 §  Validation http://www.slideshare.net/kingori/spring-3-jsr-303 §  예외처리 http://blog.ohmynews.com/icorea77/34761 http://ivis.changwon.ac.kr/wiki/index.php?title=%EA%B7%B8%EB% A6%BC:Java_%EC%98%88%EC%99%B8%EC%B2%98%EB%A6 %AC_%EC%84%B8%EB%AF%B8%EB%82%98.ppt&redirect=no