eastsage
39
2022-05-20 18:59:25
3
171

JSP에서 API 사용하는 방법 질문있습니다..


프로젝트 때문에 잘알지도 못하는 jsp로 페이지를 만들고 있습니다ㅠㅠ

naver api페이지에서 검색 java코드를 그대로 긁어왔습니다.

받아온 데이터를 어떻게 활용해야하는지 전혀 모르겠습니다.... 구글링을 해봐도 jsp 예제는 잘 없고 이해가 잘 안되더라구요...

일단 다른 jsp페이지에서 string값을 naverApi.java로 넘겨서 검색어로 이용하고 받은 데이터를 test.jsp에서 사용하고 싶습니다. 조언 부탁드리겠습니다!!! 아래는 파일 구조와 naverApi입니다.

package com.pgt;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class naverApi {

public static void main(String[] args) {
String text = null;
String cpu, board, vga, ram, ssd, power;
String clientId = "Qdx_88X1liFRzRrkfaX9"; //애플리케이션 클라이언트 아이디값"
String clientSecret = "v4IgnP1zCl"; //애플리케이션 클라이언트 시크릿값"

try {
text = URLEncoder.encode(text, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("검색어 인코딩 실패", e);
}

String apiURL = "https://openapi.naver.com/v1/search/shop?query=" + text; // json 결과
//String apiURL = "https://openapi.naver.com/v1/search/shop.xml?query="+ text; // xml 결과

Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("X-Naver-Client-Id", clientId);
requestHeaders.put("X-Naver-Client-Secret", clientSecret);
String responseBody = get(apiURL, requestHeaders);

System.out.println(responseBody);

}

private static String get(String apiUrl, Map<String, String> requestHeaders){
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestMethod("GET");
for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
con.setRequestProperty(header.getKey(), header.getValue());
}

int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
return readBody(con.getInputStream());
} else { // 에러 발생
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
}

private static HttpURLConnection connect(String apiUrl){
try {
URL url = new URL(apiUrl);
return (HttpURLConnection)url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
}

private static String readBody(InputStream body){
InputStreamReader streamReader = new InputStreamReader(body);

try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();

String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}

return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
}

0
  • 답변 3

  • 레인3
    2k
    2022-05-20 20:30:18

    책을 사서 일단 1주일 안에 다 보세요

  • joker2501
    1k
    2022-05-20 20:34:05

    그냥 naverApi클래스 그대로 <%!    %>로 선언하고

    버블릭 스태틱 보이드 메인 내용을 jsp에서 실행하면 되지 않을까요?


    클래스는  public  static 로 바꾸고, private는 그냥 퍼블릭 등으로 바꿔서, naverApi.get같이 쓰면...

  • eastsage
    39
    2022-05-21 15:54:23

    joker2501 바로 되네요 <%! 을 생각도 못하고 있었어요 정말 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.