db - ACID

DB/Common 2013. 6. 22. 12:21


ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜젝션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계를 트랜잭션이라고 한다. 예를 들어, 은행에서의 계좌이체를 트랜잭션이라고 할 수 있는데, 계좌이체 자체의 구현은 내부적으로 여러 단계로 이루어질 수 있지만 전체적으로는 '송신자 계좌의 금액 감소', '수신자 계좌의 금액 증가'가 한 동작으로 이루어져야 하는 것을 의미한다.

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 모두 수행되었는지 아니면 모두 실행이 안되었는지를 보장하는 능력이다. 자금 이체는 성공할 수도 실패할 수도 있지만 원자성은 중간 단계까지 실행되고 실패하는 일은 없도록 하는 것이다.
  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
  • 고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.
  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모드 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

구현[편집]

ACID속성을 구현하는 건 간단한 문제가 아니다. 트랜잭션 처리는 인덱스 업데이트를 비롯한 수많은 변화가 필요하다.

연산 순서는 실패의 원인이 되기도 한다. 예를 들면 공간부족이나 CPU 자원 점유문제가 있다.

ACID는 DB의 모든 연산이 한번에 실행되는 것을 권장한다. 사실상 이것은 정렬하기 어려운 문제이다. 널리 사용하는 두 가지 방법이 있는데 로깅방식과 새도우 패이징이다. 두경우 모두 업데이트 되는 데이터(구현방식에 따라 읽혀지는 데이터)에 락(lock)을 거는 것이 필요하다. 로깅방식에서 원자성은 DB에 데이터를 업데이트 하기 전에 로그에 모든 변경사항을 기록하는 것으로 보장된다. 이것은 크래쉬 현상이 발생하더라도 DB 무결성을 보장해준다. 새도 패이징 방식은 변경이 DB의 복사본에 저장된다. 그리고 새로운 복사본은 트랜잭션이 commit 되면 활성화 된다. 복사본은 변경 전 데이터 부분만을 의미한다.

최근까지 DB들은 대부분 ACID를 보장하기 위해 락(lock)에 의존했다. 이것은 데이터 처리전에 언제나 락이 필요함을 의미한다. 많은 수의 락을 관리하게 되면 동시작업 수행이 어렵고 성능저하를 초래하게 된다. A유저가 특정 테이블을 읽고 있다면 B유저는 A의 트랜잭션이 끝나기를 기다려야 한다.

락의 대안으로 수정되는 모든 데이터를 별도 복사본으로 관리하는 MVCC(multiversion concurrency control)가 있다. 방금 전 언급한 A,B 유저의 예를 들면 A가 트랜잭션을 시작할 때 가지고 있던 복사본을 B에 제공하여 동시에 수행이 가능하다. 이 방식은 사용자들이 데이터 처리하는 데 있어 많은 유연성을 제공한다.

네트워크 환경에서 ACID특성을 보장하는 것은 어렵다. 연결이 끊길 수도 있고 두 사용자가 동시에 DB의 동일한 부분을 접근할 수도 있다

트랜잭션의 commit 여부를 각 사용자로부터 확인하기 위해 2단계 commit이 분산 트랜잭션에 적용된다. 트랜잭션이 병렬 수행되는 경우 많은 주의가 필요하다. 2단계 락은 완전한 독립성을 보장하기 위해 사용된다.






ACID 는 신뢰할 수있는 거래 시스템이 있어야 성질로서 1970 년대 후반에 짐 그레이 가 정의한 개념에서 더 이상 분해해서는 안된다는 의미의 자성 ( 영어 : atomicity , 불가분성 ) 일관 성 (영어 : consistency ), 독립성 ( 영어 : isolation ) 및 지속성 ( 영어 : durability )은 트랜잭션 처리 의 신뢰성을 보증하기 위해 요구되는 성질이라고하는 사고 방식이다 [1] .

