'IT/java'에 해당되는 글 10건

  1. 2012.01.03 java bat 파일 만들어서 실행시키기 by 즐건세상
  2. 2010.02.06 이클립스 톰캣에서 jndi 를 이용한 DBCP 설정 by 즐건세상 1
  3. 2009.05.07 log4j 보다 slf4j by 즐건세상
  4. 2008.11.19 물리적 경로 얻어오기 by 즐건세상
  5. 2008.07.08 log4j 설정 by 즐건세상
  6. 2008.07.02 ibatis 로그 레벨 조정 by 즐건세상
  7. 2008.02.13 자바 charset 설정 by 즐건세상
  8. 2007.11.07 log4j tomcat 설정 by 즐건세상
  9. 2007.09.19 문자 인코딩에 관한 애기 by 즐건세상
  10. 2007.07.11 자바 정규표현식 by 즐건세상

@ECHO OFF

SET ROOT_PATH=D:\test_java

SET BIN_HOME=%ROOT_PATH%/classes

SET LIB_HOME=%ROOT_PATH%/lib

SET CLASSPATH=%BIN_HOME%;%LIB_HOME%/commons-beanutils.jar;%LIB_HOME%/commons-collections-3.2.jar;%LIB_HOME%/commons-configuration-1.5.jar;%LIB_HOME%/commons-digester-1.8.jar;%LIB_HOME%/commons-io-1.4.jar;%LIB_HOME%/commons-lang-2.3.jar;%LIB_HOME%/commons-logging-1.1.jar;%LIB_HOME%/log4j-1.2.14.jar;%LIB_HOME%/lucene-analyzers-2.4.0.jar;%LIB_HOME%/lucene-core-2.4.0.jar;%LIB_HOME%/ibatis-2.3.0.677.jar;%LIB_HOME%/jakarta-oro-2.0.8.jar;%LIB_HOME%/ojdbc14_10.2.0.2.jar;

d:

cd %ROOT_PATH%\bin

ECHO java kr.co.setong.test.Test %1
java kr.co.setong.test.Test %1
===============================================================
환경변수들을 그대로 물고 들어가지 못해서.. 그런 현상이 발생하는 걸 본 적이 있네요.. 

일단.. 현재 path에서.. .bat 파일 내에 정의된 명령어가 그대로 먹는가?

그리고.. classpath 등이 .bat 파일 실행 환경에서도 그대로 유지가 되는가? 하는 문제들.. 

해결을 하기 위해서는.. java a.java -d .
이렇게 되어 있는 것도.. /usr/java15/bin/java a.java -d .
이런 식으로 절대경로를 써 주는 것도 방법입니다. 

그리고 classpath도.. 상단에서 미리 정의를 내려주는게 좋은 방법이죠^^;;

근데.. 이게 맞을지는 저도 장담을 못하겠네요..
Posted by 즐건세상
l
톰캣에서 제공해주는 DBCP 를 얻어오는 방법에는 global 적인방법과 각 web application에서 설정하는 방법이 있다.
이클립스에서 톰캣 서버를 설정하게 되면 아래 그림처럼 Servers라는 프로젝트가 하나 생기게 된다. Servers라는 프로젝트에 보면 아래 그림과 같이 server.xml 도 보이고 web.xml도 보인다. 여기 있는 파일을 변경한다고 해서 톰캣에 있는 파일이 변경되지는 않는다.

■ 각 web application에서 설정
1. server.xml, web.xml 설정
위의 그림에서 server.xml 파일에서 아래와 같은 내용을 추가한다. mysql 접속용이다.
 <Context docBase="DBTest" path="/DBTest" reloadable="true" source="org.eclipse.jst.j2ee.server:DBTest">
       <Resource name="jdbc/mysql_board" auth="Container"  type="javax.sql.DataSource"
           driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test"
           username="root" password="password"
           maxActive="20" maxIdle="10" maxWait="-1"
       />
다음으로 각 web application(프로젝트) 폴더의 web.xml 에 아래와 같은 내용을 추가한다.
<resource-ref>
        <description>board db Test</description>
        <res-ref-name>jdbc/mysql_board</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

2. context.xml 설정
각 web application(프로젝트) 폴더의 META-INF 폴더에 context.xml 파일을 생성한후
아래의 내용을 추가한다.
<?xml version="1.0" encoding="UTF-8"?>

