발생일: 2009.08.07 문제: 현재 클래스와 같은 패키지(폴더)에 있는 파일을 읽어오려고 한다. 상대 경로로 접근해서 가져오려고 하는데, new File("./test.txt"); 와 같이 상대 경로로 접근하니 정상적으로 불러지지 않는다. 해결책: 자바의 File 에서 사용되는 상대 경로의 기준은는 일반적으로 우리가 생각하는 것처럼 해당 클래스 파일이 있는 위치가 아니라, 클래스 파일이 포함되어 있는 프로젝트 폴더이다. 예를 들어, 클래스를 하나 생성하고 File path = new File("."); System.out.println(path.getAbsolutePath()); //--> 프로젝트 폴더의 주소가 출력됨 위와 같이 현재 클래스 위치에서 폴더를 생성하여 절대 주소를 출력해보면 프로젝트..
발생일: 2009.07.30 문제: 친구 홍이 얘기한다. apache commons의 BeanUtils 에서 getSimpleProperty 메서드의 소스를 보면... -- BeanUtils class public static String getSimpleProperty(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { return BeanUtilsBean.getInstance().getSimpleProperty(bean, name); } 근데 여기에서 왜 getSimpleProperty 를 static 으로 선언하지 않고, 굳이 BeanUtilsBean을 생성해..
발생일: 2009.07.02 문제: 친구의 작업을 도와주는 중, MultipartRequest로 구현된 파일 업로드 페이지가 나왔다. 오레일리에서 제공하는 라이브러리인 듯 싶은데,.. MultipartRequest라...? 해결책: 1. MultipartRequest에 대한 기본적인 내용에 대한 블로그를 참고. 2. 좀 더 실질적이고 자세한 내용들에 대해 쉽게 설명해 놓은 블로그도 있다. 3. MultipartRequest API 도 참고하자.
발생일: 2009.06.12 문제: 시스템에 구현되어 있는 엑셀 다운로더 기능을 수정할 일이 생겼다. jsp에 html table로 생성해서 contentType과 response의 header를 설정해주는 방법은 알고 있었지만, HSSFWorkbook 과 HSSFSheet 는 뭔지 잘 모르겠다. 이게 뭘꼬..? 해결책: apache의 POI라는 거란다. (API 참조) HSSF의 뜻이 재밌다.^^ 같이 검색해 보던 중, 자바에서 Excel로 출력하는 여러가지 방법에 대해 정리해 둔 사이트가 있다. 훑어보자.
발생일: 2009.06.12 문제: 키워드를 입력하면 한글/영문 여부를 구분해서 각각 다른 액션을 수행하려고 한다. 한글과 영문이 섞여있을 경우엔 한글로 파악하며, 샘플 데이터는 아래와 같다. 'abc' : 영문 'abc 울랄라' : 한글 ' abc _ def -- abc' : 영문 '울라라' : 한글 '울랄라A' : 한글 키워드에 특수문자가 포함될 수 있지만 구분 없이 단지 한글과 영문 여부를 판단하려고 한다. 하여~ 좀 간단히 깔끔하게 해결하고자, apache의 StringUtils의 isAlphanumericSpace() 메서드를 사용해보려고 했으나~ 여기서의 알파벳은 한글도 포함하는 모양이다. 아마 내부적으론 \w 와 \s 를 정규식으로 체크하는 모양이다. for 문으로 캐릭터 체킹을 하는 예제도..
발생일: 2009.06.09 문제: 전체 목록에서 특정 배열에 담겨있는 값을 찾아 표시하기 위해 Arrays.binarySearch를 사용하는 코드가 있다. 헌데, 정상적으로 값이 들어가 있음에도 불구하고 그 값을 찾지 못한다. 예) 아래와 같이 리스트와 배열이 있다. List total : 전체 목록. 이 리스트 안의 값은 1부터 30까지 존재한다 String[] spec : 특정 목록. 이 배열 안에는 (1, 5, 7, 25) 가 순서대로 들어있다. for (String s : total) { if (Arrays.binarySearch(spec, s) > -1) } System.out.println(s); // spec 안에 있는 값일 경우 print } } 위와 같은 코드를 실행시켰을 때, 1, 5..
발생일: 2009.05.26 문제: 웹어플리케이션 백그라운드에서 정기적으로 컨텍스트의 정보를 가져와 DB에 업데이트하는 Daemon Thread가 돌고 있다. (어플리케이션의 백그라운드에서 작동하는 Daemon Thread 참조) 헌데, 로컬에서 작업 중 동적으로 컴파일 하게 되면, Daemon Thread에서 호출하는 매니저 클래스가 없다며 NoClassDefFoundError 가 발생한다. classpath가 잘못된 건 아니고, 또한 분명히 class는 정의되어 있는데 말이다. 해결책: 클래스 로더가 해당 클래스를 로딩할 때에 class 파일을 찾을 수 없다는 예외다. 보통은 클래스 패스가 제대로 정의되어 있지 않을 때 발생한다. (자바서비스넷의 ClassNotFoundException 과 NoCla..
발생일: 2009.04.30 문제: parameter로 가져온 "true" 값을 boolean 으로 변경하려고 한다. 하여, Boolean.getBoolean("true") 를 적용했는데, true가 아니라 false가 리턴된다. 해결책: Boolean.getBoolean(name) 은 시스템 프로퍼티에 존재하는 name 의 값이 "true" 일 경우에만 true를 리턴한다. 지금 같은 경우에는 Boolean.valueOf("true").booleanValue() 를 사용하는 게 맞겠다. 같은 문제에 대해 명확하게 설명해 둔 블로그가 있다.
발생일: 2009.04.30 문제: double 값을 보이는 것과 같이 정상적으로 출력하고 싶다. 예를 들어, double a = 2856234253526.2342395; 와 같은 값을 system.out으로 출력하면 2.8562342535262344E12 와 같이 나온다. 보이는 것과 같이 출력하고 싶다. 해결책: java.text.NumberFormat 또는 java.text.DecimalFormat 을 사용하면 된다. (NumberFormat API 와 DecimalFormat API 를 참고하자.) NumberFormat 은 지역별, 통화별로 숫자를 포맷팅할 수 있으며, DecimalFormat은 NumberFormat을 상속받은 것으로 패턴을 정해주거나 하는 등의 더 상세한 설정을 할 수 있다...
발생일: 2009.04.16 문제: 발송한 메일을 몇 명이나 개봉했는지 알기 위해, 메일 내에 사이즈가 0인 이미지 태그를 두어 개봉 횟수를 업데이트하는 서블릿을 호출하도록 했다. 해당 서블릿에서는 메일 아이디를 패러미터로 받아, 매 요청마다 아이디에 해당하는 데이터를 찾아 디비에서 카운트를 1씩 업데이트 해주고 있었다. 문제는 아침 뉴스 메일을 발송하면서부터 발생했다. 많은 사용자가 동시에 메일을 개봉하면서 해당 서블릿에 갑자기 많은 요청이 들어오게 된 것이다. 매 요청마다 디비에 접속해서 업데이트 하다보니 동시 요청에 대해 조금씩 지연처리되기 시작했고, 급기야는 디비 쓰레드풀이 꽉 차서 시스템 자체가 멎어버리는 현상이 발생했다. 해결책: 개봉 횟수를 업데이트하는 서블릿에 요청이 들어왔을 때에 바로 디..