본문 바로가기

프로그래밍/Java

(18)
JSP contentType charset=UTF-8 전역 설정 방법 (JSP 한글 깨짐 혹은 물음표 ??? 오류) 버그 Sitemesh를 구성하고 레이아웃을 구성하는데 헤더와 LNB의의 한글이 깨져서 나왔다. 그런데 콘텐츠 영역은 정상이길래 파일을 비교해보니 한글이 깨지는 JSP파일은 인코딩 설정이 빠져 있었다. JSP 파일을 생성하면 보통 IDE에서 위와 같은 설정을 자동으로 추가해준다. 그래서 항상 별 신경을 쓰지 않고 있었다. 전역으로 설정하는 방법이 있을까 찾아보니 당연하게도 그리고 다행히도 있었다. 해결 간단하다. web.xml에 다음 내용을 추가해주면 된다. *.jsp UTF-8 이제 페이지마다 인코딩 설정을 신경쓰지 않아도 된다. 오늘도 귀찮은 일 하나 해결했다.
쿠키에 저장한 한글이 깨질 때 keywords: java / web / cookie / spring 오류 회원가입을 구현하면서 Map을 통채로 JSON 문자열로로 바꿔 쿠키에 저장했다. 그런데 꺼내어 보니 한글이 모두 ???로 나온다. 내 마음이 ???다. 처음에는 Jackson ObjectMapper 설정에 문제가 있는 줄 알고 프로젝트에서 쓰는 JSONUtil을 건드리다가, 오후 잠을 깨고 한스텝씩 디버깅을 찍어 보니 JSON은 문제가 없었다. 원인 점심 많이 먹고 오후에 졸린 내가 문제 비영어권에서 태어난 것 한글은 URL Encoding 해서 저장해야 함. 해결 저장할 때는 URLEncoder.encode(...) 꺼낼 때는 URLDecoder.decode(...) 코드 참고. CookieUtils는 임의로 쓴 것이니 프로젝트..
맥/MacOS - CannotGetJdbcConnectionException 로케일을 인식할 수 없습니다 맥OS 업데이트 후 갑자기 ajax 요청에서 오류가 발생해서 보니 로케일을 인식할 수 없다는 오류가 나있다. 오류 CannotGetJdbcConnectionException 어쩌고저쩌고 로케일을 인식할 수 없습니다. 해결 1. VM 옵션 추가 -Duser.language=ko -Duser.country=KR 2. 언어 및 지역 변경 맥 시스템 환경설정 -> 언어 및 지역 들어가서 다른 나라로 바꿨다가 다시 대한민국으로 해주면 된다. 매번 OS 업데이트 할 때마다 이런다. 엄청 오래된 버그다. 애플이 미국놈들이라서 이런건 신경 안쓰는 건지 ㅜㅜ 그럼에도 불구하고 나는 애플을 쓴다. 미제 앞잡이다......
List<?>를 사이즈별 List<List<?>> 로 나누기 (Lists.partition) 문제 List에 PK 값이 담겨 있다. 오라클 WHERE 절에서 IN (...) 값으로 사용하려고 했으나, IN(...)에는 최대 1,000개까지 파라미터가 들어갈 수 있다고 한다. 그래서 1,000개씩 나누어서 여러번 호출했다. 검색을 해보니 DB에 함수를 만들고 어쩌고저쩌고 해서 가능하다고 한다. 하지만 이 데이터베이스에 나는 select 말고는 아무 권한이 없다. 그래서 그냥 여러번 호출했다. 해결 Lists.partition(list, n) Guava 라이브러리를 사용하면 된다고 한다. 하지만 내부망이라서 좌절했다. 그래도 혹시나 싶어서 Lists. 까지 입력하고 자동완성을 켜봤더니 뭔가 나온다! 놀랍게도 이 프로젝트 라이브러리에 guava-21.0이 추가되어 있었다. List lists = Li..
Java try-with-resources FileOutputStream을 쓸 일이 생겼다. 다른 분이 만들어 놓은 유틸 클래스가 있어서 가져다 쓰려고 봤는데, 언뜻 보니 close()가 없었다. 우선 내가 알던 고전적인 코드는 다음과 같이 작성한다. FileOutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(mFile.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }자원을 사용했으면 반드시 close()를 호출한다고 배웠다. ..
Spring Boot, 파일 업로드 용량 설정 FileUploadBase$SizeLimitExceededException Spring Boot 에서 파일 업로드를 하다가 오류가 나서 콘솔을 보니 용량 제한이 있었다. 프로필에서 maxFileSize를 설정해주면 되는데, 주의할 점은 maxRequestSize도 설정이 필요하다. Spring Boot 1.3.x and earlier multipart.maxFileSize multipart.maxRequestSize Spring Boot 1.4.x and 1.5.x spring.http.multipart.maxFileSize spring.http.multipart.maxRequestSize Spring Boot 2.x spring.servlet.multipart.maxFileSize spring.serv..
Tomcat + MySQL에서 [java.sql.SQLException: Already closed.] 발생 java.sql.SQLException: Already closed. 환경Tomcat 6.x, MySQL 5.3.x, Spring Framework 3.2.9 문제새벽 5시마다 배치작업을 하면서 조회 쿼리를 한 번 실행하는데, 어떤 날은 제대로 되고 어떤 날은 실패했다.로그를 보니 아래와 같다. 2017-09-19 05:10:00,004 DEBUG [org.springframework.orm.ibatis.SqlMapClientTemplate] Could not close JDBC Connection java.sql.SQLException: Already closed. at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:1..
일반 뷰 Controller를 ajax로 데이터만 받아서 쓰기 (Interceptor 사용) 현재 시스템에서 사용 중인 Spring 3.2.9 기준으로 작성하였음. 전통적인 Servlet/JSP 기반의 시스템에서는 Controller의 역할이 많다. 사용자의 요청을 받아서 데이터 처리하는 부분을 호출하고 결과를 다시 사용자에게 돌려주는데, 이 때 일반적으로 JSP 템플릿을 뷰로 사용한다. 예컨대 다음과 같은 평범하디 평범한 API가 있다고 하자. @RequestMapping(value = "/abcList.do") public String selectItfindIctList(@ModelAttribute("abcVO") AbcVO abcVO, ModelMap model) throws Exception { //뭔가 조회 List result = abcService.selectList(abcVO); ..