분류 전체보기 (199)
ººº::Development™:: (66)
::JAVA™:: (9)
::C/C++™:: (6)
::Perl/Python™:: (2)
::WEB™:: (7)
::Media™:: (2)
::Database™:: (8)
::Linux™:: (12)
::zEtc™:: (20)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
'ººº::Development™::/::JAVA™::'에 해당되는 글 9건
2008. 10. 20. 11:41
회사 프로젝트때문에 공개 프로젝트를 다운받아서 실행해보고자 하는 가운데 몇가지 api가 필요해 이러지리 찾는 가운데 jnlp.jar 파일을 도통 찾을 수 가 없었다.

이러저리 구글링하고 찾은 결과 1.2 버전까지는 다운받을 수 있는곳이 있다고 하고, 1.5 버전부터는 jdk를 설치하면 함깨 설치된다고 나와있다. 헉, 이말은 머야?
알아봤더니 jdk설치 경로에 함께 설치가 되어있다.

:: 경로보기 ::
%JDK_PATH%\sample\jnlp\servlet


위 폴더에 보면 jnlp.jar 파일이 존재한다.! 이걸 모르고 이리저리 돌아댕겼따니!ㅠㅠ;
혹 저와같은 삽질을 방지하기위해서!!^_^;

:: 이 글을 읽는 모든 분들께 오늘하루 즐겁고 행복만이 가득하기를 ::


2008. 8. 12. 17:40
이번 프로젝트에서 로그분석 엔진을 만드는 과정에서 어떻게 만들까 고민을 하다가 플러그인 형식으로 작성을 해보자 생각을 하고 프로젝트를 진행하는 과정에서 어떻게 작성한 플러그인을 메인 클래스에서 로드를 할까? 고민을 하다가 찾은 방법으로 다 필요없이 ja자체를 동적으로 로드하는 방법인다.

열마다 말보다 한번의 소스코드가 더 보기 편하다.
String   strTemp   = "mainClass";
File jarFile    = new File( "jar file path" );
URL[] urls = new URL[]{ new URL( "jar:" + file.toURL() + "!/" ) };
ClassLoader    classLoader = new URLClassLoader( urls );
Class    tempClass    = classLoader.loadClass( temp.mainClass );        // plugin class load
Object    object    = tempClass.newInstance();
Method    method    = tempClass.getMethod( "optionSet",
                                                            new Class[]{
                                                                    strTemp.getClass()
                                                            } );
method.invoke( object, strTemp );

알아 보겠는가?

모르면 그냥 일단 작성해보면서 알아보면 된다.ㅋㅋㅋ 나도 그랬으니깐( 완전 깡패.. )
다른코드는 크게 상관이 없지만 jar 파일을 로드할 때와 단순한 class파일을 로드할 때 약간의 차이가 있다.
아래는 클래스를 로드할 때의 코드이다.
File jarFile    = new File( "class package path" );      // 파일명이 아닌 폴더면만 기제
URL[] urls = new URL[]{ new URL( file.toURL() ) };

틀린점을 구분하겠는가?
jar파일을 로드할 때는  URL class에 jar를 로드한다는 것을 명시해 줘야 한다는 것이다.

그리고 로드가 정상적으로 이루어졌으면 다른 코드는 크게 상관이 없지만 로드한 클래스의 method를 호출 하는 방법을 설명하겠다.
Method 클래스는 자신이 호출 하고자 하는 method의 파라미터 type을 설정해 주고 실제 method 호출과 파라미터 전달은 method class의 invoke method를 이용해서 호출해 주면 된다.




2008. 7. 29. 17:27
매번 자바를 사용하는 프로젝트마다 느끼는 거지만 프로젝트 컴파일과 배포는 아주 귀찮은 작업이다.
이런 빌드와 배포를 자동화하기 위해 여러가지 툴이 사용되고 있지만 오래전부터 유닉스/리눅스 환경에서 사용되고있는 make와 유사한 Ant가 등장했다.

Ant는 구조적으로 make와 유사하다고 해야하나? 머 이건 잘 모르겠지만 build.xml에 빌드에 관한 설정을 하고 ant 명령을 수행하면 자동으로 빌드가 이루어지는것을 보면 make와 유사하다고 할 수 있다.

Ant는 자주 사용하는 작업인 컴파일, 압축, 복사, 메일 등의 테스크를 미리 갖추어 놓았기 때문에 make보다 간단하게 빌드 설정을 할 수 있다. - http://ant.apache.org/manual/tasksoverview.html

그럼 지금부터 Ant의 표준빌드 파일인 build.xml을 살펴보자
아래 예는 이번에 회사에서 진행된 프로젝트 build.xml이다.


위와 같이 build.xml을 해당하는 프로젝트 폴더에서 저장후 ant <target name> 식으로 입력하면 된다.

Eclipse에서는 기본적으로 Ant plugin이 설치되어 있기 때문에, Eclipse에서는 바로 실행 가능하다


2008. 7. 14. 14:16
정리 정리..정리만이 살길이다.!!
이제는 머 오전에 찾아본 코드가 생각이 안나니 원....
어쩔 수 없다 머리가 나쁘면 기록이라도 잘 해놓자!! 기록해 놨다는걸 기억하는게 더 편할거 같다는...

