본문 바로가기

프로그래밍

(91)
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 업데이트 할 때마다 이런다. 엄청 오래된 버그다. 애플이 미국놈들이라서 이런건 신경 안쓰는 건지 ㅜㅜ 그럼에도 불구하고 나는 애플을 쓴다. 미제 앞잡이다......
Spring / jQuery ajax 사용시 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined 오류 오류 jQuery로 $.ajax 호출하는데 다음과 같은 오류가 발생했다. Uncaught TypeError: Cannot read property 'toLowerCase' of undefined 원인을 알아보니 스프링 시큐리티 csrf 설정 관련 오류이다. 사용자 인증 되지 않은 상태(비로그인)에서는 $(document).ajaxSend ajax 설정에서 token과 header가 null로 넘어가서 발생한 오류이다. 해결 token, header null 체크를 추가했다. 해결 전 $(function () { var token = $("meta[name='_csrf']").attr('content'); var header = $("meta[name='_..
아이디, 패스워드 패턴 검사는 정규식으로 하자 레거시 소스 분석 중 이런 것을 보았다. var alphaDigit = "abcdefghijklmnopqrstuvwxyz1234567890"; for (i=0; i < userId.length; i++) { if (alphaDigit.indexOf(userId.substring(i, i+1)) < 0) { alert("아이디는 영문소문자와 숫자의 조합만 사용할 수 있습니다."); return false; } } 여기 뿐만 아니라 여기저기에 코딩 초보의 티가 많이 나는 소스이다. 문자열 패턴 검사에는 정규식이라는 좋은 것이 있다. 정규표현식 혹은 정규식이라고 검색하면 많이 나온다. 정규식을 사용하면 위 코드를 아래처럼 바꿀 수 있다. if (!/^[a-z0-9]{4,10}$/gi.test(userId)) ..
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..
IE에서 [Syntax Error: ':'가 필요합니다] 발생하면 ES6를 사용한 것 오류 잘 되던 것이 IE에서 테스트를 하니 &#39;:&#39;가 필요합니다 오류 메시지가 뜬다. 사정상 Vue를 컴파일하지 않고 httpVueLoader로 불러 사용하고 있는데 코드 중 ES6가 있었기 때문이다. 정확하게는 다음 문제이다. 원인 ES6 문법 중 오브젝트의 프로퍼티로 함수를 지정할 때 다음과 같이 function 키워드를 명시하지 않고 ()축약해서 쓸 수 있다. var methods = { someFunction() { // ... } }; 해결 IE에서는 당연히 안된다. 다음과 같이 고쳐야 한다. var methods = { someFunction : function () { // ... } }; IE 없는 세상에서 살고 싶다. 대한민국 인터넷 브라우저 중 IE 점유율이 이미 10% 밖..
[Vue.js] 체크박스 값을 boolean(true/false) 대신 'Y/N' 으로 바꾸기 상황 Vue.js에서 체크박스에 바인딩 된 모델의 값은 기본적으로 true / false 이다. 근데 고객 놈들의 디비는 Y/N 문자로 관리한다. 해결 input의 true-value와 false-value props를 사용한다. 주의할 점은, 이 값은 form submit 시 체크되지 않은 값은 전송되지 않는다는 점이다. 나는 form submit 하지 않고 바인딩된 모델 json을 전송해서 사용하므로 상관없었다. 참고 https://kr.vuejs.org/v2/guide/forms.html#%EC%B2%B4%ED%81%AC%EB%B0%95%EC%8A%A4-1