'프로그래밍/스프링프레임워크'에 해당하는 글 6건

Jackson  라이브러리를 쓰면,

Response를 클래스 단위로 지정시 json형태로 값을 리턴할 수 있다.

 

 

@Controller
public class JsonExController {

 @RequestMapping(value = "/user.json", method = RequestMethod.GET)
 @ResponseBody
 public Response<User> getUserInfo(Locale locale, Model model) {
  
  Response<User> result = new ResponseUnwrapper<User>();
  
  User user = new User("1", "minho", 30);
  user.addList("TEST1");
  user.addList("TEST2");
  
  result.setData(user);
  
  return result;
 }
 

// 결과 :  {"code":200,"desc":"OK","name":"minho","age":30,"list":["TEST1","TEST2"]}
 
 
 @RequestMapping(value = "/dept.json", method = RequestMethod.GET)
 @ResponseBody
 public Response<Dept> getDeptInfo(Locale locale, Model model) {
  
  Response<Dept> result = new Response<Dept>();
  
  Dept dept = new Dept("1", "cloud");
  
  result.setData(dept);
  
  return result;
 }

 

// 결과 : {"code":200,"desc":"OK","data":{"deptName":"cloud"}} 

 


 @RequestMapping(value = "/deptList.json", method = RequestMethod.GET)
 @ResponseBody
 public Response<List<Dept>> getDeptInfoList(Locale locale, Model model) {
  
  Response<List<Dept>> result = new Response<List<Dept>>();
  
  List<Dept> deptList = new ArrayList<Dept>();
  Dept dept1 = new Dept("1", "cloud");
  Dept dept2 = new Dept("2", "mail");
  Dept dept3 = new Dept("3", "cafe");
  
  deptList.add(dept1);
  deptList.add(dept2);
  deptList.add(dept3);
  
  result.setData(deptList);
  
  return result;
 }

 

// 결과 : {"code":200,"desc":"OK","data":[{"deptName":"cloud"},{"deptName":"mail"},{"deptName":"cafe"}]}


 
 @RequestMapping(value = "/mapdata.json", method = RequestMethod.GET)
 @ResponseBody
 public Response<MapData<String, Object>> getMapData(Locale locale, Model model) throws JsonGenerationException, JsonMappingException, IOException {
  
  Response<MapData<String, Object> > result = new Response<MapData<String, Object> >();
  
  MapData<String, Object> data = new MapData<String, Object>();
  data.add("name", "minho");
  data.add("age", "30");
  
  result.setData(data);
  
  return result;
 }

 

// 결과 : {"code":200,"desc":"OK","age":"30","name":"minho"}

 

 

 

@JsonPropertyOrder({ "code", "desc" })  // json 출력 순서지정
public class Response<T> {

 

 @JsonProperty("code")
 private int code = 200;
 
 @JsonProperty("desc")    // json key명 지정
 private String desc = "OK";
 
 
 private T data;

 public int getCode() {
  return code;
 }

 public void setCode(int code) {
  this.code = code;
 }
 
 public String getDesc() {
  return desc;
 }

 public void setDesc(String desc) {
  this.desc = desc;
 }
 
 public T getData() {
  return data;
 }

 public void setData(T data) {
  this.data = data;
 }
}

 

 

 

public class ResponseUnwrapper<T> extends Response<T> {

 public ResponseUnwrapper() {
 }
 
 @Override
 @JsonUnwrapped    // 해당 객체를 한단계 위로 올린다 (결과 참조), jackson 2.0이후부터는 prefix도 지정가능
 public T getData() {
  return super.getData();
 }
}

 

 

 

 

public class User {
 
 private final String id;
 
 private final String name;
 
 private final int age;
 
 private final List<String> list;
 
 public User(String id, String name, int age) {
  this.id = id;
  this.name = name;
  this.age = age;
  this.list = new ArrayList<String>();
 }
 
 @JsonIgnore    // json 출력에서 제외함
 public String getId() {
  return id;
 }

 public String getName() {
  return name;
 }

 public int getAge() {
  return age;
 }
 
 public void addList(String val) {
  list.add(val);
 }
 
 public List<String> getList() {
  return list;
 }
}

 

 

 

public class Dept {
 
 private final String id;
 
 private final String deptName;
 
 public Dept(String id, String deptName) {
  this.id = id;
  this.deptName = deptName;
 }

 @JsonIgnore
 public String getId() {
  return id;
 }

 public String getDeptName() {
  return deptName;
 }
}

 

 

// @JsonUnwrapped 어노테이션이 map에는 적용되지 않아 wrapper 클래스를 사용한다.

public class MapData<V, K> {
 
 private final Map<V, K> map;
 
 public MapData() {
  map = new HashMap<V,K>();
 }
 
 @JsonAnySetter
    public void add(V key, K value) {
      map.put(key, value);
    }

