데이터만을 주고 받아 사용하고 C.R.U.D 분류하여 작업을 하고 서버에 전송하는 방식을 통해 구분할 수 있음
전송되는 SERVLET주소는 같고 doGet, doPost, doPut, doDelete 메소드로 데이터를 받음
결과는 주로 JSON, XML형식의 데이터로 결과를 전송함
기존의 doGet, doPost 만을 사용하는 방식보다 유지보수작업이 훨씬 간편해지는 장점이 있음
@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 테스트