일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Java
- header setting
- SpringBoot
- docker 설치
- swagger
- java9
- 도커
- React
- custom valid
- ollama langflow
- 초기 구축
- docker
- JPA
- java8
- Next.js 14
- generate pojos
- spring
- jvm
- JavaScript
- 초기 세팅
- dto valid
- MySQL
- NextJS
- memcached
- CentOS6
- jpa entity자동
- 리눅스
- 헤더 설정
- generate entity
- spring boot
Archives
- Today
- Total
개발자의 길
[자바] 초간단 REST 서비스 하기 [#3] 본문
약속대로 코딩을 하겠습니다. 백문이 불여일코드.. 설명보단 일단 결과물을 보시죠~!
그럼 따라가보죠 ㅎㅎ
1. 환경설정
- 이클립스ee : http://www.eclipse.org/downloads/
- 톰캣 : http://tomcat.apache.org/
- 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
- 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를 실행하고 웹 브라우저를 오픈합니다+_+
그리고.. 다음과 같이 창에 입력을~
머.. 점수 등록입니다~
예상 결과 : [{"Result":"true"}]
등록된 점수 가져오는겁니다!
예상 결과 : {"score":[{"userId":"zerry","score":"3000"},{"userId":"user","score":"5000"}]}
히야.. 일단 된거 같네요.. 그럼 다음번엔 하나하나 파헤쳐 보도록 하죠~
머.. REST고 JSON이고 모고 간에.. 그냥 자바프로그래밍만 알아도 되겠네요.. 점점 코딩 할께 없어지고 있는 세상입니다. 하하하-_- (과연?)
그럼.. 패키지로 묶어버린 war파일 입니다.. 톰캣 6.0, jee galileo, jre 1.6으로 했었드랬어요..
'4. JAVA' 카테고리의 다른 글
[JAVA] 네이밍 룰 (1) | 2011.08.20 |
---|---|
[java] 특수문자 제거, 이메일 유효성, 연속 된 스페이스 제거 -- 정규식 (12) | 2011.07.28 |
[자바] 초간단 REST 서비스 하기 [#2] (0) | 2011.05.16 |
[자바] 초간단 REST 서비스 하기 [#1] (0) | 2011.05.16 |
Spring에서 호출 URL 찾는 방법 (0) | 2011.04.07 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Comments