이 말은 그 4 가지 성격을 나타내는 영어 단어의 머리 글자 를 취하고 만든 합성어 이며, 1983 년 안드레아스 로이터 [2] 와 테오 헬데르 [3] 에 의해 제창되었다.

목차

  [ 숨기기 ] 

개요 편집 ]

데이터베이스에서는 데이터에 대한 하나의 논리적 조작을 트랜잭션 이라고 부른다. ACID의 각 특성을 은행에서 계좌 간 송금을 예로 들어 설명한다.

자성 편집 ]

트랜잭션에 포함 된 모든 작업이 실행되거나 전혀 실행되지 않도록하는 성질을 말한다. 일본어로는 원 자성 또는 원자 성과도 불린다. 계좌 A에서 계좌 B에 대해 1 만엔 송금하는 경우를 생각했을 때, 송금 작업은 다음 두 작업에 의해 이루어진다.

  1. 계좌 A의 잔액에서 1 만엔을 끄는
  2. 계좌 B의 잔액에 1 만엔을 추가

자성이 보장되는 것은 위의 조작 1,2가 모두 수행되거나 전혀 수행되지 않는 것을 가리킨다. 한쪽 만 실행 된 경우 은행 전체의 예금 잔고 충돌이 발생 해 버린다.

일관성 편집 ]

일본어에서는 일관성 또는 무결성이라고도 불린다. 트랜잭션 시작 및 종료시에 미리 주어진 무결성을 충족 시킨다고 보장하는 성질을 말한다. 즉, 데이터베이스의 규칙, 즉 무결성 조건을 충족하지 않는 상태를 일으키는 트랜잭션은 실행이 중단된다.

예금 잔고를 예로하면, 그 값은 일반적으로 0 또는 양수 값을 가지고 조건을 충족 필요가있다. 따라서 계좌 A에서 송금 할 때, 그 전후에 A의 계좌 잔고가 마이너스가되는 금액은 송금하지 못하게한다. 이러한 규칙을 보장하는 것이 일관성 역할이다.

독립성 편집 ]

트랜잭션 동안 수행하게되는 작업 과정이 다른 작업에서 은폐되는 것을 말하며, 일본어로 분리, 독립성 또는 고립 성이라고도한다. 형식적으로는 독립성과 거래 내역이 직렬화 된 것으로 볼 수있다. 이 성질과 성능 트레이드 오프 의 관계에 있기 때문에 일반적으로이 성격의 일부를 완화하여 구현되는 경우가 많다.

예금 잔액의 예에서는 잔액 100 만엔의 계좌 A에서 잔액 200 만엔의 계좌 B에 1 만엔 송금 할 경우 작업이

  1. 계좌 A의 잔액에서 1 만엔을 끄는
  2. 계좌 B의 잔액에 1 만엔을 추가

의 순서로 이루어 졌다고한다. 취할 수있는 내부 상태는

시점계좌 A계좌 B
송금 전100 만엔200 만엔
실행 중99 만엔200 만엔
송금 후99 만엔201 만 원

세되지만, 외부에서 송금 전에 와 송금 후 중 하나의 상태만을 관측 할 수 없다.

지속성 편집 ]

지속성 또는 지속성했다. 트랜잭션 작업의 완료 통지를 사용자가받은 시점에서, 그 작업은 지속되고, 결과가 손실되지 않는다는 것을 가리킨다. 이것은 시스템 장애를 허용하는 것이며,DBMS 는 무결성 제약 조건 을 체크되어 있고 트랜잭션을 중단하지 말라는 ​​것이다. 많은 데이터베이스 구현은 트랜잭션 작업을 지속성 저장 장치 에 로그로 기록 시스템에 이상이 발생하면 로그를 사용하여 이상 발생 이전 상태로 복구하는 것으로 지속성을 실현하고있다.

구현 편집 ]

