3월 2일

SJY0000·2022년 3월 2일
0

Android

목록 보기
3/15

오늘 배운 것

  • TODO Project의 User REST API 서버 만들기(1)

안드로이드 어플로 자바프로그램을 이용하기 전 준비하기

REST API 란?

데이터만을 주고 받아 사용하고 C.R.U.D 분류하여 작업을 하고 서버에 전송하는 방식을 통해 구분할 수 있음
전송되는 SERVLET주소는 같고 doGet, doPost, doPut, doDelete 메소드로 데이터를 받음
결과는 주로 JSON, XML형식의 데이터로 결과를 전송함

  • GET : 조회(Read, DB의 select문)
  • POST : 생성(Create, DB의 insert문)
  • PUT : 수정(Update, DB의 update문)
  • DELETE : 삭제(Delete, DB의 delete문)

기존의 doGet, doPost 만을 사용하는 방식보다 유지보수작업이 훨씬 간편해지는 장점이 있음

기존에 만들었던 TODO프로젝트를 이용

@WebServlet(urlPatterns = "/api/user/*", loadOnStartup = 1) 
// Tomcat이 시작하면 준비, 이 SERBLET에 접근하기전 미리 객체를 생성함, 1은 우선순위 높음(1,2,3 ....)
public class UserRestServlet extends HttpServlet {

	private ServletContext application;
	private UserDao userDao = new UserDao();
	private Gson gson = new Gson();
	
	@Override
	public void init(ServletConfig config) throws ServletException { // web서버가 실행될 때
		System.out.println("init() 호출됨");
		// application : 애플리케이션 당 한개 유지되는 영역개체
		application = config.getServletContext();
		// 요청횟수 totalCount
		application.setAttribute("totalCount", 0);
	}

	private void addCount() {
		int totalCount = (Integer) application.getAttribute("totalCount");
		totalCount++;
		
		application.setAttribute("totalCount", totalCount);
		
		System.out.println("\"/api/user/*\" 요청횟수 : " + totalCount);
		
	}
	@Override
	public void destroy() { // web서버가 종료되는 시점
		System.out.println("destroy() 호출됨");
		// 정리작업...
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet() 호출됨");
		addCount();
		
		// 레코드 한개 조회
		// http://localhost:8090/TODO/api/user?category=one&userName=hong
		
		// 레코드 전체(여러개) 조회
		// http://localhost:8090/TODO/api/user?category=list
		String category = request.getParameter("category");
		
		String strJson = "";
		if (category.equals("one")) {
			strJson = processGetOne(request);
		} else if (category.equals("list")) {
			strJson = processGetList(request);
		}
		sendResponse(strJson, response);
	} // doGet



	private void sendResponse(String strJson, HttpServletResponse response) throws IOException {
		response.setContentType("application/json; charset = UTF-8"); // 무조건 printWriter 전에 선언해줘야 데이터에 문제가 안 생김
		PrintWriter out = response.getWriter();
		
		out.println(strJson);
		
//		out.flush();
		out.close(); // close에 flush가 포함되어 있음, 사용 후 무조건 닫아줘야 데이터가 쌓이지 않음
	}
	private String processGetOne(HttpServletRequest request)  {
		String userName = request.getParameter("userName");
		
		User user = userDao.getUserByUserName(userName);
		// XML 또는 JSON 문자열로 응답을 줌
		UserOneResult userOneResult = new UserOneResult();
		
		if (user != null) {
			userOneResult.setHasResult(true);
			userOneResult.setUser(user);
		} else {
			userOneResult.setHasResult(false);
		}
		// Gson을 이용해서 userOneResult 객체를 JSON 형식의 문자열로 변환
		String strJson = gson.toJson(userOneResult);
		System.out.println("strJson = " + strJson);
		
		return strJson;
	} // processGetOne
	private String processGetList(HttpServletRequest request) {
		List<User> userList = userDao.getAllUsers();
		
		UserListResult userListResult = new UserListResult();
		if (userList.size() > 0) {
			userListResult.setHasResult(true);
			userListResult.setUserList(userList);
			userListResult.setTotalCount(userList.size());
		} else { // userList.size() = 0
			userListResult.setHasResult(false);
			userListResult.setTotalCount(userList.size());
		}
		String strJson = gson.toJson(userListResult);
		System.out.println("strJson = " + strJson);
		
		return strJson;
	} // processGetList
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost() 호출됨");
		addCount();
		
		request.setCharacterEncoding("utf-8"); // 한글처리

		BufferedReader reader = request.getReader(); // 문자 입력 스트림 가져오기
		User user = gson.fromJson(reader, User.class); // JSON 문자열로부터 User 객체로 변환
		
		System.out.println(user.toString());
		userDao.registerUSer(user); // 신규회원 추가
		
		UserResult userResult = new UserResult();
		userResult.setSuccess(true);
		
		String strJson = gson.toJson(userResult);
		
		sendResponse(strJson, response);

	}

	@Override
	protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPut() 호출됨");
		addCount();
		
		request.setCharacterEncoding("utf-8"); // 한글처리
	
		BufferedReader reader = request.getReader(); // 문자 입력 스트림 가져오기
		User user = gson.fromJson(reader, User.class); // JSON 문자열로부터 User 객체로 변환

		System.out.println(user.toString());
		userDao.update(user); // 회원정보 수정
		
		UserResult userResult = new UserResult();
		userResult.setSuccess(true);
		
		String strJson = gson.toJson(userResult);
		
		sendResponse(strJson, response);
	}

	@Override
	protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doDelete() 호출됨");
		addCount();
	}


	
} // class UserRestServlet

데이터 전송 테스트 프로그램

PostMan프로그램을 사용하여 doGet, doPost, doPut, doDelete 테스트

0개의 댓글

관련 채용 정보