'Java'에 해당되는 글 26건
- 2017.09.13 JSON 문자열을 Map 으로 변환하기(Jackson 사용)
- 2014.05.29 Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기
- 2014.03.05 Apache HttpComponents 파일전송 예제 5
- 2012.06.12 Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 2
- 2012.05.31 Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기
JSON 문자열을 Map 으로 변환하기(Jackson 사용)
https://gturnquist-quoters.cfapps.io/api/random 여기에 있는 JSON을 읽어서 Map 으로 변환하고 이것저것 더 해보기
브라우저에서 위 URL 로 접속해 보면 JSON 문자열을 다음과 같다.
{ type: "success", value: { id: 10, quote: "Really loving Spring Boot, makes stand alone Spring apps easy." } }
요것을 처리하는 예제 코드
import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonTest { public static void main(String[] args) throws JsonParseException, JsonMappingException, MalformedURLException, IOException { ObjectMapper mapper = new ObjectMapper(); // URL 에 있는 JSON String 을 Map으로 변환하기 Map<String, Object> data = mapper.readValue( new URL("https://gturnquist-quoters.cfapps.io/api/random"), new TypeReference<Map<String,Object>>(){}); // {type=success, value={id=9, quote=So easy it is to switch container in #springboot.}} System.out.println(data); // {id=9, quote=So easy it is to switch container in #springboot.} System.out.println(data.get("value")); // Map을 JSON String 으로 변환 // {"type":"success","value":{"id":9,"quote":"So easy it is to switch container in #springboot."}} System.out.println(mapper.writeValueAsString(data)); // Map을 보기쉬운 JSON String 으로 변환 /* { "type" : "success", "value" : { "id" : 9, "quote" : "So easy it is to switch container in #springboot." } } */ System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data)); } }
'Java' 카테고리의 다른 글
Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기 (0) | 2014.05.29 |
---|---|
Apache HttpComponents 파일전송 예제 (5) | 2014.03.05 |
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2) | 2012.06.12 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기 (0) | 2012.05.31 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |
Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기
저번에 썼던 포스트에서는 Apache HttpComponents 를 이용해서 파일전송 예제를 맹글어 봤었는데.
요번에는 Apache Commons HttpClient 를 이용해서 파일전송 예제를 맹글어 보았다.
정확하게는 모르지만 왠지 내가 알기론 Apache Commons HttpClient 후로젝트가 Apache HttpComponents 로 바뀐것 같다.
그러니까 최신 API 는 아마 Apache HttpComponents 이겠지...
그런데 왜 굳이 옛날 API 로 예제를 맹글게 되었을까..?
피치못할 사정으로 JDK 1.4 기반에서 동작하도록 해야했기 때문이다 -.-
나 같은 저주 받은 개발환경이 아닌 사람들은 이전에 썼던 포스트를 참고해서 고거 쓰면 된다.
뭐 아무튼 예제 소스는 요럿다.
package com.tistory.stove99; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.lang.StringEscapeUtils; public class Http { private static final String DEFAULT_ENCODING = "UTF-8"; private String url; private String encoding; private Map param; public Http(String url){ this(url, null); } public Http(String url, String encoding){ this.encoding = encoding==null ? DEFAULT_ENCODING : encoding; this.url = url; param = new HashMap(); } /** * Http 전송 * @return */ public String submit(){ String result = null; HttpClient client = new HttpClient(); PostMethod method = new PostMethod (url); try{ Part[] parts = new Part[param.size()]; Iterator it = param.keySet().iterator(); int index = 0; while( it.hasNext() ){ String key = (String)it.next(); Object value = param.get(key); if( value instanceof File ){ // 한글 파일명이 쪽바로 처리가 안되서 StringEscapeUtils 썻음. // 받는 쪽에서는 StringEscapeUtils.unescapeHtml() 로 다시 변환바람. parts[index++] = new FilePart( key, StringEscapeUtils.escapeHtml(((File)value).getName()), (File)value, null, encoding); }else{ parts[index++] = new StringPart(key, (String)value, encoding); } } method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); client.executeMethod(method); // read result BufferedReader br = new BufferedReader( new InputStreamReader(method.getResponseBodyAsStream(), encoding)); String buffer = null; StringBuffer tmp = new StringBuffer(); while( (buffer=br.readLine())!=null ){ tmp.append(buffer).append("\r\n"); } result = tmp.toString(); }catch (HttpException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally { method.releaseConnection(); } return result; } /** * 일반 파라메터 추가 * @param name 파라메터 이름 * @param value 값 * @return */ public Http addParam(String name, String value){ param.put(name, value); return this; } /** * 업로드할 파일을 파라메터로 추가 * @param name <input type="file" name="요기들어가는 값"/> * @param file * @return */ public Http addParam(String name, File file){ param.put(name, file); return this; } /** * 테스트 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Http http = new Http("http://127.0.0.1:8888/rpm/alarm/receive.kins"); String result = http.addParam("test", "테스트다1") .addParam("test1", "테스트다2") .addParam("upload_file1", new File("d:\\야훗훗 유지보수.xlsx")) .addParam("upload_file2", new File("d:\\휴가신청서.hwp")) .submit(); System.out.println("result : " + result); } }
Maven Dependency
<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
Maven 안쓸때 필요한 라이브러리 따운
'Java' 카테고리의 다른 글
JSON 문자열을 Map 으로 변환하기(Jackson 사용) (0) | 2017.09.13 |
---|---|
Apache HttpComponents 파일전송 예제 (5) | 2014.03.05 |
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2) | 2012.06.12 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기 (0) | 2012.05.31 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |
Apache HttpComponents 파일전송 예제
최근에 Http 를 이용해서 간단히 파일전송이랑 이것저것 구현해야 되는 프로젝트를 했다.
요런것들을 구현할때 딱 좋은 것들 중 하나는 Apache HttpComponents 이다.
라이브러리 같은거는 최신버전을 쓰고 싶다는 이상 야릇한 고집같은게 있어서 최신버전이 뭔가~ 하고 간만에 Apache HttpComponents 프로젝트 사이트에 가 보았다.
가보니 최신버전이 4.3.2 였다.
4.3.2 버전을 maven dependency 에 추가하고 예전에 썼던 글(Apache HttpComponents를 이용한 GET, POST 요청하기)을 참고해서 클래스를 하나 맹글었다.
그런데 라이브러리가 이것저것 변경이 많이 됐는지 deprecate 된 메소드가 무지 많은것 같이 느껴졌다.
그래서 사이트에서 제공하는 예제를 바탕으로 아예 4.3.2 에 맞게 클래스를 새로 하나 맹글었다.
먼저 maven 사용하는 사람들은 요런 디펜던시를 추가해 주고
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.3.2</version> </dependency>
기냥 쌩으로 하는 사람들은 httpclient-4.3.2.jar, httpcore-4.3.1.jar, httpmime-4.3.2.jar 를 클래스패스에 추가해 주면 된다.
Apache HttpComponents 4.3.2 를 이용한 HTTP 파일전송하기 샘플
package com.tistory.stove99; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.net.URLEncoder; import java.nio.charset.Charset; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class Http { private static final String DEFAULT_ENCODING = "UTF-8"; private String url; private MultipartEntityBuilder params; /** * @param url 접속할 url */ public Http(String url){ this.url = url; params = MultipartEntityBuilder.create(); } /** * Map 으로 한꺼번에 파라메터 훅 추가하는 메소드 * @param param 파라메터들이 담긴 맵, 파라메터들은 UTF-8로 인코딩 됨 * @return */ public Http addParam(Map<String, Object> param){ return addParam(param, DEFAULT_ENCODING); } /** * Map 으로 한꺼번에 파라메터 훅 추가하는 메소드 * @param param 파라메터들이 담긴 맵 * @param encoding 파라메터 encoding charset * @return */ public Http addParam(Map<String, Object> param, String encoding){ for( Map.Entry<String, Object> e : param.entrySet() ){ if (e.getValue() instanceof File) { addParam(e.getKey(), (File)e.getValue(), encoding); }else{ addParam(e.getKey(), (String)e.getValue(), encoding); } } return this; } /** * 문자열 파라메터를 추가한다. * @param name 추가할 파라메터 이름 * @param value 파라메터 값 * @return */ public Http addParam(String name, String value){ return addParam(name, value, DEFAULT_ENCODING); } public Http addParam(String name, String value, String encoding){ params.addPart(name, new StringBody(value, ContentType.create("text/plain", encoding))); return this; } /** * 업로드할 파일 파라메터를 추가한다. * @param name * @param file * @return */ public Http addParam(String name, File file){ return addParam(name, file, DEFAULT_ENCODING); } public Http addParam(String name, File file, String encoding){ if( file.exists() ){ try{ params.addPart( name, new FileBody(file, ContentType.create("application/octet-stream"), URLEncoder.encode(file.getName(), encoding))); }catch( Exception ex ){ ex.printStackTrace(); } } return this; } /** * 타겟 URL 로 POST 요청을 보낸다. * @return 요청결과 * @throws Exception */ public String submit() throws Exception{ CloseableHttpClient http = HttpClients.createDefault(); StringBuffer result = new StringBuffer(); try{ HttpPost post = new HttpPost(url); post.setEntity(params.build()); CloseableHttpResponse response = http.execute(post); try{ HttpEntity res = response.getEntity(); BufferedReader br = new BufferedReader( new InputStreamReader(res.getContent(), Charset.forName("UTF-8"))); String buffer = null; while( (buffer=br.readLine())!=null ){ result.append(buffer).append("\r\n"); } }finally{ response.close(); } }finally{ http.close(); } return result.toString(); } /** * 테스트 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Http http = new Http("http://127.0.0.1:8888/receiver.jsp"); http.addParam("test", "문자열 파라메터 테스트다!") .addParam("upload_file1", new File("d:\\첨부파일1.hwp")) .addParam("upload_file2", new File("d:\\첨부파일2.jpg")) .submit(); } }
Spring @MVC 로 receiver 쪽을 대충 요렇게 구현하면 될것 같다.
@RequestMapping public void receiver( @RequestParam("upload_file1") MultipartFile file1, @RequestParam("upload_file2") MultipartFile file2){ System.out.println("upload_file1 : " + file1.getOriginalFilename()); System.out.println("upload_file2 : " + file1.getOriginalFilename()); File upDir = new File("c:\\upfile\\"); try { file1.transferTo(new File(upDir, file1.getOriginalFilename())); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
'Java' 카테고리의 다른 글
JSON 문자열을 Map 으로 변환하기(Jackson 사용) (0) | 2017.09.13 |
---|---|
Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기 (0) | 2014.05.29 |
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2) | 2012.06.12 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기 (0) | 2012.05.31 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기
Java 라이브러리 중에 JSOUP 라고 심플하면서도 왠지 간지나는 HTML 문서를 다루는 라이브러리가 있다.
요 라이브러리를 이용해 HTML 문서에서 각종 경로를 추출해서 요 경로를 절대 경로로 바꿔보자.
먼저 테스트할 html 문서
<html> <head> <title>테스트다!!</title> <script type="text/javascript" src="/resource/js/jquery-1.7.1.min.js"></script> <link type="text/css" href="/resource/css/admin/general.css" rel="stylesheet" /> </head> <body> <span id="navi"> <img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" /> </span> 테스트다!! </body> </html>
테스트 소스
import java.io.IOException; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class Test { public static void main(final String[] args) throws IOException{ Document doc = Jsoup.parse( new URL("http://127.0.0.1:8080/index.html").openConnection().getInputStream(), "UTF-8", "http://127.0.0.1:8080/"); // src attribute 가 있는 엘리먼트들을 선택 Elements elems = doc.select("[src]"); for( Element elem : elems ){ if( !elem.attr("src").equals(elem.attr("abs:src")) ){ elem.attr("src", elem.attr("abs:src")); } } // href attribute 가 있는 엘리먼트들을 선택 elems = doc.select("[href]"); for( Element elem : elems ){ if( !elem.attr("href").equals(elem.attr("abs:href")) ){ elem.attr("href", elem.attr("abs:href")); } } System.out.println(doc.toString()); } }
변환된 html 문서
<html> <head> <title>테스트다!!</title> <script type="text/javascript" src="http://127.0.0.1:8080/resource/js/jquery-1.7.1.min.js"></script> <link type="text/css" href="http://127.0.0.1:8080/resource/css/admin/general.css" rel="stylesheet" /> </head> <body> <span id="navi"> <img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" /></span> 테스트다!! </body> </html>
JSOUP 사이트 : http://jsoup.org/
Maven Dependency
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.6.3</version> </dependency>
뭐 이것 외에도 JSOUP 를 이용하면 HTML뿐만 아니라 XML 도 쉽게 다룰수 있다.
JQuery 에서 css 셀렉터를 써서 엘리먼트를 가져와서 쪼물닥 거리는 것과 비슷하게 xml 문서를 쉽게 파싱해서 땡겨다 쓸수 있다.
저번에 얼핏 말했던 xpath 를 이용해서 쪼물딱 거리는것 보다 개인적으로 훨씬 좋은것 같다.
JQuery 써본 사람들은 금방 쉽게 대충 파악해서 쓸 수 있다. 고건 시간되면 다음 기회에~
'Java' 카테고리의 다른 글
Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기 (0) | 2014.05.29 |
---|---|
Apache HttpComponents 파일전송 예제 (5) | 2014.03.05 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기 (0) | 2012.05.31 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |
Java 에서 문자열 비교할때 equals() 말고 == (비교연산자) 로 비교하기 (1) | 2011.11.24 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기
저번에는 Javascript 정규표현식으로 IP 문자열을 추출하는걸 해 봤는데 이번에는 Java 로 바꿔서 해 보았다.
소스
public static String[] getIp(String str){ Pattern p = Pattern.compile("((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})"); Matcher m = p.matcher(str); StringBuffer sb = new StringBuffer(); while(m.find()){ sb.append(m.group()+ " "); } return m.reset().find() ? sb.toString().split(" ") : new String[0]; }
'Java' 카테고리의 다른 글
Apache HttpComponents 파일전송 예제 (5) | 2014.03.05 |
---|---|
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2) | 2012.06.12 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |
Java 에서 문자열 비교할때 equals() 말고 == (비교연산자) 로 비교하기 (1) | 2011.11.24 |
Java에서 파일로 부터 데이터 읽어서 정렬(bubble sort)하기 (0) | 2011.11.24 |