JSP/SERVLET
2018.10.18 / 16:41

[ÀÚ¹Ù] ÃÊ°£´Ü REST ¼­ºñ½º Çϱâ [#3]

hanulbit
Ãßõ ¼ö 233
¾à¼Ó´ë·Î ÄÚµùÀ» ÇÏ°Ú½À´Ï´Ù. ¹é¹®ÀÌ ºÒ¿©ÀÏÄÚµå.. ¼³¸íº¸´Ü ÀÏ´Ü °á°ú¹°À» º¸½ÃÁÒ~!
±×·³ µû¶ó°¡º¸ÁÒ ¤¾¤¾

1. ȯ°æ¼³Á¤
- ÀÌŬ¸³½ºee : http://www.eclipse.org/downloads/
- jersey ¶óÀ̺귯¸® : https://jersey.dev.java.net/

¸ÕÀú ÀÌŬ¸³½º¿Í ÅèĹÀ» ¼³Ä¡ÇÕ´Ï´Ù. ¾Æ, ¹°·Ð Java SDK´Â ¼³Ä¡Çϼ̰ÚÁÒ?-0-
jersey ¶óÀ̺귯¸®´Â ¾ÐÃàÀ» Ç®°í ´ë±âž´Ï´Ù.

2. ÇÁ·ÎÁ§Æ® »ý¼º
- new -> Other -> Web -> Dynamic Web Project
- Project Name : RestScoreBoard
- Target runtime : Apache Tomcat vX.X(¿©±â¼­´Â 6.0)
- Dynamic web module version : 2.5
- Configuration : Default Configuration for Apache Tomcate VX.X
- Finish
3. ¶óÀ̺귯¸® Ãß°¡
- jersey¾ÐÃàÆú´õ/jersey-archive-1.3/libÀ» º¹»çÇÑ´Ù.
- WebContent/lib ¿¡ ºÙ¿©³Ö±â ÇÑ´Ù.

4. Ŭ·¡½º Ãß°¡

ÀϹÝÀûÀÎ ¿äÁò À¥ ¼­ºñ½ºÀÇ ÇüÅ°¡ ¾Æ´Ò±î ÇÕ´Ï´Ù..;; ´ëÃæ Æ÷Á¶±â¹ÝÀÇ ¸ðµ¨À» ¸¸µé¾îµÎ°í~
ÀÌ ¸ðµ¨À» ÀÌ¿ëÇÏ¿© ºñÁî´Ï½º ·ÎÁ÷¸¸ ´ã±ä ³à¼®À» ¸¸µé°í~ ´ëÃæ °¡°øÇؼ­ ¼­ºñ½º¸¦ ÇÏ´Â ±×·± ¹æ½ÄÀÌ°ÚÁÒ. 

Á¤¸®Çϸé Score¶ó´Â Æ÷Á¶±â¹Ý ¸ðµ¨ÀÌ ÀÖ°í~ À̳༮À» ÁöÁö°í ºº´Â ºñÁî´Ï½º ·ÎÁ÷À» Á¤ÀÇÇÑ IScoreService°¡ ÀÖ±¸~ ÀÌ ³à¼®À» »ç¿ëÇØ RESTÇüÅ·Π¼­ºñ½º ÇØÁÖ´Â RestScoreReturnJsonÀÌ ÀÖ°Ú½À´Ï´Ù~


- example1.score.model.Score
¸ÕÀú ´Ü¼ø POJO Score Ŭ·¡½º ÀÔ´Ï´Ù. À¯Àú¾ÆÀ̵ð¿Í.. Á¡¼ö¸¸ ±â·ÏÇϳ׿ä.
ƯÀÌÇÑ°Ç Å¬·¡½ºÀ§¿¡ Á¤ÀÇµÈ ¾î³ëÅ×À̼ÇÀÌ Àֳ׿ä.. À̺κÐÀº ´ÙÀ½¿¡^^ ÀÏ´Ü µû¶óÇսôÙ~
´«Ä¡ ºü¸£½ÅºÐÀº.. Ŭ·¡½º¸¦ XMLÇüÅ·ΠÀÚµ¿ º¯È¯ÇØÁÙ°Í °°Àº ´À³¦ÀÌ ¿À½Ã°ÚÁÒ?
package example1.score.model;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Score {
private String userId;
private int    score;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Score(String userId, int score) {
super();
this.userId = userId;
this.score = score;
}
public Score(){}
}

- example1.score.business.IScoreService
ÀÏ´ÜÀº µÎ°¡Áö ±â´É¸¸ ÀÖ´Â ¼­ºñ½º ÀÔ´Ï´Ù. Á¡¼ö °¡Á®¿À±â.. Á¡¼ö ÀÔ·ÂÇϱâ.. ¸Ó º°·Î ¾ø½À´Ï´Ù.
package example1.score.business;

import java.util.List;

import example1.score.model.Score;

public interface IScoreService {
public List<Score> GetScoreList();
public void AddScore(Score score);
}


- example1.score.business.GlobalMemoryScoreService
ÃÊ ±ÞÁ¶ÇÑ Æ¼°¡ ³ª´Â ¼­¹ö°¡ Á×¾î¹ö¸®¸é ´Ù ³¯¶ó°¡°Ô µÇ´Â ÃÊ ÇãÁ¢¹öÀü ¼­ºñ½º ÀÔ´Ï´Ù.
´ëÃæ ¸®½ºÆ®¸¦ staticÀ¸·Î ¸¸µé°í, ÀÔ·ÂÇÏ°í ³¯¸®°í Çعö¸®³×¿ä..
package example1.score.business;

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

import example1.score.model.Score;

public class GlobalMemoryScoreService implements IScoreService {

private static ArrayList<Score> scores = new ArrayList<Score>();
@Override
public void AddScore(Score score) {
scores.add(score);
}

@Override
public List<Score> GetScoreList() {
return scores;
}

}


- example1.score.rest.RestScoreReturnJson
µåµ® Rest¸¦ Çϴ Ŭ·¡½º ÀÔ´Ï´Ù. ¿©±â¼­µµ ¾î³ëÅ×À̼ÇÀÌ ¸î°³ º¸À̴µ¥¿ä.
À̺κеµ ³ªÁß¿¡ ¾Ë¾Æº¸µµ·Ï ÇÏÁÒ~ ÀÏ´Ü µû¶óÇսôÙ.
´ëÃæ ´«Ä¡°¡ ¿À½Ã´Â ºÐµéÀº.. Àß ¾Æ½Ã°ÚÁÒ? ^^; ScoreŬ·¡½º¿¡¼­ Á¤ÀÇÇÑ ¾î³ëÅ×À̼Ƕ§¹®¿¡ ÀÚµ¿À¸·Î JsonÀÌ ¸¸µé¾î Áú°Å¶ó´Â°Å..;;
package example1.score.rest;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import example1.score.business.GlobalMemoryScoreService;
import example1.score.business.IScoreService;
import example1.score.model.Score;

@Path("/score")
public class RestScoreReturnJson {
//private IScoreService scoreService = null;
//¾Æ·¡ ºÎºÐÀº ³ªÁß¿¡.. IoC·Î Àû¿ë~!
private IScoreService scoreService = new GlobalMemoryScoreService(); 
public void SetScoreService(IScoreService scoreService)
{
this.scoreService = scoreService;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("add/{id}={score}")
public String addScore(
@PathParam("id") final String id,
@PathParam("score") final int score
)
{
scoreService.AddScore(new Score(id,score));
return "[{\"Result\":\"true\"}]";
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("get")
public List<Score> addScore()
{
List<Score> scores = scoreService.GetScoreList();
return scores;
}
}

5. web.xml ¼³Á¤ º¯°æ
Restµµ ÀÏÁ¾ÀÇ À¥ ¾îÇø®ÄÉÀ̼ÇÀ̱⠶§¹®¿¡~ ¾Æ·¡¿Í °°ÀÌ ¼³Á¤À» ÇØÁÝ´Ï´Ù. jersey´Â ¼­ºí¸´ÀÇ º¯Á¾Àΰ¡ º¸³×¿ä..~
<?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>sample1.RestScoreBoard</display-name>
  <servlet>
    <servlet-name>ScoreRestService</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>example1.score.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ScoreRestService</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

6. ½ÇÇà
±×·³.. WAS¸¦ ½ÇÇàÇÏ°í À¥ ºê¶ó¿ìÀú¸¦ ¿ÀÇÂÇÕ´Ï´Ù+_+

±×¸®°í.. ´ÙÀ½°ú °°ÀÌ Ã¢¿¡ ÀÔ·ÂÀ»~
¸Ó.. Á¡¼ö µî·ÏÀÔ´Ï´Ù~

µî·ÏµÈ Á¡¼ö °¡Á®¿À´Â°Ì´Ï´Ù!
¿¹»ó °á°ú : {"score":[{"userId":"zerry","score":"3000"},{"userId":"user","score":"5000"}]}

È÷¾ß.. ÀÏ´Ü µÈ°Å °°³×¿ä.. ±×·³ ´ÙÀ½¹ø¿£ ÇϳªÇϳª ÆÄÇìÃÄ º¸µµ·Ï ÇÏÁÒ~

¸Ó.. REST°í JSONÀÌ°í ¸ð°í °£¿¡.. ±×³É ÀÚ¹ÙÇÁ·Î±×·¡¹Ö¸¸ ¾Ë¾Æµµ µÇ°Ú³×¿ä.. Á¡Á¡ ÄÚµù ÇÒ²² ¾ø¾îÁö°í ÀÖ´Â ¼¼»óÀÔ´Ï´Ù. ÇÏÇÏÇÏ-_- (°ú¿¬?)

±×·³.. ÆÐÅ°Áö·Î ¹­¾î¹ö¸° warÆÄÀÏ ÀÔ´Ï´Ù.. ÅèĹ 6.0, jee galileo, jre 1.6À¸·Î Çß¾úµå·¨¾î¿ä..



Ãâó: http://zerry82.tistory.com/289?category=75000 [µ¿±ÔÀÇ ÇÁ·Î±×·¡¹Ö À̾߱â..]