<Context>
   <Resource name="jdbc/mysqlLocal" auth="Container"
       type="javax.sql.DataSource"
       username="root" password="password"
       driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://localhost:3306/test" maxActive="20"/>            
</Context>

  ■ 전역설정
server.xml 의 <GlobalNamingResources> 엘리먼트의 자식엘리먼트로 아래의 내용을 추가한다.
 <Resource name="jdbc/mysql_global" auth="Container"  type="javax.sql.DataSource"
           driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test"
           username="root" password="password"
           maxActive="20" maxIdle="10" maxWait="-1"    />

다음으로,
각 web application(프로젝트) 폴더의 META-INF 폴더에 context.xml 파일을 생성한후
아래의 내용을 추가한다.
<?xml version="1.0" encoding="UTF-8"?>

<Context>
<ResourceLink
            name="jdbc/mysql_global"
            global="jdbc/mysql_global"
            type="javax.sql.DataSource"
          />     
</Context>


Posted by 즐건세상
l

log4j 보다 slf4j

IT/java 2009. 5. 7. 13:50
http://www.slf4j.org/manual.html
Posted by 즐건세상
l
String path = this.getClass().getResource("/").getPath();
Posted by 즐건세상
l

log4j 설정

IT/java 2008. 7. 8. 23:49
서버 프로그래밍을 하면서 에러를 찾기 위해서 이클립스에서 디버깅을 하면서 찾기에는 어려움이 많다. 여러건의

 request 가 동시에 발생할 경우에 에러가 발생하게 되는 경우에는 이클립스 디버깅 화면에서 버그를 찾기는 쉽지

가 않다. 이럴 때는 가능한 많은 로그를 남겨서 디버깅을 해보는게 더 효과적일 수 있다.

log4j 매뉴얼만 가지고는 log4j를 제대로 사용하기에는 좀 어려운 부분이 없지 않아 있는거 같다. 나도 처음에는

로그 파일 하나에 모든 로그를 남기고 로그 레벨 조정하는것도 별로 관심이 없었다.

그런데 실제 프로젝트를 하다보면 업무별로 로그를 남겨야 하는 경우도 많고 심한 경우에는 사용자 별로 로그를 남

겨야 하는 경우도 발생할 수 있다. log4j에서는 이 모든것을 지원해준다. 그러나 log4j/doc에 있는 문서만 바서는 이

런 기능들을 활용하기에는 어려울거 같다. 문서에는 Logger barlogger = Logger.getLogger("com.foo.Bar"); 와 같은 문장들이 많다. 아니면 Logger.getLogger(Bar.class); 이런 문장들이 많다. 이렇게 사용할 경우에는 업무별로 로그를 남기기는 어렵다. 물론 패키지별로 독립성이 띄어날 경우에는 문제가 없지만, 그런 경우는 거의 없을것이다. 그럼, 어떻게 하느냐 하면 만약 로그인과 관련된 업무라면 Logger logger = Logger.getLogger("Login");  과 같은 형태로 쓸 수도 있다. 꼭 클래스의 이름일 필요는 없다는 것이다. 물론 이렇게 하기 위해서는 log4j 프로퍼티 파일을 이에 맞게 기술되어 있어야 한다. 프로퍼티 파일을 예를 들어보면,

log4j.rootCategory=DEBUG, console, totallog

log4j.logger.login_log=DEBUG, login

log4j.appender.totallog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.totallog.File=${logging.path}/logs/total.log
log4j.appender.totallog.DatePattern='.'yyyy-MM-dd
log4j.appender.totallog.layout=org.apache.log4j.PatternLayout
log4j.appender.totallog.layout.ConversionPattern=%d{HH:mm:ss} %5p (%C{2} - %M:%L) - %m%n

log4j.appender.login=org.apache.log4j.DailyRollingFileAppender
log4j.appender.login.File=${logging.path}/logs/login.log
log4j.appender.login.DatePattern='.'yyyy-MM-dd
log4j.appender.login.layout=org.apache.log4j.PatternLayout
log4j.appender.login.layout.ConversionPattern=%d{HH:mm:ss} %5p (%C{2} - %M:%L) - %m%n

