java 스레드덤프(thread dump) 분석
* jstack [PID] > dump.txt 로 스레드덤프 추출 * 일단 BLOCK이 있는지 검사해 보자
* jstack [PID] > dump.txt 로 스레드덤프 추출 * 일단 BLOCK이 있는지 검사해 보자
* jQuery ajax 로 jsonp 요청시 크롬 개발자도구 상태 Content-type 없음 Accept는 */* 이 됨 network 탭에서 xhr이 아닌 script로 조회됨. method type에 관계 없이 get 요청이 됨.
* 접근 불가능한 필드에 접근하기 Map<String, Field> fieldMap = new HashMap<String, Field>(); Field[] fields = Example.class.getDeclaredFields(); for(Field f : fields) { fieldName = f.getName(); f.setAccessible(true); fieldMap.put(fieldName, f); } * 필드에 접근해서 값 셋팅하기 //this는 fieldMap에 해당하는 멤버를 지닌 객체 fieldMap.get(“returnMsg”).set(this, “success”);
public class NumberUtility { private static final Log LOG = LogFactory.getLog(NumberUtility.class); public static final BigDecimal INT_MIN_IN_BIGDECIMAL = new BigDecimal(Integer.MIN_VALUE); public static final BigDecimal INT_MAX_IN_BIGDECIMAL = new BigDecimal(Integer.MAX_VALUE); public static final BigDecimal LONG_MIN_IN_BIGDECIMAL = new BigDecimal(Long.MIN_VALUE); public static final BigDecimal LONG_MAX_IN_BIGDECIMAL = new BigDecimal(Long.MAX_VALUE); /** * 생성 금지 */ private NumberUtility(){} /** * Object를… Read More »
javascript object를 query string으로 변환해 주는 jQuery의 $.param() 함수 사용중, 값이 배열인 데이터를 query string으로 변환할 때 파라미터명 뒤에 “[]” 문자열이 붙는 현상이 있었다. 이 때, $.param() 함수의 두 번째 인수로 true 값을 주니 이 현상을 해결할 수 있었다. (ex: var qryStr = $.param(jsonObj, true); )
import java.sql.Timestamp; import java.text.SimpleDateFormat; long time = 1419260400000L; SimpleDateFormat mmddFormat = new SimpleDateFormat(“MM/dd”); String mmdd = mmddFormat.format(new Timestamp(time));
파라미터를 보낼 때 URLEncoder.encode()를 수행하지 않았거나, 파라미터를 받을 때 URLDecoder.decode()를 두 번 호출하지 않는지 점검해 보자.
– 출처: http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery – javascript replace() 함수의 두 번째 인수로 함수를 넣을 수 있다는 것을 처음 알았다. ^ㅁ^; var entityMap = { “&”: “&”, “<“: “<”, “>”: “>”, ‘”‘: ‘"’, “‘”: ”’, “/”: ‘/’ }; function escapeHtml(string) { return String(string).replace(/[&<>”‘\/]/g, function (s) { return entityMap[s]; }); }
* Promise 객체 – Promise 객체는 $o.promise()로 생성하거나 $.when()의 인수로 넣어질 경우 생성된다. – Promise 객체가 되면 객체에서 일어나는 일들을 모니터링하여, 이벤트가 종료되면 done()을 호출한다. (ex: fadeOut())
방법 1) 정적 자원 로딩(import) url 뒤에 버전을 나타내는 구분자 붙이기. * 브라우저가 1분 이상 정적 자원들을 캐싱하지 못하도록 막고 싶을 경우, 공통 heaer jsp 파일 소스코드 예시 <% request.setAttribute(“buildVer”, DateUtil.getCurrentDate(“yyyyMMddHHmm”)); //현재일시의 DateFormat을 리턴해 주는 사용자정의 메서드 getCurrentDate()가 있다고 치자. %> <script src=”${contextPath}/js/common.js?${buildVer}”></script> 나머지 방법들은 기회가 되면… … Read More »
하려고 하는 작업 특정 문자열에서 메타문자 {WRAP}{/WRAP}로 감싸진 숫자를 찾아서 마스킹 처리를 하고 {WRAP}{/WRAP} 메타문자는 삭제하고 싶다. String dtl = "블라블라 {WRAP}123456{/WRAP} 어쩌구 저쩌구 {WRAP}987654{/WRAP} 마무으리 등등등…"; Matcher matcher = Pattern.compile("\\{WRAP\\}(\\d*)\\{/WRAP\\}"); // grouping을 하나 한 것에 주목 StringBuffer sb = new StringBuffer(); while(matcher.find()){ // 계속해서 결과를 찾아간다. //문자열 맨 앞에서부터 sb에 붙여나가면서 치환 처리까지 수행한다.… Read More »
1. StringBuffer, StringBuilder 클래스의 append() 메서드 사용 append() 메서드의 인수로 null 이 들어가면 “null” 문자열이 append() 된다. 2. String 클래스의 valueOf() 메서드 사용 valueOf() 메서드의 인수로 null 이 들어가면 “null” 문자열을 리턴한다.
//이벤트 조회(추출) var events = $._data($(‘#div1’)[0], ‘events’); //바인딩된 이벤트 해제하기 $(‘#div1’).unbind(‘click’); //click 이벤트 해제 * 참고 jQuery를 사용하여 이벤트를 조회하는 것이나, 아니면 이벤트를 해제하는 것이나, 모두 jQuery를 통하여 바인딩된 이벤트만 조회/해제할 수가 있다. html 코드에 직접 등록한 이벤트의 경우에는 조회도 해제도 불가한 것으로 보인다. 그렇기 때문에 이벤트를 바인딩할 때는 나중을… Read More »
var P_PAGE = ‘pageNo’; //페이지번호 파라미터명 var P_TOTALCNT = ‘totRows’; //전체 조회 건수 파라미터명 var P_ROWSPERPAGE = ‘fetchRows’; //rowsPerPage 파라미터명 var P_TOTALPAGE = ‘totalPage’; //jqGrid 기본 설정 $.extend($.jgrid.defaults, { prmNames: { page: P_PAGE, rows: P_ROWSPERPAGE, totalrows: P_TOTALCNT }, jsonReader: { root: ‘data’, //응답객체 이름 page: P_PAGE, total: P_TOTALPAGE, records: P_TOTALCNT,… Read More »
아래와 같이 처리해 주자. setTimeout(function(){ $(‘#id’).focus(); }, 0);
이 케이스에 대해서 인터넷에 여러가지 말들이 많이 있지만, 내 경우에는, 이미 기존 페이지에 include 되어 있던 javascript 라이브러리 들이, Dialog를 띄우면서 또 한 번 같은 document 내에 로딩되면서, Dialog를 생성했던 javascript context가 사라져 버린 경우였었다. 결국 dialog 내에 로딩되는 페이지에서 javascript 라이브러리가 include 되는 부분을 모두 제거했더니, Dialog도 잘 닫히고, 아무 문제가 없었다. … Read More »
//1byte만 추출할 경우 String tagId = String.valueOf(msg[24]); //2byte 이상을 추출할 경우 byte[] shopCdBytes = new byte[2]; System.arraycopy(msg, 25, shopCdBytes, 0, 2); String shopCd = new BigInteger(shopCdBytes).toString(10);
//apache poi가 미리 설치되어 있어야 할 듯. //payload가 byte[] 형이라고 가정 하에 org.apache.poi.util.HexDump.toHex(payload,10)
* Arrays.copyOfRange()와 ByteArrayOutputStream.write(), ByteArrayOutputStream.toByteArray()를 사용하여, 심플하고 우아하게 바이트배열을 생성할 수 있다. /** * 객체의 모든 내용을 바이트배열로 만들어 리턴한다. * @return */ public byte[] getBytes(){ byte[] ret = null; ByteArrayOutputStream stream = new ByteArrayOutputStream(BYTES_BODY); //BYTES_BODY는 메세지의 전체 길이(bytes)이다. try { stream.write(Arrays.copyOfRange(gameId.getBytes(), 0, BYTES_GAME_ID)); //BYTE_’속성명’은 각 속성별 지정 길이(bytes)이다. stream.write(Arrays.copyOfRange(isolStaDtm.getBytes(), 0, BYTES_ISOL_STA_DTM)); stream.write(Arrays.copyOfRange(isolEndDtm.getBytes(),… Read More »
http://k-story.tistory.com/129