API 실습

  • Maven project - org.apache.maven.archetype - webapp 타입의 프로젝트 만들어준다.

  • 라이브러리 추가

    • mysql
    • json 라이브러리
    • servlet- api
    • jstl
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>kr.or.connect</groupId>
    	<artifactId>webapiexam</artifactId>
    	<packaging>war</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>webapiexam Maven Webapp</name>
    	<url>http://maven.apache.org</url>
    	<properties>
    		<!-- web.xml 파일을 삭제해도 eclipse에서 오류가 발생하지 않는다. -->
    		<failOnMissingWebXml>false</failOnMissingWebXml>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.45</version>
    		</dependency>
    		<!-- json 라이브러리 databind jackson-core, jackson-annotaion에 의존성이 있다. -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>2.9.4</version>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    			<version>1.2</version>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<build>
    		<finalName>webapiexam</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.6.1</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    

추가 후, maven에 update project 눌러준다.

navigator에 main 안, java 폴더 만들어준다. 3.1로 버전 바꿔준다.

실습 - 롤 객체 하나 받아오기

  • Servlet을 만들 때, URL mapping 도 바꿀 수 있고, POST나 GET function 만들 수 있다.image

    image

    image

package kr.or.connect.webapiexam.api;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;

import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;

/**
 * Servlet implementation class RoleById
 */
@WebServlet("/roles/*") //어떤 문자든지 모두 올 수 있다.
public class RoleById extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public RoleById() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setCharacterEncoding("utf-8");
		response.setContentType("application/json");

		String pathInfo = request.getPathInfo();
		String[] pathParts = pathInfo.split("/");
		String idStr = pathParts[1];
		int id = Integer.parseInt(idStr);
		RoleDao dao = new RoleDao();
		Role role = dao.getRole(id);

		ObjectMapper objectMapper = new ObjectMapper();
		String json = objectMapper.writeValueAsString(role);
		PrintWriter out = response.getWriter();
		out.println(json);
		out.close();
	}

}
  • response의 객체의 setCharacterEncoding, setContentType을 사용해 설정한다.

  • request 객체로 url info를 가져와 url의 role id 정보를 가져온다.
  • RoleDao 객체의 getRole(id)로 role 객체를 가져온다.
  • ObjectMapper 객체의 writeValueAsString(role)로 json 스트링을 가져온다.
  • response.getWriter로 PrintWriter 객체를 가져온다.
  • PrintWriter 객체로 json 정보를 출력한다.

실습 - 롤 리스트 받아오기

@WebServlet("/Roles")
public class RolesServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public RolesServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json");

        RoleDao dao=new RoleDao();
        List<Role> list = dao.getRoles();
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(list);

        PrintWriter out = response.getWriter();
        out.print(json);
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

© 2018. All rights reserved.

Powered by Hydejack v8.5.2