트랜잭션의 상태 변경, 예를 들어 데이터 자체뿐만 아니라 그에 따른 인덱스 의 업데이트처럼 여러 변화에 의해 구성되는 경우가 많아 복잡하다. 또한 엄격하게 ACID를 구현하려고하면 광범위한 잠금을 얻거나 많은 데이터를 복제하는 등의 성능면에서 열화가 너무 커지는 경우가있다. ACID를 엄격하게 구현하는 것은 어렵다.

또한 ACID를 실현하는 절차 자체가 시스템 요인에서 실패 해 버리는 경우도있어, 그 실패 요인을 해결 한 후 복구 할 수있는 조치를 취할 필요가있다. 예를 들어, UNIX 파일 구현에 대해 저널 파일 시스템 에서 파일의 일관성 보호, 데이터의 전체 백업 등의 대처 등 많은 개선과 처리의 궁리가 도입되고있다.

ACID는 데이터베이스가 모든 작업을 한번에 처리 할 것을 요구하고있다. 실제로이 처리手筈을 정돈하기 어렵다. 그러나 이렇게하는데 로그 선행 기입 ( 영어 : write ahead logging )와 그림자 페이징 의 두 가지 일반적인 기법이 존재한다. 두 경우 모두, 읽고 쓰기하는 모든 정보에 대해 잠금 을 가져 두지 않으면 안된다. 로그 선행 기입의 경우 데이터베이스에 실제 쓰기 작업을 수행하기 전에 모든 redo 재실행 와 undo ( 되돌리기 ) 의 정보가 기록되는 것으로, 원 자성 이 보장된다. 그림자 페이징의 경우 업데이트는 데이터베이스의 복사본을 만든 트랜잭션이 커밋 될 때 새 데이터베이스가 활성화된다. 이 복사본은 전체를 복사하는 것이 아니라 변경되지 않은 부분은 이전 버전의 데이터베이스에 대한 참조 형태로 진행된다.

여러 트랜잭션을 동시에 수행 할 때, 독립성의 실현에주의해야한다. 사실, 완전한 독립성의 실현은 높은 비용 때문에 실현 트랜잭션 격리 수준 을 설정하고 구현하게된다. 또한 격리 수준의 구현은 교착 상태와 라이브 락 등에주의하여 수행해야한다. 예를 들어 간 위상 잠금 등이 일반적으로 이용된다.

트랜잭션과 관련된 참가자가 여러 개인 경우, 예를 들면 투 단계 커밋 (2PC)이 일반적으로 이용된다. 투 단계 커밋에서는 각 참가자가 커밋에 동의 여부에 대해 일치하는 것을 보장한다.

트랜잭션을 고려한 파일 시스템 편집 ]

다른 모델 편집 ]

ACID는 대조적으로, 결과적 일관성 (BASE [4] )라는 일관성 모델 도 고안되어있다.

각주 편집 ]

  1. ISO / IEC 10026-1:1992 Section 4
  2. ^ Andreas Reuter
  3. ^ Theo Härder
  4. 영어 : basically available, soft state




출처 - http://ko.wikipedia.org/wiki/ACID





'DB > Common' 카테고리의 다른 글

search - Elasticsearch  (0) 2014.04.24
db - jdbc vs jpa  (0) 2013.09.14
Sharding & Query Off Loading  (0) 2013.04.29
SELECT문 순서와 처리순서  (0) 2012.08.29
데이터 입력과 db insert 사이에 버퍼링 방법  (0) 2012.07.13
Posted by linuxism
,



Spring's Form Tag

Spring의 폼 태그는 다른 폼 태그 라이브러리와는 다르게 Spring Web MVC와 연동 될 수 있다. 이는 태그에서 command 객체, controller 참조 데이터로의 접근이 가능하다는 것이다. Spring Form tag의 사용방법은 매우 간단하며 예제를 중심으로 각 tag에 대한 내용을 살펴본다.

configuration

spring 폼 태그를 사용하기 위해서는 spring-form.tld파일이 필요하고 이는 spring-webmvc-2.5.2.jar 파일에 포함되어 있다. 이 폼 태그를 사용하기 위해서는 JSP 페이지에 taglib을 추가해줘야한다.
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

