Facebook API for Java Spring Framework (2013-10-08)

Programming 2012.10.08 21:06

페이스북 API들이 많은데.. 그중에 자바가 제대로 된게 없어서 고생을 하곤했는데..

최근에 다시 검색해보니..

으아니~! Springframework에서도 페이스북 뿐만 아니라 각종 Social용 API를 포함하는 라이브러리를 선보였넹!!


http://www.springsource.org/spring-social


일단 위 페이지가 공식 페이지!


여기서 나는 페이스북 API가 필요하다능!


자~ 그럼 한번 같이 만들어봅시다.


따라하기 전에 먼저...Facebook Developer 사이트에 가셔서 자신의 App을 만들어야 합니다! 이건 구글에 검색해보면 무지 많으니까 찾아보시오!

https://developers.facebook.com/apps


1. 필요한 라이브러리를 Maven으로 가져옵니다.

<properties>

...

<spring-social.version>1.0.2.RELEASE</spring-social.version>

<org.springframework.social-facebook-version>1.0.2.RELEASE</org.springframework.social-facebook-version>

</properties>


...


<dependency>

<groupId>org.springframework.social</groupId>

<artifactId>spring-social-core</artifactId>

<version>${spring-social.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.social</groupId>

<artifactId>spring-social-web</artifactId>

<version>${spring-social.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.social</groupId>

<artifactId>spring-social-facebook</artifactId>

<version>${org.springframework.social-facebook-version}</version>

</dependency>



2. 코드를 작성합니다.

( 공식 document에서는 - http://static.springsource.org/spring-social-facebook/docs/1.0.x/reference/html/connecting.html  Spring의 환경에 맞게 xml로 설정을 불러오게 되어있는데 저는 일단 만들어 테스트해보는게 목적이니까! JunitTest로 그냥 고고싱!)

import java.util.Calendar;

import java.util.List;


import org.junit.Before;

import org.junit.Test;

import org.springframework.social.connect.support.ConnectionFactoryRegistry;

import org.springframework.social.facebook.api.Facebook;

import org.springframework.social.facebook.api.FacebookProfile;

import org.springframework.social.facebook.api.impl.FacebookTemplate;

import org.springframework.social.facebook.connect.FacebookConnectionFactory;


public class FacebookAPITest {


    @Before

    public void setUp() throws Exception {

    }


    @Test

    public void test() {

Long st = Calendar.getInstance().getTimeInMillis();

ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();

registry.addConnectionFactory(new FacebookConnectionFactory("앱 ID/API 키", "앱 시크릿 코드"));

String accessToken = "액서스토큰"; // access token received from Facebook after OAuth authorization

Facebook facebook = new FacebookTemplate(accessToken);

FacebookProfile profile = facebook.userOperations().getUserProfile();

String myid = profile.getId();

String myname = profile.getName();

System.out.println("my id is '"+myid+"' and my name is '"+myname+".");

System.out.println("============= timestamp : "+(Calendar.getInstance().getTimeInMillis() - st));

st = Calendar.getInstance().getTimeInMillis();

List<FacebookProfile> friends = facebook.friendOperations().getFriendProfiles();

for(FacebookProfile fp : friends){

    System.out.println("Friend name => "+fp.getName());

}

System.out.println("============= timestamp : "+(Calendar.getInstance().getTimeInMillis() - st));

st = Calendar.getInstance().getTimeInMillis();

List<String> fids = facebook.friendOperations().getFriendIds();

for(String id : fids){

    System.out.println("friend id => "+id);

}

System.out.println("============= timestamp : "+(Calendar.getInstance().getTimeInMillis() - st));

st = Calendar.getInstance().getTimeInMillis();

    }


}


3. 실행~


my id is '1178*****' and my name is '*****'.

============= timestamp : 2156

Friend name => J***

Friend name => J****

Friend name => 김****

Friend name => Jon****

Friend name => Ch****

Friend name => Ha****

...

...

...



아...정말.정말.정말.정말 쉬워졌다....-_-!!

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

[JAVA] jce1.2.2 라이브러리

Programming 2010.04.08 16:04
아놔 맨날 뭐 받을라면 로그인하래.-_-;
그래서 그냥 여기다 올려 놓습니다.;



read me


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

[JAVA]한글 인코딩 테스트 해보고자 할때 -_-;

Programming 2010.01.20 21:06
String originalFileName ="한글!!! 한글!! abc#@$$";
System.out.println("====org=====");
System.out.println(originalFileName);
System.out.println("====8859-1=====");
System.out.println(new String( originalFileName.getBytes( "8859_1"), "KSC5601"));
System.out.println(new String( originalFileName.getBytes( "8859_1"), "EUC-KR"));
System.out.println(new String( originalFileName.getBytes( "8859_1"), "UTF-8"));
System.out.println("====KSC5601=====");
System.out.println(new String( originalFileName.getBytes( "KSC5601"), "8859_1"));
System.out.println(new String( originalFileName.getBytes( "KSC5601"), "EUC-KR"));
System.out.println(new String( originalFileName.getBytes( "KSC5601"), "UTF-8"));
System.out.println("====EUC-KR=====");
System.out.println(new String( originalFileName.getBytes( "EUC-KR"), "8859_1"));
System.out.println(new String( originalFileName.getBytes( "EUC-KR"), "KSC5601"));
System.out.println(new String( originalFileName.getBytes( "EUC-KR"), "UTF-8"));
System.out.println("====UTF-8=====");
System.out.println(new String( originalFileName.getBytes( "UTF-8"), "KSC5601"));
System.out.println(new String( originalFileName.getBytes( "UTF-8"), "8859_1"));
System.out.println(new String( originalFileName.getBytes( "UTF-8"), "EUC-KR"));

당췌 시스템에 맞는 인코딩이 뭔지 모르겠다 할 때...
한번쯤 이렇게 코딩하고 테스트 해보시면 시스템에 맞는 인코딩 변환을 찾을수 있을겁니다.ㅋ

----- 추가 내용. ------

그것보단 일단 근본적인 문제를 일으키는 원인은...

서버 인코딩, 톰켓의 설정, application의 설정을 봐야함.

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

톰켓은 기본적으로 GET parameter에 대해서 ISO-8859-1 인코딩을 씀.

Tomcat will use ISO-8859-1 as the default character encoding of the entire URL, including the query string ("GET parameters").


서버가 만약 UTF-8 설정되있고, application encoding이 UTF-8 이라고 한다면

톰켓의 server.xml에 설정을 잡아준다.

Set URIEncoding="UTF-8" on your <Connector> in server.xml


그러면 일단 한글은 잘 될거임. ㅇㅇ



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

[iBatis Tip] Oracle Multi-insert를 iBatis iterator를 사용하여 구현해 보자.

Programming 2009.09.08 16:16
오라클에는 여러개의 값을 한번에 insert하기 위해서 쓰는 multi insert구문이 있습니다.
바로 insert all인데요.
CREATE TABLE t (
pid   NUMBER(5),
fname VARCHAR2(20),
lname VARCHAR2(25));

INSERT ALL
INTO t (pid, fname, lname)
VALUES (1, 'Dan', 'Morgan')
INTO t (pid, fname, lname)
VALUES (2, 'Jeremiah', 'Wilton')
INTO t (pid, fname, lname)
VALUES (3, 'Helen', 'Lofstrom')
SELECT * FROM dual;
SELECT * FROM t;

위와 같이 쓰는겁니다.

자 그럼 위와 같은 커리를 iBatis로 편하게 만드려면 어케하는지 봅시다.

일단 자바 클래스부터 살펴볼까요?

모델이 되는 클래스 부터.
public class Table{
private String pid;
private String fname;
private int lname;
public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public int getLname() { return lname; } public void setLname(int lname) { this.lname = lname; }
}

DAO 클래스는 알아서 만드시고 메소드만 넣을게요.
public Object tableMultiInsert(List<Table> param ) {
return getSqlMapClientTemplate().insert("Table.tableMultiInsert", param);
}

SqlMap.xml은 아래와 같이.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Table">

<insert id="tableMultiInsert" parameterClass="java.util.List">
INSERT ALL
        <dynamic>
<iterate conjunction=" "  >
INTO t (pid, fname, lname) 
VALUES (#[].pid#, #[].fname#, #[].lname#)
</iterate>
</dynamic>
SELECT * FROM dual
</insert>

</sqlMap>

요렇게 쓰심 됩니다~~


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

[java]ZipFile 사용시 한글 깨짐 문제...해결!!

Programming 2009.03.10 21:56
아놔. 오늘 하루죙일 이 문제로 싸웠네..
http://www.google.co.kr/search?hl=ko&lr=&client=firefox-a&rls=org.mozilla:ko:official&newwindow=1&q=java+Zip+%ED%95%9C%EA%B8%80+%ED%8C%8C%EC%9D%BC%EB%AA%85&start=10&sa=N

뭐 저런 쿼리로 구글링 아무리 열심히해도 누구는 jazzlib를 쓰라하고..
누군 ZipFileInputStream을 고치라하고..-_-;;
또 누구는 ant.jar에 있는 ZipFile을 쓰라한다.-_-;;

하지만 그 누구도 정확한 답을 주지 못했다.
온갖 난리를 치다 결국 얻은 교훈은....
API를 제일 먼저 보자!!!!

org.apache.tools.zip API(클릭)


쫌..ㅠㅠ;;
This class adds support for file name encodings other than UTF-8 (which is required to work on ZIP files created by native zip tools and is able to skip a preamble like the one found in self extracting archives. Furthermore it returns instances of org.apache.tools.zip.ZipEntry instead of java.util.zip.ZipEntry.

요렇게 친절하게 적어놨자나!!!
UTF-8이 적용되지 않은 파일 압축을 풀게 해주기 위해 저런 클래스를 만들었다고!
그리고...

Constructor Summary
ZipFile(java.io.File f)
          Opens the given file for reading, assuming the platform's native encoding for file names.
ZipFile(java.io.File f, java.lang.String encoding)
          Opens the given file for reading, assuming the specified encoding for file names.
ZipFile(java.lang.String name)
          Opens the given file for reading, assuming the platform's native encoding for file names.
ZipFile(java.lang.String name, java.lang.String encoding)
          Opens the given file for reading, assuming the specified encoding for file names.

생성시 인코딩을 설정해 줄 수 있자나.ㅠㅠ;

그래서 결국 나온 코드는...
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipException;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

public class ZipFileUtil {

    public static int unZip(String orgFileName, String orgDirName) {
        return ZipFileUtil.unZip(new File(orgDirName + File.separator + orgFileName));
    }


    @SuppressWarnings("unchecked")
    public static int unZip(File fileName) {
        Enumeration entries;
        ZipFile zipFile = null;

        try {
            zipFile = new ZipFile(fileName,"EUC-KR");   // 요거 한방이면 끝인데.ㅠㅠ;

            entries = zipFile.getEntries();

            while (entries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                String orgDirName = fileName.getParent() + File.separator;
                String entryFileName = entry.getName();
                if (entry.isDirectory()) {
                    System.err.println("Extracting directory: " + entryFileName);
                    (new File(orgDirName + entryFileName)).mkdir();
                    continue;
                } else {
                    String[] tmpSplit = entryFileName.split(File.separator);
                    if (tmpSplit.length > 1) {
                        String tmpDir = "";
                        for (int i = 0; i < tmpSplit.length - 1; i++)
                            tmpDir += (tmpSplit[i] + File.separator);
                        tmpDir = orgDirName + tmpDir;
                        File tmpFile = new File(tmpDir);
                        if (!tmpFile.exists())
                            tmpFile.mkdir();
                    }
                }
                System.out.println("Extracting File: " + entryFileName);

                FileUtil.copyInputStream(zipFile.getInputStream(entry),
                        new BufferedOutputStream(new FileOutputStream(
                                orgDirName + entryFileName)));
            }

        } catch (ZipException ze) {
            ze.printStackTrace();
            return 0;
        } catch (IOException ioe) {
            ioe.printStackTrace();
            return 0;
        } finally {
            try {
                if (zipFile != null)
                    zipFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return 1;
    }

}


import java.io.*;
public class FileUtil {
   
     /**
     * 파일을 stream으로 읽어들여 대상 outputStream에 복사하는 메소드
     * @param in
     * @param out
     * @throws IOException
     */
    public static final void copyInputStream(InputStream in, OutputStream out)
            throws IOException {
        byte[] buffer = new byte[1024];
        int len;

        while ((len = in.read(buffer)) >= 0)
            out.write(buffer, 0, len);

        in.close();
        out.close();
    }
}


정말 허무한 고생했다.ㅠㅠ;

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

Sun Tech Day 2008 첫째날 후기

Programming 2008.10.15 21:36
아침 9시까지 접수를 한다는 말에 평소보다 일찍 일어났습니다.
회사 출근시간도 10신데..-_-;;;

암튼 몸 가눌 수도 없는 지하철 2호선을 타고서 힘들게 힘들게 찾아간 잠실역.
얼래? 나와보니 반대편으로 나왔네.-ㅅ-;;
Canon EOS 40D | Manual | 1/800sec | F/5.6 | 51.0mm | ISO-640
저만치 멀리 보이는 롯데호텔..-_-;;
에잇. 왜그랬을까요.;;

아무튼 다시 들어가서 3번출구로 나와서 겨우겨우 도착했습니다.

멋진 롯데호텔 안으로는 큰 현수막도 걸려 있었어요.

Canon EOS 40D | Aperture priority | 1/80sec | F/5.6 | 35.0mm | ISO-640
또한 생각보다 사람이 무쟈게 많았습니다.

2층 접수대에서 접수를 하고 나니 등록킷을 주네요
Canon EOS 40D | Manual | 1/10sec | F/5.6 | 18.0mm | ISO-640
등록킷 구성은 컨퍼런스 가이드, Sun Studio 12 DVD, OpenSolaris CD, NetBeans 6.1 DVD, 볼펜, 각종 찌라시, 설문지들입니다.

웹페이지에서 이벤트로 진행하였던 개발자의 머릿속도 있네요. 저도 저기 응모했었는데... 제껀 없군요.;;
Canon EOS 40D | Aperture priority | 1/5sec | F/5.6 | 18.0mm | ISO-640

개발자 스타킹접수도 받구 있구요.
Canon EOS 40D | Aperture priority | 1/40sec | F/5.6 | 35.0mm | ISO-640

Sun Cafe에선 음료수와 쿠키를 나눠주고 있었습니다.
이것을 먹기위한 줄이 엄청났었습니다.;;
Canon EOS 40D | Aperture priority | 1/10sec | F/5.6 | 18.0mm | ISO-640

상표는 가려주는 센스도 보여주네요.^^
쿠키는 미국에서 가져온거였습니다. Made in U.S.A
요즘 중국산 과자 때문에 나름 꼼꼼해져서.ㅋ;
Canon EOS 40D | Aperture priority | 1/15sec | F/3.5 | 18.0mm | ISO-1000

메인 홀에 들어서니 선의 캐릭터인 듀크(Duke)가 맞아주네요.
Canon EOS 40D | Manual | 1/13sec | F/5.6 | 78.0mm | ISO-640

좌,우 중앙에 무대가 하나씩 있네요. 가운데 칸막이를 쳐서 세션 발표장으로 나뉘나 봅니다.
Canon EOS 40D | Manual | 1/30sec | F/5.6 | 24.0mm | ISO-640
Canon EOS 40D | Manual | 1/25sec | F/5.6 | 21.0mm | ISO-640

자~ 이제 대단원의 막을 올리네요.
첫 시작은 축하 공연으로 시작되었는데요
이름은 모르겠습니다.
보시는데로 카메라를 판넬 위에 설치하구, 빛이 나오는 판에다가 모래를 뿌려서 모래를 지우면서 놀이를 합니다.
근데 이게..정말 환상입니다.
이런 예술 장르가 있는지 처음 알았네요.
누가 이 장르 이름을 알면 알려주셨으면 해요.
Canon EOS 40D | Manual | 1/5sec | F/5.6 | 96.0mm | ISO-1000
Canon EOS 40D | Manual | 1/8sec | F/5.6 | 42.0mm | ISO-640

아래 박스를 펼치시면 40여장의 사진이 쭈루루루루룩~ 로딩됩니다. 사양 안좋으신분들은 조심하세요.-_-;;

어떤 예술인지 볼까요?


이렇게 멋진 공연이 음악과함께 펼쳐졌습니다. 그림 한장한장이 다 뭔가를 의미하고 있었겠죠??
정말 예술의 세계는 다양하군요.

Canon EOS 40D | Manual | 1/40sec | F/5.6 | 134.0mm | ISO-1000
이 아저씨는 사회자 아저씨인데 이름을 모르겠어요.-_-;

본격적으로 오늘과 내일에 걸쳐서 소개할 내용에 대해서 간단하게 시범을 먼저 보여주셨어요.

Canon EOS 40D | Manual | 1/30sec | F/6.3 | 200.0mm | ISO-1000
위  Jim Hughes아저씨께서 나오셔서 VirtualBox에 대해서 시범을 보여주셨어요.
뭐 흔히 사용하시는 VMware와 비슷한건데요.
훨신 좋다고 하는거 같았어요. 다양한 환경에서 다양한 테스트를 진행할 수 있다고...

Canon EOS 40D | Manual | 1/25sec | F/5.6 | 78.0mm | ISO-1000

다음으로 나오신분은 Alex Peng인데요.
싱가폴에서 오셨다고 합니다.
이분은 JavaFX를 시범 보여 주셨는데요.
개발의 편의성이야 이젠 별로 신기하지 않았어요.
근데 깜작 놀랬던것은 자바 애플릿이 이제 브라우저를 벗어나서 위젯처럼 둥~ 뜰수 있게 된거였어요.
JavaFX를 통해서 개발하면 그 결과물이 웹 브라우저에서 Free해져 버리더군요!!+_+

조금만 있으면 새로운 위젯의 시대가 올것 같았어요.
아쉽게도 그 놀라운 장면은 찍질 못했네요.
Canon EOS 40D | Manual | 1/50sec | F/6.3 | 154.0mm | ISO-1000
Canon EOS 40D | Manual | 1/160sec | F/5.6 | 51.0mm | ISO-1000


이어서 한국 썬 마이크로시스템즈 수석 부사장이신 유원식 대표님께서 나오셔서 환영사를 했습니다.
이 환영사를 보면서 역시 우리나라는 넘 딱딱해..라는 생각이 들었어요.
다른 외국사람들은 발표며 설명하는 모습들이 너무나도 자연스러웠고 나무처럼 한자리에서만 발표하거나 소개하지 않았거든요.
Canon EOS 40D | Aperture priority | 1/40sec | F/6.3 | 154.0mm | ISO-1000

이어서 썬 마이크로시스템즈 소프트웨어부문 수석 부사장님이신 Rich Green이 나와서 기조 연설을 해주셨어요.
리치그린?? 부유한 녹색??ㅎㅎ 유명인의 이름을 가지고 장난치면 나쁜짓이겠죠.-_-?

Canon EOS 40D | Manual | 1/40sec | F/5.6 | 134.0mm | ISO-1000

리치그린이 다른 한명을 불러서 또 데모를 보여주셨구요. 이분은 플리커에서 태그 기반으로 입력된 단어를 검색해서 나온 결과 사진들이 눈내리듯 흘러 내리는 어플을 샘플로 보여주시면서 이런것도 쉽게 개발이 가능하다~ 라고 말씀해 주셨어요.
Canon EOS 40D | Manual | 1/50sec | F/6.3 | 200.0mm | ISO-1000

계속해서 리치그린씨가 기조연설을 하십니다.
JavaFX를 상당히 강조하더라구요.
원래 자바의 특징인 플랫폼에서 자유롭다를 다시한번 강조해 주시고~
Canon EOS 40D | Manual | 1/50sec | F/5.6 | 51.0mm | ISO-1000

이번에는 Java Technology Evangelist이신 Sang Shin님이 올라오셔서 클라우드 컴퓨팅시간에 뭘 말할지 짧게 보여주셨어요.
Zembly 서비스를 이용해서 Facebook에 자신만의 어플리케이션을 만들 수 있는데. 어플을 처음부터 다 만드는 것이 아니라 다른사람이 만들어둔 어플리 케이션을 가져다가 커스터 마이징 해서 만들 수 있다고 말씀해 주셨습니다.

Canon EOS 40D | Manual | 1/20sec | F/6.3 | 154.0mm | ISO-1000
Canon EOS 40D | Manual | 1/125sec | F/5.6 | 51.0mm | ISO-1000


또 이어서 줄줄이 소개가 나갑니다.
이번엔 프로젝트를 총괄 할 수있는 서비스를 소개했어요.
소스 버전관리부터해서 프로젝트 일정관리, 여기에 넷빈즈에 플러그인 된다는 ProjectKenai를 소개해 주네요.
Canon EOS 40D | Manual | 1/80sec | F/5.6 | 51.0mm | ISO-1000

이번엔 OpenSolaris가 있으니 이걸 써봐라고 적극 권장도 하십니다.
이것도 함 써보고 싶지만 워낙 울나라에선 리눅스나 맥 조차도 제대로 지원이 안되는 환경인지라.;;;
그냥 구경만 하려합니다.ㅋ
Canon EOS 40D | Manual | 1/80sec | F/5.6 | 51.0mm | ISO-1000

네 이렇게 해서 요약을 하면 Sun에서 제공하는 수많은 프로젝트물들이 있으니 여기에 참여하고 같이 써보고 같이 만들어 나가자고 합니다.
"우린 모두 Open 했어~!~!"
Canon EOS 40D | Manual | 1/100sec | F/5.6 | 63.0mm | ISO-1000


이렇게 기조연설까지 끝나고 이제 각각 세션에 들어가서 입맛에 맞게 들을 차례입니다.
근데 사실 트렉별 발표는 지루함의 연속이었습니다.
제가 사전지식이 너무나 부족해서 그런지도 모릅니다.

Canon EOS 40D | Manual | 1/100sec | F/6.3 | 134.0mm | ISO-1000
단지 저 듀크 인형이 너무나도 탐났었답니다.
으....ㅠㅠ;
결국은 듀크인형 얻지도 못하고 돌아왔습니다.
어떻게 하나 기부해주실분 없으신가요.ㅠㅠ?
저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

JNDI를 쓰기위한 삽질!  (1) 2008.10.28
Sun Tech Day 2008 첫째날 후기  (0) 2008.10.15
Quartz properties  (0) 2008.05.27
SpringFramework + Quartz  (0) 2008.04.28

SpringFramework + Quartz

Programming 2008.04.28 17:54

quartz를 사용하기 위해 필요한 라이브러리

  1. spring.jar - http://www.springframework.org/download
  2. quartz.jar - http://www.opensymphony.com/quartz/download.action

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass">
        <value>example.ExampleJob</value>
      </property>
      <property name="jobDataAsMap">
        <map>
          <entry key="timeout"><value>5</value></entry>
        </map>
      </property>
    </bean>
<bean id="exampleBusinessObject" class="example.ExampleBusinessObject"/>
<bean id="methodInvokingJobDetail"
  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject"><ref bean="exampleBusinessObject"/></property>
    <property name="targetMethod"><value>doIt</value></property>
    <property name="concurrent"><value>false</value></property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <property name="jobDetail">
    <!-- see the example of method invoking job above -->  
    <ref bean="methodInvokingJobDetail"/>
  </property>
  <property name="startDelay">
    <!-- 10 seconds -->
    <value>10000</value>
  </property>
  <property name="repeatInterval">
    <!-- repeat every 50 seconds -->
    <value>50000</value>
  </property>
</bean>

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail">
    <ref bean="exampleJob"/>
  </property>
  <property name="cronExpression">
    <!-- run every morning at 6 AM -->
    <value>10 * * * * ?</value>
  </property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <list>
      <ref local="cronTrigger"/>
      <ref local="simpleTrigger"/>
    </list>
  </property>
</bean>   

<!--
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

    <property name="quartzProperties">
      <props>
        <prop key="org.quartz.scheduler.instanceName">RiskienhallintaScheduler</prop>
        <prop key="org.quartz.scheduler.instanceId">instance_1</prop>
        <prop key="org.quartz.scheduler.rmi.export">false</prop>
        <prop key="org.quartz.scheduler.rmi.proxy">false</prop>
       
        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
        <prop key="org.quartz.threadPool.threadCount">3</prop>
       
        <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>

      </props>
    </property>
    <property name="triggers">
    <list>
      <ref local="cronTrigger"/>
      <ref local="simpleTrigger"/>
    </list>
  </property>
  </bean>
  -->  
</beans>


QuartzJobBean.java

package example;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class ExampleJob extends QuartzJobBean {

  private int timeout;
 
  /**
   * Setter called after the ExampleJob is instantiated
   * with the value from the JobDetailBean (5)
   */
  public void setTimeout(int timeout) {
    this.timeout = timeout;
  }
 
  protected void executeInternal(JobExecutionContext ctx)
  throws JobExecutionException {
      System.out.println("job called. timeout is : "+timeout);
  }
}
  


ExampleBusinessObject.java

package example;

public class ExampleBusinessObject {
     
  // properties and collaborators
 
  public void doIt() {
    System.out.println("doIt method called in ExampleBusinessObject class");
   
  }
}

결과

doIt method called in ExampleBusinessObject class
job called. timeout is : 5

이 글은 스프링노트에서 작성되었습니다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

Quartz properties  (0) 2008.05.27
SpringFramework + Quartz  (0) 2008.04.28
wget.java  (0) 2008.03.17
simple java wget  (0) 2008.03.17

wget.java

Programming 2008.03.17 13:21

org.apache.lenya.net
Class WGet

java.lang.Object
  extended by org.apache.lenya.net.WGet

public class WGet
extends java.lang.Object

Similar to the UNIX wget


Constructor Summary
WGet()
Creates a new WGet object.

Method Summary
java.lang.String createFileName(java.net.URL url, java.lang.String prefixSubstitute, java.lang.String substituteReplacement)
byte[] download(java.net.URL url, java.lang.String prefixSubstitute, java.lang.String substituteReplacement)
byte[] downloadUsingHttpClient(java.net.URL url, java.lang.String prefixSubstitute, java.lang.String substituteReplacement)
DOCUMENT ME!
java.lang.String escapeSlashes(java.lang.String string)
Escape slashes
java.util.List getLinks(java.net.URL url)
byte[] getResource(java.net.URL url)
static void main(java.lang.String[] args)
DOCUMENT ME!
byte[] runProcess(java.lang.String command)
void saveToFile(java.lang.String filename, byte[] bytes)
void setDirectoryPrefix(java.lang.String directory_prefix)
-P
void substitutePrefix(java.lang.String filename, java.lang.String prefixSubstitute, java.lang.String substituteReplacement)
Substitute prefix, e.g.
java.lang.String toString()
DOCUMENT ME!

Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Constructor Detail

WGet

public WGet()
Creates a new WGet object.
Method Detail

main

public static void main(java.lang.String[] args)
DOCUMENT ME!
Parameters:
args - DOCUMENT ME!

setDirectoryPrefix

public void setDirectoryPrefix(java.lang.String directory_prefix)
-P
Parameters:
directory_prefix - DOCUMENT ME!

download

public byte[] download(java.net.URL url,
                       java.lang.String prefixSubstitute,
                       java.lang.String substituteReplacement)
                throws java.io.IOException
Parameters:
url - The url of the resource to download
prefixSubstitute - Regexp which shall be replaced
substituteReplacement - Replacement of the regexp
Returns:
bytes of downloaded resource
Throws:
java.io.IOException - URL might not exist

downloadUsingHttpClient

public byte[] downloadUsingHttpClient(java.net.URL url,
                                      java.lang.String prefixSubstitute,
                                      java.lang.String substituteReplacement)
DOCUMENT ME!
Parameters:
url - DOCUMENT ME!
prefixSubstitute - DOCUMENT ME!
Returns:
DOCUMENT ME!

getResource

public byte[] getResource(java.net.URL url)
                   throws java.io.IOException
Throws:
java.io.IOException

getLinks

public java.util.List getLinks(java.net.URL url)
                        throws java.io.IOException
Throws:
java.io.IOException

substitutePrefix

public void substitutePrefix(java.lang.String filename,
                             java.lang.String prefixSubstitute,
                             java.lang.String substituteReplacement)
                      throws java.io.IOException
Substitute prefix, e.g. "/lenya/blog/live/" by "/"
Parameters:
filename - Filename
prefixSubstitute - Prefix which shall be replaced
substituteReplacement - Prefix which is going to replace the original
Throws:
java.io.IOException - DOCUMENT ME!

escapeSlashes

public java.lang.String escapeSlashes(java.lang.String string)
Escape slashes
Returns:
String with escaped slashes

toString

public java.lang.String toString()
DOCUMENT ME!
Overrides:
toString in class java.lang.Object
Returns:
DOCUMENT ME!

saveToFile

public void saveToFile(java.lang.String filename,
                       byte[] bytes)
                throws java.io.FileNotFoundException,
                       java.io.IOException
Throws:
java.io.FileNotFoundException
java.io.IOException

createFileName

public java.lang.String createFileName(java.net.URL url,
                                       java.lang.String prefixSubstitute,
                                       java.lang.String substituteReplacement)
Parameters:
url - URL of resource, which has been downloaded and shall be saved
Returns:
Absolute substituted filename

runProcess

public byte[] runProcess(java.lang.String command)
                  throws java.lang.Exception
Throws:
java.lang.Exception

Copyright © 1999-2005 Apache Software Foundation. All Rights Reserved.

소스코드

  1. /*
    * Copyright 1999-2004 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    *
    */
  2. /* $Id: WGet.java,v 1.32 2004/03/01 16:18:25 gregor Exp $ */
  3. package org.apache.lenya.net;
  4. import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.List;
  5. import org.apache.log4j.Category;

  6. /**
    * Similar to the UNIX wget
    */
    public class WGet {
    static Category log = Category.getInstance(WGet.class);
    String directory_prefix = null;
  7. /**
    * Creates a new WGet object.
    */
    public WGet() {
    directory_prefix = System.getProperty("user.dir");
    }
  8. /**
    * DOCUMENT ME!
    *
    * @param args DOCUMENT ME!
    */
    public static void main(String[] args) {
    if (args.length == 0) {
    System.out.println("Usage: org.apache.lenya.net.WGet [URL] -P/home/lenya/download");
  9. return;
    }
  10. try {
    WGet wget = new WGet();
  11. for (int i = 0; i < args.length; i++) {
    if (args[i].indexOf("-P") == 0) {
    wget.setDirectoryPrefix(args[i].substring(2)); // -P/home/lenya/download, 2: remove "-P"
    }
    }
  12. byte[] response = wget.download(new URL(args[0]), "s/\\/lenya\\/oscom//g", "");
    } catch (MalformedURLException e) {
    System.err.println(e);
    } catch (Exception e) {
    System.err.println(e);
    }
    }
  13. /**
    * -P
    *
    * @param directory_prefix DOCUMENT ME!
    */
    public void setDirectoryPrefix(String directory_prefix) {
    this.directory_prefix = directory_prefix;
    }
  14. /**
    * @param url The url of the resource to download
    * @param prefixSubstitute Regexp which shall be replaced
    * @param substituteReplacement Replacement of the regexp
    *
    * @return bytes of downloaded resource
    *
    * @throws IOException URL might not exist
    */
    public byte[] download(URL url, String prefixSubstitute, String substituteReplacement)
    throws IOException {
    log.debug(".download(): " + url + " " + prefixSubstitute + " " + substituteReplacement);
  15. return downloadUsingHttpClient(url, prefixSubstitute, substituteReplacement);
    }
  16. /**
    * DOCUMENT ME!
    *
    * @param url DOCUMENT ME!
    * @param prefixSubstitute DOCUMENT ME!
    *
    * @return DOCUMENT ME!
    */
    public byte[] downloadUsingHttpClient(URL url, String prefixSubstitute,
    String substituteReplacement) {
    log.debug(".downloadUsingHttpClient(): " + url);
  17. byte[] sresponse = null;
  18. try {
    sresponse = getResource(url);
  19. File file = new File(createFileName(url, prefixSubstitute, substituteReplacement));
  20. saveToFile(file.getAbsolutePath(), sresponse);
  21. substitutePrefix(file.getAbsolutePath(), prefixSubstitute, substituteReplacement);
    } catch (MalformedURLException e) {
    log.error(".downloadUsingHttpClient(): ", e);
    } catch (FileNotFoundException e) {
    log.error(".downloadUsingHttpClient(): ", e);
    } catch (IOException e) {
    log.error(".downloadUsingHttpClient(): ", e);
    }
  22. List links = null;
  23. try {
    links = getLinks(url);
    } catch (IOException ioe) {
    log.error(".downloadUsingHttpClient(): ", ioe);
    }
  24. if (links != null) {
    Iterator iterator = links.iterator();
  25. while (iterator.hasNext()) {
    String link = (String) iterator.next();
  26. try {
    URL child_url = new URL(org.apache.lenya.util.URLUtil.complete(url.toString(),
    link));
  27. byte[] child_sresponse = getResource(child_url);
    saveToFile(createFileName(child_url, prefixSubstitute, substituteReplacement),
    child_sresponse);
    } catch (Exception e) {
    log.error(".downloadUsingHttpClient(): ", e);
    }
    }
    }
  28. return sresponse;
    }
  29. /**
    *
    */
    public byte[] getResource(URL url) throws IOException {
    log.debug(".getResource(): " + url);
  30. HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
    InputStream in = httpConnection.getInputStream();
    byte[] buffer = new byte[1024];
    int bytes_read;
    ByteArrayOutputStream bufferOut = new ByteArrayOutputStream();
  31. while ((bytes_read = in.read(buffer)) != -1) {
    bufferOut.write(buffer, 0, bytes_read);
    }
  32. byte[] sresponse = bufferOut.toByteArray();
    httpConnection.disconnect();
  33. return sresponse;
    }
  34. /**
    *
    */
    public List getLinks(URL url) throws IOException {
    log.debug(".getLinks(): Get links from " + url);
  35. List links = null;
  36. try {
    org.apache.lenya.util.HTML html = new org.apache.lenya.util.HTML(url.toString());
    links = html.getImageSrcs(false);
    links.addAll(html.getLinkHRefs(false));
    } catch (Exception e) {
    log.error(".getLinks() Exception 423432: ", e);
    }
  37. if (links != null) {
    log.debug(".getLinks(): Number of links found: " + links.size());
    }
  38. return links;
    }
  39. /**
    * Substitute prefix, e.g. "/lenya/blog/live/" by "/"
    *
    * @param filename Filename
    * @param prefixSubstitute Prefix which shall be replaced
    * @param substituteReplacement Prefix which is going to replace the original
    *
    * @throws IOException DOCUMENT ME!
    */
    public void substitutePrefix(String filename, String prefixSubstitute, String substituteReplacement) throws IOException {
    log.debug("Replace " + prefixSubstitute + " by " + substituteReplacement);
  40. org.apache.lenya.util.SED.replaceAll(new File(filename), escapeSlashes(prefixSubstitute), escapeSlashes(substituteReplacement));
    }
  41. /**
    * Escape slashes
    *
    * @return String with escaped slashes
    */
    public String escapeSlashes(String string) {
    StringBuffer buffer = new StringBuffer("");
  42. for (int i = 0; i < string.length(); i++) {
    if (string.charAt(i) == '/') {
    buffer.append("\\/");
    } else {
    buffer.append(string.charAt(i));
    }
    }
  43. return buffer.toString();
    }
  44. /**
    * DOCUMENT ME!
    *
    * @return DOCUMENT ME!
    */
    public String toString() {
    return "-P: " + directory_prefix;
    }
  45. /**
    *
    */
    public void saveToFile(String filename, byte[] bytes)
    throws FileNotFoundException, IOException {
    File file = new File(filename);
    File parent = new File(file.getParent());
  46. if (!parent.exists()) {
    log.warn(".saveToFile(): Directory will be created: " + parent.getAbsolutePath());
    parent.mkdirs();
    }
  47. FileOutputStream out = new FileOutputStream(file.getAbsolutePath());
    out.write(bytes);
    out.close();
    }
  48. /**
    * @param url URL of resource, which has been downloaded and shall be saved
    * @return Absolute substituted filename
    */
    public String createFileName(URL url, String prefixSubstitute, String substituteReplacement) {
    File file = new File(directory_prefix + File.separator + url.getFile());
  49. return file.getAbsolutePath().replaceAll(prefixSubstitute, substituteReplacement);
    }
  50. /**
    *
    */
    public byte[] runProcess(String command) throws Exception {
    Process process = Runtime.getRuntime().exec(command);
  51. java.io.InputStream in = process.getInputStream();
    byte[] buffer = new byte[1024];
    int bytes_read = 0;
    java.io.ByteArrayOutputStream baout = new java.io.ByteArrayOutputStream();
  52. while ((bytes_read = in.read(buffer)) != -1) {
    baout.write(buffer, 0, bytes_read);
    }
  53. if (baout.toString().length() > 0) {
    log.debug(".runProcess(): %%%InputStream:START" + baout.toString() +
    "END:InputStream%%%");
    }
  54. java.io.InputStream in_e = process.getErrorStream();
    java.io.ByteArrayOutputStream baout_e = new java.io.ByteArrayOutputStream();
  55. while ((bytes_read = in_e.read(buffer)) != -1) {
    baout_e.write(buffer, 0, bytes_read);
    }
  56. if (baout_e.toString().length() > 0) {
    log.error(".runProcess(): ###ErrorStream:START" + baout_e.toString() +
    "END:ErrorStream###");
    }
  57. return baout.toByteArray();
    }
    }

이 글은 스프링노트에서 작성되었습니다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

Quartz properties  (0) 2008.05.27
SpringFramework + Quartz  (0) 2008.04.28
wget.java  (0) 2008.03.17
simple java wget  (0) 2008.03.17

simple java wget

Programming 2008.03.17 13:21

java로 wget을 구현하기 위해서 열심히 알아본결과 아래와 같은 소스를 구했다!!+_+

 

URL 객체를 이용하여 wget 구현하기! 오오~~+_+

원본글 : http://www.koders.com/java/fidB84D3CA3F6C5603C64C112C6CF0A659FF11AF014.aspx?s=wget


  1. import java.io.IOException;
    import java.net.URL;
    import java.net.URLConnection;
  2. public class Wget
    {
  3. /*
    private final static org.apache.log4j.Logger log = org.apache.log4j.Logger
    .getLogger(Wget.class.getName());
    */
  4. //
    // CONSTANTS & co
  5. /**
    * How many bytes should get read at once ?
    */
    public final static int READ_BUFFER_SIZE = 2048;
  6. public final static String BANNER
    = "OpenWFE Wget 0.0.5 - simple java wget";
  7. /**
    * After 7 unsuccessful reads on the wire, Wget will consider the download
    * as done.
    */
    public final static int MAX_RETRIES = 42;
  8. //
    // FIELDS
  9. //
    // CONSTRUCTORS
  10. //
    // METHODS
  11. //
    // STATIC METHODS
  12. /**
    * Same as wget(d, u), but verbosity is off.
    *
    * @return true if the downloading actually happened
    */
    public static boolean wget
    (final String downloadDir, final String sUrl)
    throws IOException
    {
    return wget(downloadDir, sUrl, false, false);
    }
  13. /**
    * This method is public so that applications may use it (as a library).
    *
    * @return true if the downloading actually happened
    * @throws IOException
    */
    public static boolean wget
    (String downloadDir,
    final String sUrl,
    final boolean head,
    final boolean verbose) throws IOException

    {
    if ( ! downloadDir.endsWith(java.io.File.separator))
    downloadDir += java.io.File.separator;
  14. int i = sUrl.lastIndexOf("/");
    String fileName = sUrl.substring(i+1);
    fileName = downloadDir + fileName;
  15. final java.io.File targetFile = new java.io.File(fileName);
  16. final URL url = new URL(sUrl);
  17. final URLConnection con = url.openConnection();
  18. final long remoteLastModified = con.getLastModified();
  19. if (head && targetFile.exists() && verbose)
    {
    System.out.println("..wget() local "+targetFile.lastModified());
    System.out.println("..wget() remote "+remoteLastModified);
    }
  20. if (head &&
    targetFile.exists() &&
    remoteLastModified != 0 &&
    targetFile.lastModified() >= remoteLastModified)
    {
    if (verbose)
    {
    System.out.println
    ("..wget() local file fresher than web version. "+
    "Not downloading.");
    }
  21. return false;
    }
  22. if (verbose)
    System.out.println("..wget() will save to "+fileName);
  23. int contentLength = con.getContentLength();
  24. if (verbose)
    System.out.println("..wget() contentLength is "+contentLength);
  25. if (contentLength < 0) contentLength = Integer.MAX_VALUE;
  26. final java.io.InputStream is = url.openStream();
  27. final java.io.FileOutputStream fos =
    new java.io.FileOutputStream(fileName);
  28. byte[] buffer = new byte[READ_BUFFER_SIZE];
  29. int totalRead = 0;
    int retries = 0;
  30. while (true)
    {
    int read = is.read(buffer);
  31. totalRead += read;
  32. if (verbose)
    {
    System.out.println
    ("..wget() read "+read+
    " bytes ("+totalRead+"/"+contentLength+") r"+retries);
    }
  33. if (read > 0)
    {
    fos.write(buffer, 0, read);
    fos.flush();
  34. retries = 0;
    }
  35. if (totalRead >= contentLength) break;
  36. if (read < READ_BUFFER_SIZE)
    {
    if (retries >= MAX_RETRIES)
    {
    if (verbose)
    System.out.println("..wget() giving up.");
  37. break;
    }
  38. if (read < 1)
    {
    //Thread.sleep(14);
    Thread.yield();
    retries++;
    }
    }
    }
  39. //fos.flush();
    fos.close();
    is.close();
  40. return true;
    }
  41. private static void mkdir (final String dir, final boolean verbose)
    throws Exception
    {
    final java.io.File f = new java.io.File(dir);
  42. if (f.exists() && ( ! f.isDirectory()))
    {
    throw new IllegalArgumentException
    ("dir '"+dir+"' already exists and it's not a directory.");
    }
  43. if (f.exists())
    {
    if (verbose)
    System.out.println("..wget() dir '"+dir+"' already present");
  44. return;
    }
  45. f.mkdirs();
  46. if (verbose)
    System.out.println("..wget() made dir '"+dir+"'");
    }
  47. /**
    * Reads the file behind the URL, which should be an enumeration
    * of files to further download..
    * <br>
    * example :<br>
    * <pre>
    * #
    * # download list
    *
    * . http://remote.host.tld/images/icon1.png
    * . http://remote.host.tld/content/text2.xml
    * mkdir html
    * mkdir icons
    * html http://other.remote.host.tld/index.htm
    * server http://host1/
    * . index1.htm
    * icons/ icon1.png
    * server http://host2/
    * . index2.htm
    * </pre>
    * <br>
    * 'mkdir' will create a local directory<br>
    * 'server' allows for lighter lists
    */
    public static void downloadList
    (String downloadListUrl,
    final boolean head,
    final boolean verbose)
    throws
    Exception
    {
    if (downloadListUrl.indexOf("://") < 0)
    downloadListUrl = "file:" + downloadListUrl;
  48. final URL dUrl = new URL(downloadListUrl);
  49. final URLConnection con = dUrl.openConnection();
  50. final java.io.BufferedReader br = new java.io.BufferedReader
    (new java.io.InputStreamReader(con.getInputStream()));
  51. String server = null;
  52. while (true)
    {
    String line = br.readLine();
  53. if (line == null) break;
  54. line = line.trim();
  55. if (line.length() < 1 || line.startsWith("#")) continue;
  56. if (line.startsWith("mkdir "))
    {
    mkdir(line.substring(6).trim(), verbose);
    continue;
    }
    if (line.startsWith("server"))
    {
    if (line.trim().length() == 6)
    server = null;
    else
    server = line.substring(7).trim();
  57. if (server != null && ( ! server.endsWith("/")))
    server += "/";
  58. continue;
    }
  59. final int i = line.indexOf(" ");
  60. String downloadDir = ".";
    String urlToDownload = line;
  61. if (i > -1)
    {
    downloadDir = line.substring(0, i).trim();
    urlToDownload = line.substring(i+1).trim();
    }
  62. if (server != null && urlToDownload.indexOf("://") < 1)
    {
    urlToDownload = server + urlToDownload;
    }
  63. if (verbose)
    {
    //System.out.println
    // ("..wget() >"+line+"<");
    System.out.println
    ("..wget() todir >"+downloadDir+
    "< fromURL >"+urlToDownload+"<");
    }
  64. final boolean b = wget(downloadDir, urlToDownload, head, verbose);
  65. if (b)
    System.out.println("x "+urlToDownload);
    else
    System.out.println(". "+urlToDownload);
    }
    }
  66. private static void printUsage ()
    {
    final String cmd = "java "+Wget.class.getName();
  67. System.out.println();
    System.out.println(BANNER);
    System.out.println();
    System.out.println("USAGE :");
    System.out.println();
    System.out.print (cmd);
    System.out.println(" [-d {downloadDir}] [-v] [-H] {URL}*");
    System.out.println(" [-v] [-H] -l {URL of a download list}");
    System.out.println();
    System.out.println("Wget is a java 'wget', with not much features.");
    System.out.println();
    System.out.println(" -v : verbose");
    System.out.println(" -h : prints this usage and exits");
    System.out.println(" -H : HEAD, will not download if local resource fresher than web resource");
    System.out.println(" -l : the files and their target dir are enumerated in a list");
    System.out.println(" (behind a URL or within a local file)");
    System.out.println();
  68. System.exit(-1);
    }
  69. public static void main (final String[] args)
    throws Exception
    {
    if (args.length < 1) printUsage();
  70. boolean head = false;
    boolean verbose = false;
  71. int index = 0;
  72. String downloadDir = ".";
    String downloadList = null;
  73. while (index < args.length && args[index].startsWith("-"))
    {
    if (args[index].equals("-d"))
    {
    if (args.length - index < 2) printUsage();
  74. downloadDir = args[index+1];
    index += 2;
  75. }
    else if (args[index].equals("-v"))
    {
    verbose = true;
    index++;
  76. //System.out.println("...verbose");
    }
    else if (args[index].equals("-H"))
    {
    head = true;
    index++;
    }
    else if (args[index].equals("-h"))
    {
    printUsage();
    }
    else if (args[index].equals("-l"))
    {
    downloadList = args[index+1];
    index += 2;
    }
    }
  77. if (downloadList != null)
    {
    System.out.println("...downloadList is at "+downloadList);
    downloadList(downloadList, head, verbose);
    System.exit(0);
    }
  78. //
    // do download
  79. for (int i=index; i<args.length; i++)
    {
    //System.out.println("args["+i+"] is >"+args[i]+"<");

    wget(downloadDir, args[i], head, verbose);
    System.out.println("...got "+args[i]);
    }
    }
  80. }

 

헌데!! 조금더 알아본결과...

http://lenya.apache.org/apidocs/1.2/org/apache/lenya/net/WGet.html#downloadUsingHttpClient(java.net.URL,%20java.lang.String,%20java.lang.String

Class WGet

java.lang.Object
  extended by org.apache.lenya.net.WGet

이미 Wget 라이브러리가 있었던 것이었던 것이다~

이걸 이용하면 조금더 짧게 가능하긴 하겠는데.....

그냥 위 소스를 사용해야겠다...ㅋ;;

이 글은 스프링노트에서 작성되었습니다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

Quartz properties  (0) 2008.05.27
SpringFramework + Quartz  (0) 2008.04.28
wget.java  (0) 2008.03.17
simple java wget  (0) 2008.03.17

URL Validation

Programming/DWR 2008.01.02 17:18

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<script type='text/javascript' src='/dwr/interface/util.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr/util.js'></script>
<script type='text/javascript' src='/include/common.js'></script>
<script type="text/javascript">
function chkUrl(url){
 util.chkUrl(url,chkUrlResult);
 document.getElementById("txt").innerHTML="검사중...좀만 기다려주삼.";
}
function chkUrlResult(req){
document.getElementById("txt").innerHTML="완료.";
alert("코드 : "+req);

}
</script>
</head>
<body>
URL Validation<br>
<input type="text" value="" id="a">
<button onclick="chkUrl(document.getElementById('a').value)">check</button>
<div id="txt"></div>
</body>
</html>


/*
  * URL 유효성 검사하는 모듈
  * @param String url
  * @return int code number
  */
 public int chkUrl(String chkUrl){
  int response = 404;
  URL url =null;
  URLConnection connection = null;
  try {
   System.out.println(chkUrl);
   url = new URL(chkUrl);
   connection = url.openConnection();
   
   if (connection instanceof HttpURLConnection) {
    HttpURLConnection httpConnection = (HttpURLConnection) connection;
    httpConnection.setConnectTimeout(5000);
    httpConnection.connect();
    response = httpConnection.getResponseCode();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   url = null;
   connection=null;
   return response;
  }
 }
 


※ 주의 !!

테스트 서버(외부로 IP가 노출되지 않은)에서는 제대로 작동하지 않는다....;;;
괜히 테스트 서버에서 안된다고 난리치지 말고 본섭에 적용시켜보자..ㅠ.ㅠ 잘된다..;;

신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > DWR' 카테고리의 다른 글

URL Validation  (0) 2008.01.02
DWR에서 여러개의 Converter 설정하기  (0) 2007.11.26
DWR  (0) 2007.11.26


티스토리 툴바