이런 식의 프로퍼티 파일을 기술한다면 Logger logger = Logger.getLogger("login"); 와 같이 사용할 수가 있다.
프로퍼티 파일을 보면 rootcategory 에 totallog가 존재하고 그 자식의 로그로 login 로그가 존재하게 된다.
totallog 에는 getLogger() 해서 사용하는 모든 로그가 쌓이게 되고, login.log 파일에는 getLogger("login") 사용한 로그만 남게 된다.
log를 남길 파일 위치를 기술하는 log4j.appender.login.File 값으로 {logging.path} 가 있는데 이 값은 System.getProperty("loggin.path") 해서 가지고 오는 값이다. 사용자가 System.setProperty("logging.path","c:\abc") 이런식으로 설정해 주면 된다는 것이다. 이렇게 하는 이유는 유연성을 높이기 위해서인데 절대 경로를 지정할 경우 디플로이 되는 서버가 바뀐다거나 했을 경우 프로퍼티 파일을 수정하지 않더라도 에러없이 돌아가게 하기 위해서이다. 주로 톰캣이나 다른 웹 서버에 디플로이 할때 contextroot path를 코드로 얻을 수가 있다. 이 값을 System 프로퍼티에 할당해 주게 되면 프로젝트를 새로 디플로이하더라도 프로퍼티 파일을 수정하지 않아도 된다.
로그를 남기는 패턴은 http://www.vipan.com/htdocs/log4jhelp.html 여기로 가면 잘 설명되어 있으므로 참고하기 바란다.



Posted by 즐건세상
l
ibatis를 사용하다 보면 로그가 많이 보이는데 안보이게 하고 싶으면
로그레벨을 다음과 같이 조정하면 된다.

log4j 설정파일이 프로퍼티 파일로 되어 있는 경우는 아래와 같이..
log4j.logger.com.ibatis=INFO
log4j.logger.java.sql=INFO

xml로 되어 있는 경우는
   <category name="com.ibatis">
<priority value="debug" />
</category>

<category name="java.sql">
<priority value="debug" />
</category>

Posted by 즐건세상
l

자바 charset 설정

IT/java 2008. 2. 13. 17:03
String str ="한글";
byte[] b1 = str.getByte();
byte[] b2 = str.getByte("UTF-8");

Posted by 즐건세상
l

log4j tomcat 설정

IT/java 2007. 11. 7. 21:14
log4j를 사용하면 좋은 이유를 몇가지 들자면,
1) 성능 문제
  로그를 파일로 남기는 경우 파일 사이즈의 제한을 작게두게되면 파일에 대한 I/O가 자주 발생해서 성능을 떨어뜨리는 일이 발생하는 경우가 있다.
2) 로그 레벨 조정
  로그레벨을 실행중에 동적으로 조정이 가능하다. 로그레벨이 info 이상인 경우만 로그에 남게 하겠다던지, error 이상일 경우만 남겠다던지 이런 조정이 가능하다.
3) 응용 기능
  fatal error 가 났다던지 아님 로그 리포트 같은걸 메일로 받고 싶은 경우 로그 설정파일을 설정해주면 가능하다.

log4j 는 크게 3개의 component로 구성되어 있다.


log4j:WARN No appenders could be found for logger (org.apache.catalina.startup.Embedded).
log4j:WARN Please initialize the log4j system properly.

Posted by 즐건세상
l
인코딩에 관한 애기를 하고자한다.
1. 인코딩이란 무엇인가?
    컴퓨터가 알고있는 문자는 0,1 이 두가지 밖에 없다. 그런데 사람이 쓰는 문자는 영어, 한글, 일본어 등...
    엄청 많다. 그러면 사람이 쓰는 문자를 컴퓨터가 알아먹게 하기위해서 0, 1로 바꿔줘야된다.
    그 바꿔주는 규칙을 정의해놓은것이 바로 인코딩이다. 인코딩중에 대표적인게 ascii 코드다.  ascii 코드는 http://www.asciitable.com/ 여기서 확인가능하다. 그런데 이 ascii 코드는 1Byte로 구성되어 있다. 1Byte로는 각국의 언어를 다 담을수 없어서 2Byte짜리 Unicode를 만들어 냈다. 어..그런데 ascii로도 한글이 표현이 가능한데?