form tag

'form'태그는 데이터 바인딩을 위해 태그 안에 바인딩 path를 지정해 줄 수 있다. path에 해당되는 값은 도메인 모델의 Bean 객체를 의미한다. 사용예는 다음과 같다.
<form:form commandName="user">
userId : <form:input path="userId" />
</form:form>
또한 spring form 태그를 이용하기 위해서는 각각의 입력 path값에 매칭될 도메인 객체를 지정해 줘야 하는데 form태그 안에 commandName 속성으로 다음과 같이 지정해 줄 수 있다.
<% request.setAttribute("user", sample.services.UserVO())%>
이러한 commandName의 기본값은 "command"이며 input값들과 매칭될 도메인 객체를 request값으로 세팅해 줘야한다. 이 값은 SimpleFormController를 사용할 경우 FormBackingObject()메소드에서 지정해 줄 수도있다.
protected Object formBackingObject(HttpServletRequest request)
	throws Exception {
	UserVO vo=new UserVO();
	request.setAttribute("user",vo);
	return new UserVO();
}

input tag

HTML의 input태그의 value가 text인 것을 기본 value로 갖는다. 이 태그의 예는 위의 form태그 예에서 볼수있다. 또한 다음과 같은 화면을 출력하게 된다.

checkbox tag

다음은 checkbox tag의 예이다. 마찬가지로 path에 도메인 객체의 bean name을 매핑시켜주고 label속성을 이용하면 jsp페이지로 보여질 이름을 설정할 수 있다.
<form:checkbox path="hobby" value="listeningMusic" label="음악감상"/>
<form:checkbox path="hobby" value="study" label="공부"/>

checkboxes tag

위의 checkbox tag는 각각의 항목에 대해 작성해줘야 하지만 checkboxes tag를 사용하면 items속성을 이용해서 한줄로 나타내줄 수 있다. 이러한 items에 들어갈 값은 컨트롤러의 formBackingObject()메소드에서 Array, List, Map형태의 것들로 넘겨 줄 수 있다. Map의 key와 value쌍으로 넘겨줄 경우 key는 태그의 value값이 되고 value는 label명이 된다. (단, Array나 List로 넘길 경우 label은 value와 같은 값을 가지게 된다.) 다음은 그 예이다.
protected Object formBackingObject(HttpServletRequest request)
 	throws Exception {
	UserVO vo=new UserVO();
	Map interest =new HashMap();
	interest.put("reading", "독서");
	interest.put("listeningMusic", "음악감상");
	interest.put("study", "공부");
	request.setAttribute("interest",interest);
 	request.setAttribute("user",vo);
return new UserVO();
}
<tr>
	<td>hobby :</td>
	<td><form:checkboxes path="hobby" items="${interest}" /></td>
</tr>

radiobutton tag

다음은 radiobutton tag의 예이다. radiobutton tag 또한 label 속성을 이용하여 label명을 설정해 줄 수 있다.
<tr>
    <td>Sex:</td>
    <td>Male: <form:radiobutton path="sex" value="M" label="남자"/> <br/>
        Female: <form:radiobutton path="sex" value="F" label="여자"/> </td>
</tr>

radiobuttons tag

다음은 radiobuttons tag의 예이다. items 속성의 사용방법은 위의 checkboxes tag와 동일하다.
<tr>
    <td>Sex:</td>
    <td><form:radiobuttons path="sex" items="${sexOptions}"/></td>
</tr>

password tag

다음은 password tag의 예이다.
<tr>
	<td>password :</td>
	<td><form:password path="password" /></td>
</tr>

select tag

