출처 - http://choija.com/212
[Spring3 MVC (1)] Spring3 MVC Framework 소개
2011/11/28 14:09 in 공부/FrameWork
이미지
출처 : Springsrouce
Spring web MVC framework 는
다른
웹
프레임워크
들과
마찬가지로
요청들에
대해서
컨트롤러
들로
분배하고, 프레임워크의
여러가지
기능을
제공하는 servlet 중심으로
설계되어
있다. 이게
바로 Spring에서 DispatcherServlet 인데
완전하게 Spring IoC container 와
통합되어
있으며, Spring의
다른
모든
기능들을
사용
할
수
있도록
해준다.
Spring 3.0 MVC 의
요청
처리
절차는
아래와
같다.
1. 클라이언트가 http request 형태로 web container 에
요청을
보낸다.
2. 들어오는 request 는 Front Controller (DispatcherServlet) 에
의해서
가로채
지고, 적절한 HandlerMapping을
찾는다.
3. Handler Mapping의
도움으로, DispatcherServlet 은
들어온
요청을
적절한 Controller 로
보낸다.
4. Controller 는
들어온
요청을
처리하고(비즈니스로직수행) 그
결과로 Model과 View 를 ModelAndView 라는
객체의
인스턴스
형태로 Front Controller 에
다시
전달한다.
5. Front Controller 는 ViewResolver 오브젝트를
이용하여 이 view 를
분석한다 (이것은 JSP일
수도 있고, velocity, freemaker 등이
될
수
있다).
6. 선택된 view 는
변환되어
다시
클라이언트에게
보여진다.
Spring 3.0 의
기능들
- Spring 3.0 framework 는 Java 5.0 을
지원 : annotation 기반의
설정을
지원한다. Java 5의
기능인 generics, annotations, vargs 등을
스프링에서
사용
가능하다.
- 새로운 expression language 인 Spring Expression Language SpEL 이
소개되었다.
- REST web service 를
지원한다.
- 데이터
변환이
매우
쉽다. 어노테이션
기반의
데이터
포멧팅을
지원한다. @DateTimeFormat(iso=ISO.DATE)와 @NumberFormat(style=STYLE.CURRENCY) 어노테이션을
이용하여
날짜형식 및
통화형식으로
형변환이
가능하다.
- JPA 2.0 지원이
시작됐다.
Spring 3.0 설정하기
Spring 3.0 MVC 의
시작점은
바로 DispatcherServlet 이다. DispatcherServlet은 HttpServlet 을
부모클래스로하여
구현하고
있는
일반적인 servlet 클래스
이다. 따라서 web.xml 에
설정을
해줄
필요가
있다.
view plaincopy to clipboardprint?
- <web-app>
- <servlet>
- <servlet-name>example</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>example</servlet-name>
- <url-pattern>*.html</url-pattern>
- </servlet-mapping>
- </web-app>
위
코드를
통해 web.xml 에 DispatcherServlet 을
설정해
주었다.
예제의 DispatcherServlet 에서 *.html 의 url패턴의
요청에
대해
매핑을
해준것을
기억
하길
바란다.
따라서 *.html 형태의
요청이
들어왔을
때, Spring 3.0 MVC 의 Front Controller 가
호출
될
것이다.
DispatcherServlet 이
초기화
되고
나면, [서블릿이름]-servlet.xml 이란
파일을
웹
어플리케이션의 WEB-INF 폴더
하위에서
찾게
된다.
위의
예에서는
프레임워크가 example-servlet.xml 이란
파일을
찾을
것이다.
다음
글 [Spring3 MVC (2)] Spring 3.0 MVC 로 Hello world 프로젝트
만들기 에서
실제로
동작하는
Hello world 어플리케이션을
만들어
보도록
한다.
[Spring3 MVC (2)] Spring 3.0 MVC 로 Hello world 어플리케이션 만들기
2011/12/02 17:21 in 공부/FrameWork
-
시작하기
spring 3.0 기반의 기본적인 어플리케이션 작성을 시작해 보겠다.
이클립스를 열고 File -> New -> Project 를 선택하고 Dynamic Web Project를 선택한다.
선택한 후 Next 버튼을 클릭한다.
프로젝트의 이름을 입력한다. 예를 들면 Spring3MVC. 그다음 Target Runtime을 지정해준다. ( 예) Apache Tomcat v6.0 ).
이클립스 내에서 프로젝트를 구동하기 위해 필요한 것이다. 선택을 했으면 Finish를 클릭한다.
프로젝트의 생성이 완료되면, 다음과 같은 화면을 볼 수 있다.
이제 다운로드 받았던 모든 JAR 파일 들을 WebContent > WEB-INF > lib 폴더에 복사해 놓는다.
만약 폴더가 없다면 만들어서 복사한다.
컨트롤러 클래스(The Spring Controller Class)
이제 요청(request)를 처리하고 "Hello World" 라는 문구를 출력해줄 Controller 클래스를 만들 것이다.
이를 위해 소스(src) 폴더에 net.viralpatel.spring3.controller 라는 패키지를 만들어준다. (이건 알아서 변경해도 상관없음)
이 패키지는 컨트롤러 파일들만 모아놓을 곳이다.
그리고 그 패키지 안에 HelloWorldController 클래스를 만들어주고 아래 내용을 입력한다.
File: net.viralpatel.spring3.controller.HelloWorldController
- package net.viralpatel.spring3.controller;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- @Controllerpublic class HelloWorldController {
- @RequestMapping("/hello")
- public ModelAndView helloWorld() {
- String message = "Hello World, Spring 3.0!";
- return new ModelAndView("hello", "message", message);
- }
- }
우리가 @Controller 와 @RequestMapping("/hello") 라는
어노테이션을
사용했다는
것을
기억하라.
스프링이
우리의
패키지들을
스캔할
때, request요청을
처리함에
있어
이
클래스를 Controller 빈으로서
처리할
것으로
인식
할
것이다.
그리고 @RequestMapping("/hello") 라는
어노테이션은
스프링에게 URL path에서 "/hello" 로
시작하는
모든
요청에
대해
이 Controller 가
처리할
것이라고
전할
것이다.
이는 /hello/* 와 /hello.html 등을
모두
포함한다.
helloWorld() 메소드는 ModelAndView 객체를 리턴한다. ModelAndView 객체는 "hello" 라는
이름을
가진
뷰를
찾도록
할
것이고, 데이터
모델들은
다시
브라우저로
전달되어 JSP에서도
데이터에
접근할
수
있도록
해준다. 뷰의
논리적인
이름은 "/WEB-INF/jsp/hello.jsp" 가
될
것이다.
ModelAndView 객체에서 "hello" 라고
리턴된
뷰의
이름이
어떻게 "/WEB-INF/jsp/hello.jsp"로
해석될
수
있는가에
대해서는
잠시후에
다뤄보도록
한다.
ModelAndView 객체는
또 "Hello World, Spring3.0 !" 라는
내용을 "message"라는
키를
가지고
있는
메세지를
포함한다.
이것은
우리가
화면에
뿌려줄
데이터이다. 일반적으로
화면에
뿌려
줄 value object(VO) 가
될
것이다.
이번
예에서는
간단한
스트링
문자만
가지고
있는
객체이다.
화면 : JSP 파일
만들기
hello world 메세지를
화면에
보여주기위해서 JSP파일을
만들어
주어야
한다. JSP파일은 /WEB-INF/jsp 폴더
안에다가
만든다.
/WEB-INF/jsp 에 hello.jsp 라는
파일을
만들고, 아래
내용을
넣어준다.
File: WEB-INF/jsp/hello.jsp
view plaincopy to clipboardprint?
- <html>
- <head>
- <title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
- </head>
- <body>
- ${message}
- </body>
- </html>
위의 JSP 는 ${message} 라는
구문을
이용하여
단순히
화면에
메세지를
보여주는
페이지
이다.
"message" 라는
이름은
우리가
컨트롤러에서 ModelAndView 객체에
메세지와
함게
세팅해준
이름인
것을
기억하길
바란다.
다음으로
우리
어플리케션의
입구가
될 index.jsp 파일도
필요하다. WebContent 폴더
아래 index.jsp라는
파일을
만들고
아래의
내용을
입력하도록
한다.
File: WebContent/index.jsp
view plaincopy to clipboardprint?
- <html>
- <head>
- <title>Spring 3.0 MVC Series: Index - ViralPatel.net</title>
- </head>
- <body>
- <a href="hello.html">Say Hello</a>
- </body>
- </html>
WEB.xml 파일에 Spring MVC 매핑
시키기
앞의
글에서도
이야기
했듯이, Spring MVC 어플리케이션의
첫
입구가
될
서블릿은 DispatcherServlet 이며
WEB.xml 파일에
세팅을
해줌으로서
사용할
수
있다.
WEB.xml 파일을
열고
아래
내용을
추가로
넣어서
수정해
준다.
File: WEB-INF/web.xml
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- id="WebApp_ID" version="2.5">
- <display-name>Spring3MVC</display-name>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <servlet>
- <servlet-name>spring</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>spring</servlet-name>
- <url-pattern>*.html</url-pattern>
- </servlet-mapping>
- </web-app>
web.xml 에
설정된
위
코드를
보면 *.html 의
패턴을
가진
모든
요청에
대해서 DispatcherServlet 으로
매핑
될
것이다.
index.jsp 파일을 welcome-file 로
지정
한
것도
같이
기억해
두도록
한다.
여기서
우리가
한가지
알아두어야
할
점은, web.xml파일에서
서블릿의
이름을
나타내주는 <servlet-name>태그이다.
DispatcherServlet 이
초기화가
되고나면, 웹어플리케이션의 WEB-INF 폴더에서 [서블릿이름]-servlet.xml 의
이름을
가진
파일을
찾을
것이다.
이번
예에서는 spring-servlet.xml 이란
이름을
가진
파일을
찾게
될
것이다.
스프링
설정
파일
WEB-INF 폴더에 spring-servlet.xml 이라는
파일을
만들고, 아래
내용을
입력한다.
File: WEB-INF/spring-servlet.xml
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- <context:component-scan base-package="net.viralpatel.spring3.controller" />
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- </beans>
위의 xml 설정파일에서, <context:component-scan>이라는
태그를
지정해주었다.
이것은 net.viralpatel.spring3.controller 패키지
및
모든
하위
패키지에
있는
컴포넌트
들을 Spring 구동시
불러
올
것이다.
이때 HelloWorldController 클래스도
불러올
것이다.
또한 viewResolver 빈을
설정해
주었는데, 이것은
뷰를
만들
때, prefix 인 /WEB-INF/jsp 와 suffix 인 .jsp 를 ModelAndView 에서
설정한 view 의
이름과
조합하여
해석
할
것이다.
우리가 HelloWorldController 클래스에서 ModelAndView 객체를
리턴할
때 'hello" 라는
이름을
사용했기
때문에,
이것은 "/WEB-INF/jsp/hello.jsp" 라는
경로로
만들어져
해석된다.
준비는
끝!
빨리
결과를
보고
싶을
것이다. 이클립스에
톰캣
설정을
한다.
Window > ShowView > Server 를
클릭하여
창을
띄운다음,
마우스
오른쪽
클릭 > new > server 를
클릭하고
나머지
설정을
추가해서
서버를
등록한다.
프로젝트를
구동하기위해
프로젝트익스프로러에서
프로젝트
이름에
마우스 오른쪽
클릭 > Run as > Run on Server (단축키 : Alt+Shift+X, R)
을
클릭한다.
소스코드
다운받기
다음
살펴볼
것
이번
듀토리얼에서 Spring3 MVC 샘플
어플리케이션을
만들어보았다.
또
스프링
환경
설정을
하는
것과 @Controller, @RequestMapping 같은
어노테이션을
사용하는
것도
보았다.
다음
번엔 스프링3 MVC 에서 form 데이터를
컨트롤하는
방법 을
보도록
한다.
[Spring3 MVC (3)] 스프링3.0 MVC에서 폼(Forms) 다루기
2011/12/05 14:17 in 공부/FrameWork
시작하기
만들고있었던 Hello World 스프링3 MVC 앱에
연락처
관리
폼
을
추가해
보도록
하겠습니다.
index.jsp 파일을
열고
아래
내용으로
수정합니다.
File : WebContent/index.jsp
view plaincopy to clipboardprint?
- <jsp:forward page="contacts.html"></jsp:forward>
위
코드는 contacts.html 페이지로
리다이렉팅
시켜주는
역할을
합니다.
뷰 - contact.jsp 파일
유저에게
연락처
폼을
보여주는
페이지를
만들어
보도록
하겠습니다.
File : WebContent/WEB-INF/jsp/contact.jsp
view plaincopy to clipboardprint?
- <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
- <html>
- <head>
- <title>Spring 3 MVC Series - Contact Manager</title>
- </head>
- <body>
- <h2>Contact Manager</h2>
- <form:form method="post" action="addContact.html">
- <table>
- <tr>
- <td><form:label path="firstname">First Name</form:label></td>
- <td><form:input path="firstname" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname">Last Name</form:label></td>
- <td><form:input path="lastname" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname">Email</form:label></td>
- <td><form:input path="email" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname">Telephone</form:label></td>
- <td><form:input path="telephone" /></td>
- </tr>
- <tr>
- <td colspan="2">
- <input type="submit" value="Add Contact"/>
- </td>
- </tr>
- </table>
- </form:form>
- </body>
- </html>
위
파일에서
폼을
보여
줍니다. 폼이 submit 되면 addContact.html 페이지로
요청된다는
사실을
기억하시기
바랍니다.
스프링3에
폼(Form)과
컨트롤러(Controller) 추가하기
이제
스프링3에서
폼
데이터를
출력하고, 값들을
가져오는
로직을
추가해보겠습니다.
먼저 2개의 java 파일을
만들어야
합니다. 첫번째는
화면으로부터
데이터를
가져오고/보여주는
역할을
하는 Contact.java 파일이고,
두번째는
스프링
컨트롤러
클래스인 ContactController.java 파일입니다.
File : net.viralpatel.spring3.form.Contact.java
view plaincopy to clipboardprint?
- package net.viralpatel.spring3.form;
- public class Contact {
- private String firstname;
- private String lastname;
- private String email;
- private String telephone;
- //.. getter and setter for all above fields.
- }
위
파일은
화면으로부터
연락처
정보를
담고있는
파일입니다. getter 와 setter 메소드를
보여주지
않은
것을
확인하세요.
getter/setter 메소드
들은 Alt + Shift + S, R 단축키를
눌러서
만들
수
있습니다.
File : net.viralpatel.spring3.controller.ContactController.java
view plaincopy to clipboardprint?
- package net.viralpatel.spring3.controller;
- import net.viralpatel.spring3.form.Contact;
- import org.springframework.stereotype.Controller;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.SessionAttributes;
- import org.springframework.web.servlet.ModelAndView;
- @Controller
- @SessionAttributespublic
- class ContactController {
- @RequestMapping(value = "/addContact", method = RequestMethod.POST)
- public String addContact(@ModelAttribute("contact")
- Contact contact, BindingResult result) {
- System.out.println("First Name:" + contact.getFirstname() +
- "Last Name:" + contact.getLastname());
- return "redirect:contacts.html";
- }
- @RequestMapping("/contacts")
- public ModelAndView showContacts() {
- return new ModelAndView("contact", "command", new Contact());
- }
- }
위
컨트롤러
클래스에서, /contacts 와 /addContact 라는 RequestMapping 을
가진
두개의
메소드를
만들었다는
것을
기억하세요.
유저가 contacts.html 이라는 url을
가진
요청을 할
때, showContacts() 메소드가
호출
될
것입니다.
이
메소드는 "contact" 라는
이름을
가진
모델을
만들
것입니다.
ModelAndView 객체를
리턴할
때
같이
전달하는
빈 Contact객체의
이름이 "command" 라는
것을
확인하세요.
만약 jsp 파일에서
스프링을
사용하고
있다면, command 라는
이름을
가진
객체를
찾게
될
것입니다.
또 addContact() 메소드에 RequestMapping을
어노테이션
설정해주고
인자에 method="RequestMethod.POST" 를
넘겨주었습니다.
/addContact.html 이란 url을
가진 POST 방식의
요청을
했을
때, 이
메소드가
호출
될
것입니다.
메소드
인자로 Contact 객체를
넘길
때, @ModelAttribute 라는
어노테이션을
추가해
주었습니다.
이것이
들어온
요청(request)로부터
데이터를
받아와 Contact 객체에
바인딩을
시켜줍니다. 이
메소드에서
우리는 FirstName 과 LastName을
출력하고, contacts.html 로
리다이렉팅
시켜주었습니다.
완료
폼이
모두
완성되었습니다. 이클립스에서 Alt + Shift + X, R 키를
눌러
어플리케이션을
실행해
보시기
바랍니다.
연락처
관리
폼을
보여
줄
것입니다. 값들을
입력하고
서브밋
버튼을
클릭해
보세요. 버튼을
클릭
했을때, sysout 로그로
이름과
성을
출력할
것입니다.
소스코드
다운받기
다음글에서는..
이번
글에서는
스프링3 에서
폼을
어떻게
만드는지, jsp에서
어떻게
출력하는지에
대해서
알아보았습니다.
그리고 @ModelAttribute 어노테이션을
이용하여
폼의
값들을
가져오는
방법도
알아보았습니다. 다음
글에서는
폼
검증과
데이터
변환
메소드에
대해서
알아보도록
하겠습니다.
관련글 : 여러 row를
가진
폼
데이터
서브밋
예제 (번역안됨)
[Spring3 MVC (4)] 이클립스에서 Tiles 플러그인 예제 따라하기
2011/12/06 14:47 in 공부/FrameWork
벌써 4번째
글입니다. 지난글에서는
스프링3에서
폼을
만들고
보여주는
것에
대해서
배워보았습니다.
또 @ModelAttribute 어노테이션
사용법도
살펴봤습니다.
이번
글에서는 Tiles 프레임워크와
그것을
스프링3 에
통합하는
것에
대해서
알아보겠습니다. 이전
글까지
만들었던
어플리케이션에 Tiles를
추가해
보도록
하겠습니다. 만약
소스코드가
없다면
이전글로
돌아가
소스코드를
다운받아서
진행하도록
합니다.
Tiles2 소개
요즘
대부분의
웹사이트
들은
여러페이지에
걸쳐
재사용되는
조각들로
페이지가
나누어져
있습니다. 예를
들어서
웹
페이지의
헤더, 푸터, 메뉴
등이
그것입니다. 이것들은
웹사이트
전체에
걸쳐서
일관된
화면을
보여줍니다. 이렇게
반복되어
나타나는
페이지들을
웹사이트의
전체에
걸쳐서
하드코딩하기란
굉장히
힘든
일일
것입니다. 만약
수정사항이라도
발생하는
날엔
모든
페이지에
걸쳐
같은
수정작업을
반복해야
됩니다.
그래서
우리는
템플릿
메카니즘을
사용합니다. 일반적인
헤더, 푸터, 메뉴페이지를
하나씩
만들어놓고
각각의
페이지에서
그것을
불러오는
것입니다.
Tiles 플러그인은
바로
설명과같이
템플릿화, 컴포넌트화
하는것을
도와주는
프레임워크입니다. 사실
두
메카니즘은
매우
비슷합니다. 하나의
완성된
페이지
또는
다른
페이지의
일부를
만들기
위해
페이지의
부분들을
정의하는것입니다. ( 페이지를
조각조각
나누어
조립하는것이 "타일" 과
비슷하다고
해서
이름을 "Tiles" 라고
만든
것
같습니다.) 각각의
파트
들은
변수를
취할
수
있고, 동적인
컨텐츠를
가질
수
있으며 Java언어의
메소드로도
보여질
수
있습니다. 타일즈는
웹어플리
케이션의
모든페이지를
일관된
룩&필로
유지하기
위한
템플릿
시스템
이라고
할
수
있습니다. 이것은
코드의
중복성을
줄이고, 템플릿의
재사용성을
높여줍니다.
일반적인
웹사이트의
레이아웃은
하나의
중심이
되는
설정파일에
정의되고, 이것은
웹사이트의
모든
페이지에서
확장
될
수
있습니다.
만들려고
하는
어플리케이션의
레이아웃
우리의
목표는
이전에
만들었던 Hello world 어플리케이션에
헤더, 푸터, 메뉴를
추가하는
것입니다. 다음
그림의
형태가
될
것입니다.
필요한 JAR 파일들
스프링3 어플리케이션에 Tiles를
추가하기
위해, 몇
개의 jar 파일들이
필요합니다. 다음
리스트가
필요한
파일들입니다. 이 jar 파일들을 WEB-INF/lib 폴더에
추가해
주시기
바랍니다.
파랗게
선택된
파일들이 Tiles 추가를
위해
새로
필요한
파일들입니다.
Spring MVC 에서 Tiles 설정하기
Tiles 를
설정해주기
위해, Tiles 설정을
위한
빈을 spring-servlet.xml 에
만들어
줘야
합니다. WEB-INF폴더에
있는 spring-servlet.xml 파일을
열어서
아래
코드를 <beans> </beans> 태그
사이에
입력해
주시기
바랍니다.
File : /WebContent/WEB-INF/spring-servlet.xml
view plaincopy to clipboardprint?
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.UrlBasedViewResolver">
- <property name="viewClass">
- <value>
- org.springframework.web.servlet.view.tiles2.TilesView
- </value>
- </property>
- </bean>
- <bean id="tilesConfigurer"
- class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
- <property name="definitions">
- <list>
- <value>/WEB-INF/tiles.xml</value>
- </list>
- </property>
- </bean>
위
설정에서 /WEB-INF/tiles.xml 이라는
파일을
빈의
변수로서
넣어주었는데, 바로
이
파일에서
웹사이트의 Tiles 에
관한
설정을
하게
될
것입니다. WEB-INF 폴더에 tiles.xml 파일을
만들고, 아래
코드를
입력해
주시기
바랍니다.
File : /WebContet/WEB-INF/tiles.xml
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE tiles-definitions PUBLIC
- "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
- "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
- <tiles-definitions>
- <definition name="base.definition"
- template="/WEB-INF/jsp/layout.jsp">
- <put-attribute name="title" value="" />
- <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
- <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
- <put-attribute name="body" value="" />
- <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
- </definition>
- <definition name="contact" extends="base.definition">
- <put-attribute name="title" value="Contact Manager" />
- <put-attribute name="body" value="/WEB-INF/jsp/contact.jsp" />
- </definition>
- </tiles-definitions>
위의 tiles.xml 파일에 base.definition 이라는
템플릿을
정의했습니다. 이
레이아웃은
헤더, 타이틀, 바디, 메뉴, 푸터같은
것들을
포함하고
있습니다. 그리고나서
이
템플릿은
새롭게
정의한 Contact 페이지에서
확장(extend) 되고
있습니다. 기본
페이지들은
덮어쓰고, Body 와 Title에
해당하는
내용들만
바꾸어
주었습니다.
JSP 뷰
파일
만들기
layout.jsp 라는 JSP파일에
템플릿
들을
정의해
줄
것입니다. 템플릿은
여러
다른
웹페이지(메뉴, 푸터, 해더
등) 조각들로
구성됩니다. layout.jsp, menu.jsp, header.jsp, footer.jsp 이렇게 4개의 JSP 파일들을
만들고
아래의
코드를
입력해
주시기
바랍니다.
File: /WebContent/WEB-INF/jsp/layout.jsp
view plaincopy to clipboardprint?
- <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title><tiles:insertAttribute name="title" ignore="true" /></title>
- </head>
- <body>
- <table border="1" cellpadding="2" cellspacing="2" align="center">
- <tr>
- <td height="30" colspan="2"><tiles:insertAttribute name="header" />
- </td>
- </tr>
- <tr>
- <td height="250"><tiles:insertAttribute name="menu" /></td>
- <td width="350"><tiles:insertAttribute name="body" /></td>
- </tr>
- <tr>
- <td height="30" colspan="2"><tiles:insertAttribute name="footer" />
- </td>
- </tr>
- </table>
- </body>
- </html>
File : /WebContent/WEB-INF/jsp/header.jsp
view plaincopy to clipboardprint?
- <h1>Header</h1>
File : /WebContent/WEB-INF/jsp/menu.jsp
view plaincopy to clipboardprint?
- <p>Menu</p>
File : /WebContent/WEB-INF/jsp/footer.jsp
view plaincopy to clipboardprint?
- <p>Copyright © ViralPatel.net</p>
준비
끝!
이클립스에서
컴파일하고
어플리케이션을
실행시켜서, 헤더, 메뉴, 푸터가
제대로
들어가
있는지
확인한다.
소스코드
다운로드
다음글에서는...
오늘
우리는
스프링3에서 Tiles 프레임워크를
설정하고
사용하는
방법을
배웠습니다. Tiles 설정
파일을
사용하기
위해서 org.springframework.web.servlet.view.tiles2.TilesConfigurer 을
사용해서
설정했습니다. 다음글
에서는 Internationalization / Localization (다국어화/지역화) 와
이것을
스프링3에서
하는
방법을
대해서
알아보도록
하겠습니다. 여러분께
이글이
도움이
되었으면
좋겠습니다.
도움되셨으면
많은
댓글
및
피드백
부탁드립니다.
[Spring3 MVC (5)] 국제화(Internationalization) & 현지화(Localization) 예제로 알아보기
2011/12/07 14:53 in 공부/FrameWork
벌써 5번째
글이
되었습니다. 이전
글에서는 Tiles 를
스프링3 MVC에서
설정하고
사용하는
법에
대해서
살펴
봤습니다. Tiles 설정
파일을
정의
하기
위해서 org.springframework.web.servlet.view.tiles2.TilesConfigurer 클래스를
빈
정의하는데
사용
했습니다. 이걸
이용해서
만들었던 HelloWorld 어플리케이션을
헤더와
푸터
메뉴
등으로
나누었습니다.
이번
파트에서는
스프링3 MVC의
국제화(Internationalization - I18N ) 과
현지화(Localization - L10N ) 에
대해서
알아보도록
하겠습니다.
이번
글
시리즈
내내
만들어왔던 Hello world 어플리케이션에 l10n 에
다라 i18n 기능을
덧붙여
보겠습니다.
소스가
없다면
이전글로
돌아가서
소스를
다운받아
실습하시기를
권해드립니다.
i18n 과 L10n 이란
무엇인가?
컴퓨터에서
국제화와
현지화
라는것은, 다른
언어와
지역적인
차이들을
소프트웨어에
적용시킨다는
것을
말합니다. 국제화라는
것은
여러가지
다른
언어와
지역적
차이들을
기술적인
변경
없이
소프트웨어에
적용할
수
있도록
설계하는
과정을
말합니다. 현지화
라는
것은
국제화가
된
소프트웨어에
특정
지역이나
언어에
대해서
지역특색의
컴포넌트를
추가한다거나
번역을해서
적용시키는
것을
말합니다.
용어는 i18n 이라고
자주
줄여
씁니다. ( internationalization 이
단어의
첫글자인 i 와
끝글자인 n 사이에 18개의
글자가
있다고해서 i18n 이
됨)
L10n 에서는
대문자 L을
쓰고 i18n 에서는
소문자 i를
써서 소문자 l 과
대문자 I 가
혼동하는것을 피합니다.
목표
우리의
목표는 국제화, 현지화
기능을
스프링 MVC 어플리케이션에
추가하는
것입니다. 다
끝마치고
나면
다음과
같은
모습이
됩니다.
두개의
언어지원 기능을
추가
할 겁니다 : 영어와
독일어. 유저가
사용하는
브라우저의
지역적인
세팅에
따라서
적절한
언어가 선택됩니다.
또
유저가
우상단에
있는
언어
선택
링크를
직접
클릭하여
언어를
변경할
수
도
있습니다.
메세지
자원
파일 (Message Resources File)
어플리케이션에서
표시되는
모든
문자를
담게
될
두개의 properties 파일을
만들
것입니다. 이
두개의
파일은 "resources" 라고
불리우는
자원
폴더에
저장
할
것입니다. 프로젝트
이름에 마우스
오른쪽
클릭 > New > Source Folder 를
클릭하고
이름을 resources 로
하여
자원
폴더를
만듭니다.
만든
폴더에 messages_de.properties 와 messages_en.properties 두개의
파일을
만들고
아래의
내용을
입력합니다.
File : resources/messages_en.properties
label.lastname=Last Name
label.email=Email
label.telephone=Telephone
label.addcontact=Add Contact
label.menu=Menu
label.title=Contact Manager
label.footer=© ViralPatel.net
File : resources/messages_de.properties
label.firstname=Vorname label.lastname=Familiename label.email=Email label.telephone=Telefon label.addcontact=Addieren Kontakt
label.title=Kontakt Manager label.menu=Menü
label.footer=© ViralPatel.net |
스프링3 MVC에서
국제화(Internatinalization - i18n) 과
현지화( Localization - L10n) 설정해주기
방금
두개의
메시지들이
담긴
파일을
만들었습니다. 이제
이파일들을
스프링
설정에서
지정해
주는
작업을
해야
합니다.
그러기
위해서 org.springframework.context.support.ReloadableResourceBundleMessageSource 클래스를
사용할
것입니다.
또
유저가
직접
언어를
선택할
수
있는
기능도
추가
할
것입니다. 이
기능은 org.springframework.web.servlet.i18n.LocaleChangeInterceptor 클래스를
통해서
구현됩니다. LocaleChangeInterceptor 클래스는
지역적인
차이가
발생됐을
시
이것을
잡아냅니다. 그리고
이
변경
내역은
다음
요청에
대비하기
위해
쿠키에
저장됩니다. 이런
지역적인
변화를
쿠키에
저장하기
위해서 org.springframework.web.servlet.i18n.CookieLocaleResolver 클래스
파일이
사용됩니다.
다음
코드를 spring-servlet.xml 파일에
추가합니다.
File : WebContent/WEB-INF/spring-servlet.xml
view plaincopy to clipboardprint?
- <bean id="messageSource"
- class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
- <property name="basename" value="classpath:messages" />
- <property name="defaultEncoding" value="UTF-8"/>
- </bean>
- <bean id="localeChangeInterceptor"
- class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
- <property name="paramName" value="lang" />
- </bean>
- <bean id="localeResolver"
- class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
- <property name="defaultLocale" value="en"/>
- </bean>
- <bean id="handlerMapping"
- class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
- <property name="interceptors">
- <ref bean="localeChangeInterceptor" />
- </property>
- </bean>
messageSource 빈
설정의 basename 프로퍼티의
값을 "classpath:messages" 로
설정한
것을
보시기
바랍니다.
이
설정으로
인해서
스프링은
기본적인
자원파일을
찾을
때, messages_ 로
시작하는
파일을
찾을
것입니다.
JSP 화면
변경하기
지금까지
두개의
메세지
파일일을
만들고
스프링에
설정을
완료
해
주었는데
이제
이를 JSP파일에서
사용할
차례이다 . 실습하고
있는
어플리케이션의 jsp 파일들을
열고
아래의
내용을
수정한다.
File : WebContent/WEB-INF/jsp/header.jsp
view plaincopy to clipboardprint?
- <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
- <h3><spring:message code="label.title"/></h3>
- <span style="float: right">
- <a href="?lang=en">en</a>
- |
- <a href="?lang=de">de</a>
- </span>
File : WebContent/WEB-INF/jsp/menu.jsp
view plaincopy to clipboardprint?
- <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
- <p><spring:message code="label.menu"/></p>
File : WebContent/WEB-INF/jsp/footer.jsp
view plaincopy to clipboardprint?
- <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
- <spring:message code="label.footer"/>
File : WebContent/WEB-INF/jsp/contact.jsp
view plaincopy to clipboardprint?
- <br />
- <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
- <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
- <html>
- <head>
- <title>Spring 3 MVC Series - Contact Manager</title>
- </head>
- <body>
- <form:form method="post" action="addContact.html">
- <table>
- <tr>
- <td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td>
- <td><form:input path="firstname" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td>
- <td><form:input path="lastname" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname"><spring:message code="label.email"/></form:label></td>
- <td><form:input path="email" /></td>
- </tr>
- <tr>
- <td><form:label path="lastname"><spring:message code="label.telephone"/></form:label></td>
- <td><form:input path="telephone" /></td>
- </tr>
- <tr>
- <td colspan="2">
- <input type="submit" value="<spring:message code="label.addcontact"/>"/>
- </td>
- </tr>
- </table>
- </form:form>
- </body>
- </html>
위의 JSP에서
리소스
파일
에서
메세지를
읽어오기
위해 <spring:message> 태그를
사용했다는
것을
기억하시기
바랍니다.
header.jsp 파일에서
우리가
기억해야
할
것은, 언어
선택을
위해 2개의
링크를
적어
줬다는
것입니다.
유저가
이
링크를
클릭
했을때, request 의
파라메터를 lang?= 로
설정해
주게
됩니다. 스프링에서는
이
파라메터를 LocaleChangeInterceptor 를
이용해서
가로채고, 적절한
지역
세팅으로
바꾸어
줍니다. 우리가 LocaleChangeInterceptor 클래스를 spring-servlet.xml 파일에
설정
할
때, "param-name" 프로퍼티에
대해서 "lang" 이라는
값을
설정해
주었다는
것을
기억하시기
바랍니다.
view plaincopy to clipboardprint?
- <property name="paramName" value="lang" />
따라서
스프링은 "lang" 이라는
이름의
파라메터가
요청에
있는지
찾게
됩니다.
이제
준비
끝!
이제
국제화 & 현지화
기능
추가를
완료했습니다. Alt + Shift + X, R 단축키를
눌러
실행해
봅시다!
소스
코드
다운받기
이
글을
마지막으로
스프링3 MVC 따라하기
번역을
마치도록
하겠습니다.
사실
이
뒤에
스프링3와
하이버네이트
연동하기에
대한
글이
한개
더
있지만, 현재
제가
사용하는 환경이 ibatis 이기
때문에
제대로
살펴보지
못했습니다. 기회가
되면
후에 ibatis 연동하는
법에
대해서
글을
올리도록
하겠습니다.
감사합니다.
출처 - http://choija.com/212
'Framework & Platform > Spring' 카테고리의 다른 글
spring MVC 예제 4_STS 환경 (0) | 2012.03.24 |
---|---|
이클립스 + 톰캣 + 스프링 MVC + maven 개발환경 구축 1 (0) | 2012.03.21 |
spring MVC 예제 2_MyBatis 적용 (0) | 2012.03.21 |
Spring MVC 요청처리 생명주기 및 예제 (0) | 2012.03.21 |
Spring Framework 소개 (0) | 2012.01.31 |