    @JsonAnyGetter
    public Map<V, K> getMap() {
      return map;
    }
}

 

 

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

트랙백이 하나이고 , 댓글이 없습니다.
secret

콘솔로 메이븐에 사용자 라이브러리 등록하는 방법

 

1. 라이브러리 등록

mvn install:install-file -Dfile=D:\라이브러리.jar -DgroupId=revfactory -DartifactId=revf -Dversion=0.1 -Dpackaging=jar -DgeneratePom=true

 

2. 라이브러리 POM 추가

<dependency>

<groupId>revfactory</groupId>

<artifactId>revf</artifactId>

<version>0.1</version>

</dependency>

저작자 표시
신고

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

이전 포스팅

http://revf.tistory.com/entry/Spring-Framework-MVC-Mybatis-3

 

기존 패키지에 아래 기능을 추가함

- 로그인

- 로그아웃

- 세션관리

 

방식

- 세션 체크 : Spring Framework의 Interceptors 를 이용함

                   HandlerInterceptorAdapter 을 상속받은 SessionInterceptor 클래스 구현

                   preHandle( ) 메서드는 사용자 호출 후 Controller 가 받기전에 수행됨

                   postHandle( ) 메서드는 Controller 수행 후 VIEW로 가기전에 수행됨.

                                        Controller수행 중 에러시 호출 안됨

 

- 로그인 처리 : Validator를 이용함

                     Validator 을 상속받은 LoginValidator 클래스 구현

                     Form에 값을 확인하거나 로그인정보를 매칭하여 메세지를 보여줌 (DB연결 로직 없음)

 

 - 매개변수 전달 : Spring Framework Tag 방식을 이용함

                   @ModelAttribute 어노테이션 사용

 

 

임시비밀번호 : minho/1234

 

 

  SpringBasic.zip

 

SpringBasic.z01

 

 

저작자 표시
신고

'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글

메이븐 사용자 라이브러리 추가하기  (0) 2013.02.18
Spring Framework MVC 로그인  (0) 2012.12.04
Spring Tag Library  (0) 2012.12.04
Spring Framework MVC + Mybatis 3  (0) 2012.12.04

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

Spring Tag Library

meassage tag(<spring:message>)

스프링은 메시지 리소스 파일로 부터 메시지를 가져와 간편하게 출력할수 있도록, <spring:message> 태그를 제공한다.
JSP 페이지의 타이틀을 <spring:message>를 이용해서 출력하는 예제를 만들어 보자.

빈 정의 파일에 리소스 번들 관련된 설정이 되어 있어야 한다.

<!-- Message Source-->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
	p:basename="messages"/>

먼저 메시지 관련 리소스 파일에 코드값을 설정해준다. PropertiedEditor 같은 유틸의 도움을 받으면 편리하게 한글 입력-편집이 가능하다.

/easycompany/webapp/WEB-INF/classes/messages_ko.properties

...
# -- spring:message --
easaycompany.loginform.title=로그인페이지
easaycompany.employeelist.title=사원 정보 리스트 페이지
easaycompany.updateemployee.title=사원 정보 수정 페이지
easaycompany.insertemployee.title=사원 정보 입력 페이지
easaycompany.departmentlist.title=부서 정보 리스트 페이지
easaycompany.updatedepartment.title=부서 정보 수정 페이지
easaycompany.insertdepartment.title=부서 정보 입력 페이지

JSP 페이지에 커스텀 태그를 사용하기 위해 라이브러리 선언을 해줘야 한다.그리고 <spring:message> 태그의 code 값에는 메시지 키값을 주면 된다.

...
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><spring:message code="easaycompany.departmentlist.title"/></title>
...

해당 화면의 타이틀이 “부서 정보 리스트 페이지”로 표기 될 것이다.

form tag(<form:form>,<form:input>,...)

폼 관련 어플리케이션을 개발할 때는 스프링이 제공하는 폼 태그와 같이 사용하면 편리하다.
스프링 폼 태그는 Model 데이터의 커맨드 객체(command object)나 참조 데이터(reference data)들을 화면상에서 쉽게 출력하도록 도와 준다.
일단, 스프링 폼 태그를 사용하려면 페이지에 커스텀 태그 라이브러리를 선언해야 한다.

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

스프링 폼 태그에는 아래와 같은 태그들이 있다.

<form:form>
<form:form>는 속성 commandName에 정의된 model attribute를 PageContext에 저장해서, <form:input>이나 <form:hidden>같은 tag들이 접근할 수 있도록 한다.
관련 속성은 아래와 같다.