select tag도 위의 checkboxes tag나 radiobuttons tag 처럼 items 속성을 이용하여 formBackingObject에서 넘겨주는 값으로 자동 매핑 시켜줄 수 있다.
protected Object formBackingObject(HttpServletRequest request)
 	throws Exception {
	UserVO vo=new UserVO();
	Map address =new HashMap();
	address.put("seoul","서울");
	address.put("daegu","대구");
	address.put("busan","부산");
	request.setAttribute("address",address);
 	request.setAttribute("user",vo);
return new UserVO();
}
<tr>
	<td>주소</td>
	<td><form:select path="address" items="${address}" /></td>
</tr>
일반적인 option tag와 함께 아래와 같이 사용할 수도 있다.

option tag

다음은 option tag의 사용 예이다.
<tr>
	<td>주소</td>
	<td><form:select path="address">
		<form:option value="seoul" label="서울" />
		<form:option value="daegu" label="대구" />
		<form:option value="busan" label="부산" />
	</form:select></td>
</tr>

options tag

다음은 options 태그의 사용예이다.
<tr>
	<td>주소</td>
	<td><form:select path="address">
		<form:options items="${address}" />
	</form:select></td>
</tr>

textarea tag

다음은 textarea tag의 사용 예이다.
<td>Note :</td>
<td><form:textarea path="comment" rows="3" cols="20"></form:textarea></td>

hidden tag

다음은 hidden tag의 사용 예이다.
<form:hidden path="userId" />

errors tag

Spring은 validatior에서 얻어진 메시지를 JSP페이지에서 쉽게 출력할 수 있도록 spring form 태그의 form:errors태그를 제공한다. 이는 생성한 validator를 통해 입력값의 유효성 체크 후 에러 메시지를 출력해주는데 자세한 사항은 본 매뉴얼 Spring MVC validator - form:errors 태그 사용 방법을 참고한다.

sample

  • tag.jsp(입력화면)
  • <body>
    <form:form commandName="user">
      <table>
         <tr>
            <td>userId :</td>
            <td><form:input path="userId" /></td>
         </tr>
         <tr>
            <td>password :</td> 
            <td><form:password path="password" /></td>
         </tr>
         <tr>
            <td>sex :</td>
            <td><form:radiobutton path="sex" value="M" label="남자" /> 
                <form:radiobutton path="sex" value="F" label="여자" /></td>
         </tr>
         <tr>
            <td>주소</td>
            <td><form:select path="address" items="${address}">
                </form:select></td>
         </tr>
         <tr>
            <td>hobby :</td>
            <td><form:checkboxes path="hobby" items="${interest}" /></td>
         </tr>
         <tr>
            <td>Note :</td>
            <td><form:textarea path="comment" rows="3" cols="20"></form:textarea></td>
         </tr>
       </table>
       <input type="submit" value="submit"/>
    </form:form>
    </body>
  • FormTagTestController.java
  • public class FormTagTestController extends SimpleFormController {
    	private static Log log = LogFactory.getLog(FormTagTestController.class);
    	
    	public FormTagTestController() {
    		setCommandName("user");
    		setCommandClass(UserVO.class);
    		setFormView("tag");
    		setSuccessView("formtagafter");
    	}
    
    	protected ModelAndView onSubmit(HttpServletRequest request,
    			HttpServletResponse response, Object command,
    			BindException exception) throws Exception {
    
    		System.out.println(command.toString());
    		// TODO Auto-generated method stub
    		UserVO vo = (UserVO) command;
    		return new ModelAndView(getSuccessView(),"vo", vo);
    	}
    	 protected Object formBackingObject(HttpServletRequest request)
    	 throws Exception {
    		UserVO vo=new UserVO();
    
    		Map interest =new HashMap();
    		interest.put("reading", "독서");
    		interest.put("listeningMusic", "음악감상");
    		interest.put("study", "공부");
    		
    		Map address =new HashMap();
    		address.put("seoul","서울");
    		address.put("daegu","대구");
    		address.put("busan","부산");
    
    		request.setAttribute("address",address);
    		request.setAttribute("interest",interest);
    
    	 request.setAttribute("user",vo);
    	 
    	 return new UserVO();
    	 }
    }
  • formtagafter.jsp(출력화면)
  • <body>
    userId = ${vo.userId}<br/>
    password = ${vo.password}<br/>
    address = ${vo.address}<br/>
    sex = ${vo.sex}<br/>
    hobby= "${vo.hobby}"<br/>
    note= "${vo.comment}"<br/>
    </body>
    위의 JSP 코드처럼 Expression Language(JSP 2.0에서 지원)를 사용하면 간단하게 컨트롤러에서 넘겨준 객체의 빈 값을 출력할 수 있다.