물론 가능하다.. 그렇지만 다른 나라에서는 호환되게 사용할수가 없다. 세계 각국의 언어를 다 담을려면 1Byte로는 모자르기 때문에 2Byte로된 Unicode를 만들어 낸것이다. 이 유니코드에 대한 애기는 하지 않겠다.

2. 보여지는 글자와 컴퓨터가 인식하는 문자는 다르다
 UltraEdit에서 ascii 코드로 문자를 입력하는 경우와 unicode로 문자를 입력하는 경우 어떻게 변환되는지 보도록하자.
사용자 삽입 이미지

ascii 코드


사용자 삽입 이미지
위에 그림은 ascii 변환되었을 때의 값이고 아래 그림은 unicode로 변환되었을 때의 값이다.
같은 문자를 입력했지만 인코딩 방식에 따라서 변환되는 값은 달라지게된다.
보통 문자가 깨지는 경우는 여러가지 경우가 있겠지만 이 인코딩이 안맞아서 그런것이 대부분이다.

3. 자바에서 인코딩을 변환하는 방법
package encodingTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class MyEncoding {
   
    public void convertCharSet(String fromCharset, String toCharset){
        InputStreamReader iReader = null;
        OutputStreamWriter oWriter = null;
        try {
            String asciiPath = "files/encoding/asciiSample.txt";
            String outUnicodePath = "files/encoding/asciiSample_out.txt";
            String inputEncoding = "US-ASCII";
            String outputEncoding = "UTF-16LE";
            iReader = new InputStreamReader(
                    new FileInputStream(asciiPath), inputEncoding);
            oWriter = new OutputStreamWriter(
                    new FileOutputStream(outUnicodePath), outputEncoding);
            int c;
            char[] charBuf = new char[1024];
            while((c = iReader.read(charBuf)) != -1){
                oWriter.write(charBuf, 0, c);
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                iReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                oWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

Posted by 즐건세상
l

자바 정규표현식

IT/java 2007. 7. 11. 23:30

정규표현식에 관한 애기를 해보고자 한다.
정규표현식의 전반적인 내용에 관해서는 자바 튜토리얼(http://java.sun.com/docs/books/tutorial/essential/regex/index.html)
을 참고하시길..
여기서는 몇일동안 안 풀렸던 문제에 대해서 이야기 하고자 한다.
문제는 html 문서에서 <script ...>....</scirpt> 태그를 제거하는 문제다..

처음에는 사용한 정규표현식은 (<script.*>)([\wW]*)(</script>) 이다.

이 정규표현식을 사용할 경우 <script>....</script> <table>...</table>  <script>....</script>

가운데 있는 table 태그까지 삭제 되게 된다..

정확한 개념은 추후에 더 문서를 알아바야 겠지만.. greedy와 관련된것 같다..

간단한 예를 들어 보면

주어진 스트링이 fooooo 이고 정규 표현식이.. ".o*"일 경우 일치하는 패턴은 f 다음의 o 가 아니고 oooo 이 일치하게 된다.

이는 정규표현식이 패턴을 찾을 때 최대로 일치하는것(greedy)을 찾기 때문이다..

최소로 일치하는것(non-greedy)을 찾고 싶을 때에는 ".o+?" 이 정규표현식을 사용하면 해결할 수 있다..

script 태그에서도 적용하게 되면 (<script.*>)([\wW]*?)(</script>) 이 표현식을 사용하게 되면 scrip 태그를 제거할 수 있다.


별로 관계 없는 내요일수 있지만..


원래 정규표현식을 공부하게 된 이유가 html -> text 바꾸는 작업이 필요했기 때문이다.


하나 팁 같은걸.. 적어보자면..


일치하는 패턴을 찾기 위해서 작은 부분부터 조금씩 테스트를 해보면서 전체를 늘려가는 식으로 일치하는 패턴을 찾는 방법이다.


즉... 위의 script 태그를 제거하기 위해서..


<script> 태그와 일치하는 패턴을 먼저 찾아보고... 조금씩 늘려가면서 일치하는 패턴을 찾는다..


이렇게도 해보고 저렇게도 해보면서 이유를 생각하다 보면 조금씩 알아가지 않을까 생각된다..


정확한 개념을 알기 위해서는 문서를 보는것도 잊지말아야 겠지만..








 

Posted by 즐건세상
l