로그 분석때문에 코딩 중에 두 날짜의 차리를 이용해 로우데이터를 수집해야 하는 이슈때문에 만는 코드!

Date today = new Date ( );
Calendar  endDay = Calendar.getInstance ( );
endDay.setTime ( today );        // 오늘로 설정.

Calendar startDay = Calendar.getInstance ( );
startDay.set ( 2000, 3, 12 );     // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.

int count = 0;
while ( startDay ( endDay ) )
{
    count++;
    startDay.add ( Calendar.DATE, 1 ); // 다음날로 바뀜

    System.out.println ( startDay.get ( Calendar.YEAR ) + "년 " + ( startDay.get ( Calendar.MONTH ) + 1 ) + "월 " + startDay.get ( Calendar.DATE ) + "일" );
}

System.out.println ( "기준일로부터 " + count + "일이 지났습니다." );


그냥 간단하게 이리저리 찾아서 만든 코드로 유의해야 할 사항은 Calendar를 Set할 때 Month의 Index가 0부터 시작한다는걸 유념해서 원하는 월의 1을 빼서 set 해줘야 한다.


2008. 7. 2. 10:36
이런 맨날 듣고도 머릿속에서 지워저버리는 이 현상!
아주 죽을 맞이다.!!

이걸 자바로 카테고리에 넣어야 할지는 모르겠지만
우짜든!!

페도라에 설치된 톰켓이 실행될때 스텍 사이즈를 조절해 줘야 하는 경우가 생기는데
이때 스텍 사이즈는

/etc/sysconfig/tomcat5 파일에서 조절해 주면된다.!

내 설정은  JAVA_OPTS="$JAVA_OPTS -Xss10m" 이렇게 되있다!ㅋㅋㅋ


2008. 6. 24. 12:33

요즘 여기저기 블로그의 RSS 피드를 긇어 모으고있다
그냥 막무가네로 긇어 모아서 쭉 읽어보면서 괜찮은 글들은 스크랩하고 있는데!

오늘은 Swing개발자라고 하는 Ben씨가 만든 새로운 GUI 툴킷이라고 합니다.

한번씩 봐보시길!!!



2008. 3. 28. 17:42

이제는 정리좀 하면서 살자..ㅜㅜ;

숫자형식에서 1000단위로 ,로 구분하는 스크립트

function commify( n )
{
 var reg = /(^[+-]?\d+)(\d{3})/;   // 정규식
 n += '';                          // 숫자를 문자열로 변환

 while( reg.test( n ) )
  n = n.replace( reg, '$1' + ',' + '$2' );

 return n;
}


하나씩 정리하면서 문서화 하기 연습!!!


2007. 6. 20. 18:18

Strus 설치하기

1. Struts를 Binary 버젼 다운 받습니다. (현대 Struts 1.2.4 버젼까지 나와있습니다.)

2. zip 파일의 압축을 풉니다.

 ※ lib 폴더에는 Struts를 사용하기 위한 struts.jar 파일이 있고,

     webapps 폴더에는 5개의 sample war 파일이 있습니다.

 ※ contrib 은 Struts의 tag library 들이 있습니다.



3. 위에서 보이고 있는 lib 폴더 하위에 있는 모든 *.jar 파일을 Struts를 사용할 웹프로젝트의 WEB-INF/lib 폴더에 복사후 Struts를 사용하면 된다.



2007. 4. 17. 17:27
CVS형식의 파일로 다운로드 받기

이번 프로젝트 기간에 디비에서 Select된 내용중 원하는 내용만 사용자의 Local 컴퓨터로 다운로드 가능한 기능이 필요하게 되었다.

방식은 CSV로 다운로드 하는 방식이고
CSV로 만들어질 내용을 문자열로 만들고 해당하는 문자열을
Http Header를 이용해 다운로드 가능하도록 만들었다. 아니 정확하게 말하면 인터넷에서 찾았당~~ㅋㅋㅋ

처음으로 CVS로 만들 문자열을 만들고
for( int i = 0; i < string.length; i++ )
{
     strCsv = i + "aaa, bbb, ccc, ddd";
}

이제 httpheader를 통해 저장해주는 부분이다.
먼저 IE와 구분을 짖기 위해서..
// Http Header 설정(브라우저에 따라 달리...)
if( request.getHeader( "User-Agent" ).indexOf( "MSIE 5.5" ) != -1 )
{
  response.setHeader( "Content-Type", "doesn/matter;" );
  response.setHeader( "Content-Disposition", "filename=" + strFileName );
}
else
{
  response.setHeader( "Content-Type", "application/octet-stream;" );
  response.setHeader( "Content-Disposition", "attachment;filename=" + strFileName );
}

그리고 클라이언트 설정을 해준다.
response.setHeader( "cache-control", "no-cache" );
response.setHeader( "expires", "0" );
response.setHeader( "pragma", "no-cache" );

마지막으로 처음에 만들어준 CSV형식의 문자열을 화면에 뿌려준다. 물론 이때 뿌려지는 화면은 히든 페이지로 만들어 놓는 편이 화면 UI상 문제가 없을 것이다.
out.print( tempSave );   // 저장될 내용을 화면에 출력
out.flush();     // 출력된 내용을 적용함


위와 같은 내용을 변경하여 자신에기 필요한 부분에 넣어 주면 될 것이다.


prev"" #1 next