Resources



출처 - http://dev.anyframejava.org/anyframe/doc/web/3.0.1/webfw/springmvc/basic/tag.html








In this tutorial you will learn about the Spring MVC form tags

Spring Form Tags Tutorial

Spring framework provides the form specific tags for designing a form. You can also use the simple html form tag also for designing the form. To use the form tag in your JSP page you need to import the Tag Library into your page as.

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>


A Simple example is given below that illustrates all the form tags

myForm.jsp

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<h2 align="center">Spring Form Tags</h2>
<form:form method="POST" name="myForm" commandName="myForm" action="#">
<table align="center" cellpadding="10" cellspacing="10"
bgcolor
="#CCFFCC">
<tr>
<td><form:label path="hiddenField">Hidden Field</form:label></td>
<td><form:hidden path="hiddenField"></form:hidden></td>
</tr>
<tr>
<td><form:label path="textField">Text Field</form:label></td>
<td><form:input path="textField"></form:input></td>
</tr>
<tr>
<td><form:label path="password">Password</form:label></td>
<td><form:input path="password"></form:input></td>
</tr>
<tr>
<td><form:label path="radioButton">Radio Button</form:label></td>
<td><form:radiobutton path="radioButton" value="M" label="M"></form:radiobutton>
<form:radiobutton path="radioButton" value="F" label="F"></form:radiobutton></td>
</tr>
<tr>
<td><form:label path="radioButton">Radio Buttons from List</form:label></td>
<td><form:radiobuttons items="${countryList}" path="checkBox"
itemLabel
="name" itemValue="id"></form:radiobuttons></td>
</tr>
<tr>
<td><form:label path="checkBox">Check Box</form:label></td>
<td><form:checkbox path="checkBox" value="S" label="Student"></form:checkbox>
<form:checkbox path="checkBox" value="E" label="Employee"></form:checkbox></td>
</tr>
<tr>
<td><form:label path="checkBox">Check Boxes from List</form:label></td>
<td><form:checkboxes items="${countryList}" path="checkBox"
itemLabel
="name" itemValue="id" /></td>
</tr>
<tr>
<td><form:label path="select">Select Country</form:label></td>
<td><form:select path="select">
<form:option value="0" label="Please Select"></form:option>
<form:options items="${countryList}" itemValue="id" itemLabel="name" />
</form:select></td>
</tr>

<tr>
<td><form:label path="textArea">Text Area</form:label></td>
<td><form:textarea path="textArea" cols="35" rows="3"></form:textarea></td>
</tr>

<tr>
<td><form:label path="file">File Upload</form:label></td>
<td><form:input type="file" path="file"></form:input></td>
</tr>

<tr>
<td align="right"><input type="submit" value="Submit Form"></input></td>
<td align="center"><input type="reset" value="Clear Form"></input></td>
</tr>
</table>
</form:form>


Bean class for the above form

SampleInterfaceImp.java

package net.roseindia.model;

import java.util.List;