  • commandName : 참조하려는 model attribute 이름.
  • action : 폼 전송할 URL
  • method : 폼 전송시에 HTTP 메소드(GET,POST)
  • enctype: 폼 전송시에 데이터 인코딩 타입.

<form:form> 태그를 사용하고 출력된 페이지에서 소스 보기로 HTML 코드를 열어보면 아래와 같이 HTML FORM 태그가 출력된걸 확인할 수 있을것이다.

<form:form commandName="department" action="http://myUrl..." method="post"> -> <form id="department" action="http://myUrl..." method="post">
 
<form:form commandName="department"> -> <form id="department" action="현재페이지 URL" method="post">


<form:input>
HTML text타입의 input 태그에 commandName에 지정된 객체 프로퍼티를 바인딩하기 위해 사용한다.
path에 프로퍼티 이름을 적으면, text타입의 input 태그의 id, name 값이 프로퍼티 이름이 되고, value는 해당 프로퍼티의 값이 된다.

<form:form commandName="department">
	<tr>
		<th>부서이름</th>
		<td><form:input path="deptname" size="20"/></td>
	</tr>
</form:form>

아래와 같이 HTML로 출력된다.

<form id="department" action="/easycompany/updateDepartment.do?deptid=1100" method="post">
	<tr>
		<th>부서이름</th>
		<td><input id="deptname" name="deptname" type="text" value="회식메뉴혁신팀" size="20"/></td>
	</tr>
</form>

<form:password>
HTML password타입의 input 태그에 commandName에 지정된 객체 프로퍼티를 바인딩하기 위해 사용한다.
바인딩값을 표기하기 위해서는 showPassword 속성을 showPassword=“true”로 지정해 주어야 한다.

<form:hidden>
HTML hidden타입의 input 태그에 commandName에 지정된 객체 프로퍼티를 바인딩하기 위해 사용한다.

<form:select>, <form:options>, <form:option>
HTML select, option 태그에 commandName에 지정된 객체 프로퍼티를 바인딩하기 위해 사용한다.
아래와 같이 <form:select>의 path 속성에 commandName 객체의 프로퍼티를 지정하고,
<form:options>의 items 속성에 List, Map등의 Collection 객체를 값으로 주면,

<form:form commandName="department">
	<tr>
		<th>상위부서</th>
		<td>
			<form:select path="superdeptid">
				<option value="">상위부서를 선택하세요.</option>
				<form:options items="${deptInfoOneDepthCategory}" />
			</form:select>
		</td>
	</tr>
</form:form>

아래와 같이 HTML로 출력된다. <form:select>의 path 속성값과 일치하는 option 값이 있으면 selected=“selected” 된다.

<form id="department" action="/easycompany/updateDepartment.do?deptid=1100" method="post">
	<tr>
		<th>상위부서</th>
		<td>
			<select id="superdeptid" name="superdeptid">
				<option value="">상위부서를 선택하세요.</option>
				<option value="5000">금융사업부</option>
                                <option value="3000">IT연구소</option>
                                <option value="4000">공공사업부</option>
                                <option value="1000" selected="selected">경영기획실</option>
                                <option value="2000">경영지원실</option>
			</select>
		</td>
	</tr>
</form>

<form:checkboxes>

<form:checkbox>

error tag(<form:errors>)

 

 

출처 : http://www.egovframe.org

 

저작자 표시
신고

'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글

Spring Framework MVC 로그인  (0) 2012.12.04
Spring Tag Library  (0) 2012.12.04
Spring Framework MVC + Mybatis 3  (0) 2012.12.04
Spring MVC 3 + MyBatis(iBatis) 3 CRUD구현  (0) 2012.10.18

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

기본 스프링 설정  완료 파일

 

첨부된 라이브러리는 아래와 같다.

 

 - Spring Framework 3.1 MVC  : 스프링 프레임워크 관련 라이브러리

 - Mybatis 3 : 데이터베이스 엑세스

 - JSTL : JSP을 HTML 태그처럼 쓸 수 있게 하는 라이브러리

 - c3p0  : 데이터베이스 안정적인 커넥션 풀

 - Log4j : Log 라이브러리

 - JDBC : Mysql , MS-SQL, Cubrid 라이브러리 포함

 - ezmorph : JSON 관련 라이브러리

 - JUnit : 테스트 라이브러리

 - Quartz : 스케쥴 라이브러리

 

 

 

SpringBasic.z01

 

SpringBasic.zip

저작자 표시
신고

'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글

Spring Framework MVC 로그인  (0) 2012.12.04
Spring Tag Library  (0) 2012.12.04
Spring Framework MVC + Mybatis 3  (0) 2012.12.04
Spring MVC 3 + MyBatis(iBatis) 3 CRUD구현  (0) 2012.10.18

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

받은 트랙백이 없고 , 댓글이 없습니다.
secret

http://www.raistudies.com/spring/spring-mvc/spring-mvc-3-controller-for-performing-crud-operation-using-mybatisibatis-3/

 

 

 

 

 

CRUDTest.war

저작자 표시
신고

'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글

Spring Framework MVC 로그인  (0) 2012.12.04
Spring Tag Library  (0) 2012.12.04
Spring Framework MVC + Mybatis 3  (0) 2012.12.04
Spring MVC 3 + MyBatis(iBatis) 3 CRUD구현  (0) 2012.10.18

WRITTEN BY
RevFactory
REV는 '향상시키다' 의미를 지니고 있습니다. 이곳은 Rev Factory 입니다! Kakao Developer

받은 트랙백이 없고 , 댓글이 없습니다.
secret