import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class MyForm {
       
private String textField;
       
private String hiddenField;
       
private String password;
       
private String radioButton;
       
private String select;
       
private List countryList;
       
private String textArea;
       
private String checkBox;
       
private CommonsMultipartFile file;

       
       
public String getHiddenField() {
               
return hiddenField;
       
}

       
public void setHiddenField(String hiddenField) {
               
this.hiddenField = hiddenField;
       
}

       
public String getTextField() {
               
return textField;
       
}

       
public void setTextField(String textField) {
               
this.textField = textField;
       
}

       
public String getPassword() {
               
return password;
       
}

       
public void setPassword(String password) {
               
this.password = password;
       
}

       
public String getRadioButton() {
               
return radioButton;
       
}

       
public void setRadioButton(String radioButton) {
               
this.radioButton = radioButton;
       
}

       
public String getSelect() {
               
return select;
       
}

       
public void setSelect(String select) {
               
this.select = select;
       
}

       
public List getCountryList() {
               
return countryList;
       
}

       
public void setCountryList(List countryList) {
               
this.countryList = countryList;
       
}

       
public String getTextArea() {
               
return textArea;
       
}

       
public void setTextArea(String textArea) {
               
this.textArea = textArea;
       
}

       
public String getCheckBox() {
               
return checkBox;
       
}

       
public void setCheckBox(String checkBox) {
               
this.checkBox = checkBox;
       
}

       
public CommonsMultipartFile getFile() {
               
return file;
       
}

       
public void setFile(CommonsMultipartFile file) {
               
this.file = file;
       
}

}


Controller for the form

SampleInterfaceImp.java

package net.roseindia.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import net.roseindia.model.Country;
import net.roseindia.model.MyForm;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyFormController {

       
@RequestMapping("/myForm.html")
       
public String loadForm(Map model, @Valid MyForm myForm) {
               
List countryList = new ArrayList();
                countryList
= loadCountry();
                model
.put("countryList", countryList);
               
return "myForm";
       
}

       
public List loadCountry() {
               
List countryList = new ArrayList();
                countryList
.add(new Country(1, "India", "Description Of India"));

                countryList
.add(new Country(2, "China", "Description Of China"));

                countryList
.add(new Country(3, "England", "Description Of England"));

                countryList
.add(new Country(4, "Srilanka", "Description Of Srilanka"));

                countryList
.add(new Country(5, "Kenya", "Description Of Kenya"));

               
return countryList;
       
}
}


The Country model class for displaying select, checkboxes and radiobutton groups

Country.java

package net.roseindia.model;

public class Country {
       
private int id;
       
private String name;
       
private String description;

       
public Country() {

       
}

       
public Country(int id, String name, String description) {
               
this.id = id;
               
this.name = name;
               
this.description = description;
       
}

       
public int getId() {
               
return id;
       
}

       
public void setId(int id) {
               
this.id = id;
       
}

       
public String getName() {
               
return name;
       
}

       
public void setName(String name) {
               
this.name = name;
       
}

       
public String getDescription() {
               
return description;
       
}

       
public void setDescription(String description) {
               
this.description = description;
       
}
}



When you run this application it will display message as shown below:






출처 - http://www.roseindia.net/tutorial/spring/spring-mvc-form-tags.html








Posted by linuxism
,


요즘 윈도우가 아닌 대부분의 운영체제 및 툴이 UTF-8을 기본으로 한다.
하지만 이런 환경에서 한글을 처리하는데 어느 한 곳이 UTF-8로 되어 있지 않으면 어김없이 한글이 깨어진다.
UTF-8로 작성된 자바클래스에서 한글을 작성하고 javadoc을 생성할때도 마찬가지로 UTF-8로 생성해줘야한다.

이러한 이유로 Generate Javadoc에서 -locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8 파라메터를 추가한다.




출처 - http://javagalaxy.tistory.com/16





'IDE & Build > Eclipse' 카테고리의 다른 글

subclipse - Failed to load JavaHL Library  (0) 2014.02.16
eclipse - CDT g++  (0) 2013.09.02
svn password 초기화  (0) 2013.01.16
eclipse.ini 설정  (0) 2012.12.29
eclipse - 프로젝트 패싯(Project Facets)을 사용한 WTP 확장  (0) 2012.10.24
Posted by linuxism
,