달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Unable to find valid certification path to requested target
Java PKIX path building failed

 

아래 처럼 크롬 브라우저로 해당 등록할 사이트 인증서를 내보내기로 저장한다.

사용하는 JDK 폴더의 BIN 폴더에 들어가 CMD 명령어로 아래 내용을 작성

 

keytool -importcert -file "c:\등록할사이트인증서.crt" -keystore C:\Java\jdk1.8.0_361\jre\lib\security\cacerts -storepass changeit -noprompt

 

끝!

Posted by 타카스 류지
|

자바에서 ltrim과 rtrim을 구현하려면

정규식을 사용하면 된다.(딱 1줄로 구현할 수 있다!)


소스는 다음과 같다.


String result = s.replaceAll("^\\s+",""); // ltrim
 예제
String result = s.replaceAll("\\s+$",""); // rtrim 예제


출처: https://nine01223.tistory.com/261 [스프링연구소(spring-lab)]

Posted by 타카스 류지
|

String ip = request.getHeader("X-Forwarded-For");

 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 

     ip = request.getHeader("Proxy-Client-IP"); 

 } 

 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 

     ip = request.getHeader("WL-Proxy-Client-IP"); 

 } 

 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 

     ip = request.getHeader("HTTP_CLIENT_IP"); 

 } 

 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 

     ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 

 } 

 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 

     ip = request.getRemoteAddr(); 

 }

 

 

출처 : https://www.lesstif.com/pages/viewpage.action?pageId=20775886

Posted by 타카스 류지
|

시트 하나당 10만라인 그리는고 저장하는데 약 10초 나옴~


아래껀 원본....

BigGridDemo.java


이건 멀티 시트 추가할수 있게 카피하여 부분 수정함

BigGridMultiDemo.java



혹시나 해서 JAR 라이브러리 파일들이 필요할까 하여


프로젝트로 하나 만들어 파일들 다 넣어둠 0-0


Excel_Big.zip



방식은 poi 는 구조만 만들고 실제 데이터는


xml 파일로 텍스트 형식으로떨군후 합치기


정말 빠름빠름~

'Dev Language > JAVA' 카테고리의 다른 글

자바에서 ltrim과 rtrim 구현하기(1줄로 간단하게)  (0) 2020.04.09
JAVA Client IP 얻기  (0) 2019.09.17
JAVA 바코드 생성  (0) 2018.11.16
JAVA AES128 암호화 복호화 소스  (0) 2018.10.11
숫자형식 포멧 방법  (0) 2017.07.13
Posted by 타카스 류지
|


안녕하세요.


일하면서 바코드 관련 개발을 하게 되어 다음에도 쓸수 있게 정리하여 올립니다.


다만 정리는 제 기준으로 케이스별 로 만들었기 때문에


필요하신건 파일안에 주석이 있으니 수정하여 활용하시면 될것 같습니다.



Barbecue 오픈 API

http://barbecue.sourceforge.net



barbecue-1.5-beta1.zip




1. 바코드 지원 Format


Code128, Code128A, Code128B, Code128C, UCC128, EAN128, EAN13, Bookland, UPC-A, Standard 2 of 5, Interleave 2 of 5, PDF417, Code 39, Codabar, PostNet


2. 바코드 저장 Format


PNG, JPEG, GIF, SVG, and EPS




※  일반 적 파일로 저장


▶ 바코드 파일 생성 - barcode.saveBarcodeImage(텍스트, 경로);


barcode.saveBarcodeImage("10000000", "c:/");




▶ 바코드 파일 생성(배경 투명 처리) - barcode.saveBarcodeImage(텍스트 , 경로, 투명 유무);


barcode.saveBarcodeImage("20000000", "c:/", true);




▶ 바코드 파일 생성(확장자 지정 png, jpeg , gif) - barcode.saveBarcodeImage(텍스트, 경로, 확장자);


barcode.saveBarcodeImage("30000000", "c:/", "png");




▶ 바코드 파일 생성(사이즈 변경) - barcode.saveBarcodeImage(텍스트, 경로, 바코드넓이, 바코드높이);


barcode.saveBarcodeImage("40000000", "c:/", 1,30);






※ base64 이미지로 활용하여 파일로 저장하여 사용하지 않고 사로 HTML 코드로 활용



▶바코드 BASE64 텍스트 생성 - barcode.getBarcodeBase64(텍스트);


barcode.getBarcodeBase64("1234567890");


 



▶ 바코드 BASE64 텍스트 생성(배경 투명 처리) - barcode.getBarcodeBase64(텍스트, 투명 유무);

barcode.getBarcodeBase64("1234567890", true);

 



▶ 바코드 BASE64 텍스트 생성(사이즈 변경) - barcode.getBarcodeBase64(텍스트, 바코드넓이, 바코드높이);

barcode.getBarcodeBase64("1234567890", 2, 60);




▶ 바코드 BASE64 텍스트 생성(배경 투명 처리, 사이즈 변경) - barcode.getBarcodeBase64(텍스트, 투명 유무, 바코드넓이, 바코드높이);

barcode.getBarcodeBase64("1234567890", true, 3, 70);




아래 파일은 사용할려고 예제로 따로 만들어준 파일


이클립스에서 경로 맞춰서 지정해주시고

~ Main.java  파일에서 실행하시면 됩니다.


Barcode39Image.java

Barcode128Image.java

BarcodeCreateMain.java





'Dev Language > JAVA' 카테고리의 다른 글

JAVA Client IP 얻기  (0) 2019.09.17
자바 엑셀 내리기 BigGrid 10만 라인 약 2초  (0) 2018.11.26
JAVA AES128 암호화 복호화 소스  (0) 2018.10.11
숫자형식 포멧 방법  (0) 2017.07.13
AES, SHA 암호화 1, JAVA  (0) 2017.03.30
Posted by 타카스 류지
|

JAVA AES128 암호화 복호화 소스

package test;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;


public class FirstApp {

 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  
  FirstApp f = new FirstApp(); 
  
  System.out.println(f.encrypt("TEST08"));
  
 }
 private final String KEYNAME = "nfaator!plaeemo!";
private final String ALGORITHM = "AES"; public static final String AES_ECB_NOPADDING = "AES/ECB/NoPadding"; public String encrypt(final String source) throws Exception { byte[] eArr = null; SecretKeySpec skeySpec = new SecretKeySpec(KEYNAME.getBytes(), ALGORITHM); Cipher cipher = Cipher.getInstance(AES_ECB_NOPADDING); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); eArr = cipher.doFinal(this.addPadding(source.getBytes())); return fromHex(eArr); } public byte[] encryptToByteArray(final String source) throws Exception { byte[] eArr = null; SecretKeySpec skeySpec = new SecretKeySpec(KEYNAME.getBytes(), ALGORITHM); Cipher cipher = Cipher.getInstance(AES_ECB_NOPADDING); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); eArr = cipher.doFinal(this.addPadding(source.getBytes())); return eArr; } public String GetEncryptString(String source) throws Exception { StringBuilder sbResult = new StringBuilder(); byte[] eArr = null; SecretKeySpec skeySpec = new SecretKeySpec(KEYNAME.getBytes(), ALGORITHM); Cipher cipher = Cipher.getInstance(AES_ECB_NOPADDING); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); eArr = cipher.doFinal(this.addPadding(source.getBytes())); for (byte b : eArr) { sbResult.append(String.format("%02x", b)); } return sbResult.toString(); } public String decrypt(final String source) throws Exception { Cipher cipher = Cipher.getInstance(AES_ECB_NOPADDING); SecretKeySpec skeySpec = new SecretKeySpec(KEYNAME.getBytes(), ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] eArr = this.removePadding(cipher.doFinal(this.toBytes(source))); return new String(eArr); } private byte[] removePadding(final byte[] pBytes) { int pCount = pBytes.length; int index = 0; boolean loop = true; while (loop) { if (index == pCount || pBytes[index] == 0x00) { loop = false; index--; } index++; } byte[] tBytes = new byte[index]; System.arraycopy(pBytes, 0, tBytes, 0, index); return tBytes; } private byte[] toBytes(final String pSource) { StringBuffer buff = new StringBuffer(pSource); int bCount = buff.length() / 2; byte[] bArr = new byte[bCount]; for (int bIndex = 0; bIndex < bCount; bIndex++) { bArr[bIndex] = (byte) Long.parseLong(buff.substring(2 * bIndex, (2 * bIndex) + 2), 16); } return bArr; } private byte[] addPadding(final byte[] pBytes) { int pCount = pBytes.length; int tCount = pCount + (16 - (pCount % 16)); byte[] tBytes = new byte[tCount]; System.arraycopy(pBytes, 0, tBytes, 0, pCount); for (int rIndex = pCount; rIndex < tCount; rIndex++) { tBytes[rIndex] = 0x00; } return tBytes; } public String fromHex(byte[] pBytes) { int pCount = pBytes.length; StringBuffer buff = new StringBuffer(pCount * 2); for (int pIndex = 0; pIndex < pCount; pIndex++) { if (((int) pBytes[pIndex] & 0xff) < 0x10) { buff.append(0); } buff.append(Long.toString((int) pBytes[pIndex] & 0xff, 16)); } return buff.toString(); } }

[출처] C# JAVA AES128 암호화 복호화 소스|작성자 실버캐슬

'Dev Language > JAVA' 카테고리의 다른 글

자바 엑셀 내리기 BigGrid 10만 라인 약 2초  (0) 2018.11.26
JAVA 바코드 생성  (0) 2018.11.16
숫자형식 포멧 방법  (0) 2017.07.13
AES, SHA 암호화 1, JAVA  (0) 2017.03.30
ResultSet을 컬렉션으로 반환  (0) 2016.06.16
Posted by 타카스 류지
|

//휴대폰

public static String makePhoneNumber(String Number) {

String regEx = "(\\d{3})(\\d{3,4})(\\d{4})";


if(!Pattern.matches(regEx, Number)) return null;


return Number.replaceAll(regEx, "$1-$2-$3");

}


//사업자번호

public static String makeNumber(String Number) {

String regEx = "(\\d{3})(\\d{2})(\\d{5})";


if(!Pattern.matches(regEx, Number)) return null;


return Number.replaceAll(regEx, "$1-$2-$3");

}



//법인번호

public static String makeNumber(String Number) {

String regEx = "(\\d{6})(\\d{7})";


if(!Pattern.matches(regEx, Number)) return null;


return Number.replaceAll(regEx, "$1-$2");

}

'Dev Language > JAVA' 카테고리의 다른 글

JAVA 바코드 생성  (0) 2018.11.16
JAVA AES128 암호화 복호화 소스  (0) 2018.10.11
AES, SHA 암호화 1, JAVA  (0) 2017.03.30
ResultSet을 컬렉션으로 반환  (0) 2016.06.16
AB 파일 압축풀기  (2) 2016.04.20
Posted by 타카스 류지
|

java 언어를 이용해서 

블럭암호화는 AES 128/256으로,  해쉬함수는 SHA 256 알고리즘으로 암호화 진행해 보겠습니다.

SHA 128은 보안상 위험함으로 사용안하는것을 추천합니다.

java의 경우 AES 256 암호화를 하기 위해서는 주석에 나와 있는것처럼  http://www.oracle.com/technetwork/java/javase/downloads/index.html에서 파일을 다운받아 JCE관련 패치를 해야됩니다.

base64 인코딩을 위해 commons-codec 라이브러리 추가하였습니다. jdk에 포함되어 있는sun.misc.BASE64Encoder(), sun.misc.BASE64Decoder() 이 클래스들은 http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html를 보면 지원도 보장도 안한다고 나와 있습니다.

pom.xml

<dependency>

        <groupId>commons-codec</groupId>

        <artifactId>commons-codec</artifactId>

        <version>1.10</version>

</dependency>


이클립스에 코딩~~

package com.tistory.aircook;

 

import java.security.MessageDigest;

 

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

 

import org.apache.commons.codec.CharEncoding;

import org.apache.commons.codec.binary.Base64;

import org.apache.commons.codec.binary.Hex;

 

public class Crypto {

 

        public static void main(String[] args) {

 

               String str1 = "암호화되지 않은 문자";

               System.out.println("plain : " + str1);

 

               String str2 = encryptAES128(str1);

               System.out.println("AES128 encrypted : " + str2);

 

               String str3 = decryptAES128(str2);

               System.out.println("AES128 decrypted : " + str3);

              

               String str4 = encryptAES256(str1);

               System.out.println("AES256 encrypted : " + str4);

              

               String str5 = decryptAES256(str4);

               System.out.println("AES256 decrypted : " + str5);

              

               String str6 = encryptSHA256(str1);

               System.out.println("SHA256 encrypted : " + str6);

 

        }

 

        // 

        private final static String KEY = "01234567890123456789012345678901";

 

        // 128bit (16자리)

        private final static String KEY_128 = KEY.substring(0, 128 / 8);

       

        // 256bit (32자리)

        private final static String KEY_256 = KEY.substring(0, 256 / 8);

 

        // AES 128 암호화

        public static String encryptAES128(String string) {

 

               try {

                       byte[] keyData = KEY_128.getBytes(CharEncoding.UTF_8);

 

                       // 운용모드 CBC, 패딩은 PKCS5Padding

                       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

 

                       // key 와 iv 같게..

                       // 블록 암호의 운용 모드(Block engine modes of operation)가 CBC/OFB/CFB를 사용할 경우에는

                       // Initialization Vector(IV), IvParameterSpec를 설정해줘야한다. 아니면 InvalidAlgorithmParameterException 발생

                      

                       cipher.init(Cipher.ENCRYPT_MODEnew SecretKeySpec(keyData"AES"), new IvParameterSpec(keyData));

 

                       // AES 암호화

                       byte[] encrypted = cipher.doFinal(string.getBytes(CharEncoding.UTF_8));

 

                       // base64 인코딩

                       byte[] base64Encoded = Base64.encodeBase64(encrypted);

 

                       // 결과

                       String result = new String(base64Encoded, CharEncoding.UTF_8);

 

                       return result;

               }

               catch (Exception e) {

                       return null;

               }

        }

 

        // AES 128복호화

        public static String decryptAES128(String string) {

 

               try {

                       byte[] keyData = KEY_128.getBytes(CharEncoding.UTF_8);

 

                       // 운용모드 CBC, 패딩은 PKCS5Padding

                       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

 

                       cipher.init(Cipher.DECRYPT_MODEnew SecretKeySpec(keyData"AES"), new IvParameterSpec(keyData));

 

                       // base64 디코딩

                       byte[] base64Decoded = Base64.decodeBase64(string.getBytes(CharEncoding.UTF_8));

 

                       // AES 복화화

                       byte[] decrypted = cipher.doFinal(base64Decoded);

 

                       // 결과

                       String result = new String(decrypted, CharEncoding.UTF_8);

 

                       return result;

               }

               catch (Exception e) {

                       return null;

               }

        }

       

        // AES 256 암호화

        public static String encryptAES256(String string) {

 

               try {

                       byte[] key256Data = KEY_256.getBytes(CharEncoding.UTF_8);

                       byte[] key128Data = KEY_128.getBytes(CharEncoding.UTF_8);

 

                       // 운용모드 CBC, 패딩은 PKCS5Padding

                       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

 

                       // key 와 iv 같게..

                       // 블록 암호의 운용 모드(Block engine modes of operation)가 CBC/OFB/CFB를 사용할 경우에는

                       // Initialization Vector(IV), IvParameterSpec를 설정해줘야한다. 아니면 InvalidAlgorithmParameterException 발생

                      

                       // AES 256은 미국만 되는거라. JDK/JRE 패치를 해야된다.

                       // http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서

                       // Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 이런 링크 찾아서 다운

                       // $JAVA_HOME\jre\lib\security 아래에 local_policy.jar, US_export_policy.jar 파일 overwrite!

                      

                       // iv값이 16자리가 아니면..

                       // java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long 발생

                      

                       cipher.init(Cipher.ENCRYPT_MODEnew SecretKeySpec(key256Data"AES"), new IvParameterSpec(key128Data));

 

                       // AES 암호화

                       byte[] encrypted = cipher.doFinal(string.getBytes(CharEncoding.UTF_8));

 

                       // base64 인코딩

                       byte[] base64Encoded = Base64.encodeBase64(encrypted);

 

                       // 결과

                       String result = new String(base64Encoded, CharEncoding.UTF_8);

 

                       return result;

               }

               catch (Exception e) {

                       return null;

               }

        }      

       

        // AES 256복호화

        public static String decryptAES256(String string) {

 

               try {

                       byte[] key256Data = KEY_256.getBytes(CharEncoding.UTF_8);

                       byte[] key128Data = KEY_128.getBytes(CharEncoding.UTF_8);

 

                       // 운용모드 CBC, 패딩은 PKCS5Padding

                       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

 

                       cipher.init(Cipher.DECRYPT_MODEnew SecretKeySpec(key256Data"AES"), new IvParameterSpec(key128Data));

 

                       // base64 디코딩

                       byte[] base64Decoded = Base64.decodeBase64(string.getBytes(CharEncoding.UTF_8));

 

                       // AES 복화화

                       byte[] decrypted = cipher.doFinal(base64Decoded);

 

                       // 결과

                       String result = new String(decrypted, CharEncoding.UTF_8);

 

                       return result;

               }

               catch (Exception e) {

                       return null;

               }

        }      

       

 

        public static String encryptSHA256(String string) {

              

               try {

                       MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");

 

                       byte[] stringBytes = string.getBytes();

                       int stringBytesLength = stringBytes.length;

 

                       byte[] dataBytes = new byte[1024];

                       for (int i = 0; i < stringBytesLengthi++) {

                              dataBytes[i] = stringBytes[i];

                       }

 

                       messageDigest.update(dataBytes, 0, stringBytesLength);

 

                       byte[] encrypted = messageDigest.digest();

 

                       // hex, 16진수

                       // StringBuffer sb = new StringBuffer();

                       // for (int i = 0; i < encrypted.length; i++) {

                       //      sb.append(Integer.toString((encrypted[i] & 0xff) + 0x100, 16).substring(1));

                       // }

                       // 결과

                       // String result = sb.toString();

                      

                       // commons codec lib 사용하면 아래처럼 간단하게..

                       // String result = Hex.encodeHexString(encrypted);

                      

                      

                       // base64 인코딩

                       byte[] base64Encoded = Base64.encodeBase64(encrypted);

                       // 결과

                       String result = new String(base64Encoded, CharEncoding.UTF_8);

 

                       return result;

               }

               catch (Exception e) {

 

                       return null;

               }

        }

}


결과



출처: http://aircook.tistory.com/entry/AES-SHA-암호화-1-JAVA [aircook의 잡동사니]

'Dev Language > JAVA' 카테고리의 다른 글

JAVA AES128 암호화 복호화 소스  (0) 2018.10.11
숫자형식 포멧 방법  (0) 2017.07.13
ResultSet을 컬렉션으로 반환  (0) 2016.06.16
AB 파일 압축풀기  (2) 2016.04.20
Eclipse 성능개선 최적화  (0) 2016.02.12
Posted by 타카스 류지
|

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p></p>
 * @author Lee Jeong Hak(pluggers@naver.com)
 * @version $Revision: 1.2 $ $Date: 2004/05/06 01:27:53 $

 *  ResultSet을 컬렛션으로 반환
 */
public class RsToCollection {

    private int rsCount;
    private List rsList = new ArrayList();
    private ResultSet rs = null;

    /**
     * 
     */
    public RsToCollection(ResultSet rs) {
        this.rs = rs;
    }

    /**
     * @param rs
     * @return
     * @throws SQLException
     */
    private Object doCreateRow(ResultSet rs) throws SQLException {
        Map result = new HashMap();
        ResultSetMetaData rsmd = rs.getMetaData();
        int count = rsmd.getColumnCount();
        for (int i = 1; i <= count; i++) {
            String label = rsmd.getColumnLabel(i);
            Object value = rs.getObject(i);
            if (label != null && value != null) {
                result.put(label.toUpperCase(), value);
            }
        }
        return result;
    }
    /**
     * @param rs
     * @return
     */
    public List getRsList() {
        try {
            while (rs.next()) {
                Object obj = doCreateRow(rs);
                if (obj instanceof Object[]) {
                    for (int i = 0; i < ((Object[]) obj).length; i++) {
                        rsList.add(((Object[]) obj)[i]);
                    }
                } else {
                    rsList.add(obj);
                }
            }
            rsCount = rsList.size();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rsList;
    }
    /**
     * @return
     */
    public Map getMapList(ResultSet rs) {
        getRsList();
        return (Map) rsList.get(0);
    }
    /**
     * @return
     */
    public int getRsCount() {
        return rsCount;
    }

    /**
     * @param i
     */
    public void setRsCount(int i) {
        rsCount = i;
    }

}

'Dev Language > JAVA' 카테고리의 다른 글

숫자형식 포멧 방법  (0) 2017.07.13
AES, SHA 암호화 1, JAVA  (0) 2017.03.30
AB 파일 압축풀기  (2) 2016.04.20
Eclipse 성능개선 최적화  (0) 2016.02.12
Log4j 로 쿼리 로그 깔금 하게 보기  (0) 2016.02.12
Posted by 타카스 류지
|

ab 파일은 Android Backup 파일로서


adb backup 명령어를 통해 ab파일로 추출을 하고 

adb restore 명령어로 디바이스에 바로 복원 가능합니다


물론 Holo backup 프로그램처럼 스크립트 명령어를 직접입력할필요없이 사용하기 편하게 만든 프로그램들도 있습니다...


adb 명령어를 통해서는 ab 파일로 압축할수는 있으나 컴에서 바로 풀어볼수는 없습니다


이걸 하기위해선 


java 와 abe.jar 파일이 필요합니다


JAVA 는 기본적으로 아실분들은 아시리라 믿고


abe.jar 파일은 http://sourceforge.net/projects/adbextractor/


에서 받으실수 있습니다


일단 명령어는


   java -jar abe.jar unpack <backup.ab> <backup.tar> <password> 


이며 위처럼 tar 파일로 생성됩니다


tar 압축은 7zip등의 프로그램으로 푸시면 됩니다...


간혹 에러가나며 압축이 안풀리는경우도 있는데...


확실한건 아니지만 안드로이드 버전등에 따라서 발생하는 문제인듯 보입니다..

 

출처 : http://blackcoffeeholic.tistory.com/368

'Dev Language > JAVA' 카테고리의 다른 글

AES, SHA 암호화 1, JAVA  (0) 2017.03.30
ResultSet을 컬렉션으로 반환  (0) 2016.06.16
Eclipse 성능개선 최적화  (0) 2016.02.12
Log4j 로 쿼리 로그 깔금 하게 보기  (0) 2016.02.12
poi를 이용한 (*.xls, *.xlsx)읽기  (0) 2015.10.06
Posted by 타카스 류지
|

Eclipse 성능개선 최적화

프로젝트가 하나둘씩 쌓여갈 때 마다 이클립스가 느려짐이 심각해집니다.

다양한 기능을 지원하는 만큼 무거운 느낌을 감출 수 없네요. 이클립스의 성능개선을 위해 불필요한 설정을 해제하는 것에 대해 알아보겠습니다.

이클립스 Juno 버젼으로 설정

 

 

eclipse.ini 설정

이클립스 실행 파일안에 같이 존재하는 설정 파일 입니다. 잘못 건들면 실행이 안될 수 있으니 주의 하셔야 해요.

 

메모리 수치는 무조건 높은 게 좋은 것은 아니구요. 본인의 PC에 맞게 적당하게 설정 합니다. 

항상 Xms, Xmx 값만 설정하다가 자세히 알아보니 더 옵션이 많네요.

-Xverify:none 
-XX:+UseParallelGC
-XX:-UseConcMarkSweepGC 
-XX:PermSize=64M
-XX:MaxPermSize=512M  
-XX:MaxNewSize=512M 
-XX:NewSize=128M 
-Xms1024m  
-Xmx1024m

 

소스 자동 폴딩 해제

블록단위로 접혀지는 자동 폴딩을 해제 합니다.  

 

자동 동작하는 코드 자동완성기능 해제

클래스의 변수, 메소드 등을 접근할 때 유용한 기능이지만 자동 동작으로 인해 버벅거리는 원인을 발생하곤 하죠?

이걸 해제한다고 해도 CTRL + SPACE 를 사용해서 동작 시킬 수 있습니다.

 

Spelling 체크 설정 해제

철자체크 기능을 해제 합니다. 좋은 기능이지만 별로 불필요 한 것 같네요.

 

Validation (유효성체크) 설정 해제

Window > Preferences > Validation 

저는 웹 관련된 Validator 만 체크 해놓습니다.

 

작업중이지 않는 프로젝트 닫기

현재 작업 중인 프로젝트외엔 닫아두는 것이 좋습니다.

불필요한 플러그인 삭제

컴퓨터를 사용하더라도 많은 프로그램들이 깔려 있으면 컴퓨터가 느린것처럼 이클립스 또한 사용하지 않는 플러그인들은 제거하는 것이 좋습니다.

Window > Preferences > Install/Update

이클립스의 실행속도 개선

이클립스를 실행 하였을 때 로딩되는 플러그인에 대해 제외 시킵니다.

Autometic Update Off



출처 : http://www.slipp.net/wiki/pages/viewpage.action?pageId=5177633

Posted by 타카스 류지
|
Log4j 설정 참고 자꾸 까먹음


1. log4sql을 다운받는다. 위치는 http://log4sql.sourceforge.net/ 이다.
경로 : http://sourceforge.net/project/showfiles.php?group_id=209296

다운 받아서 lib 에 복사 

아래는 Maven 설정
--------------------
<dependency>
<groupId>log4sql</groupId>
<artifactId>log4sql</artifactId>
<version>7.8</version>
</dependency>
--------------------

2. DB connection정보 변경
ex) jdbc.driverClassName=oracle.jdbc.OracleDriver  ---> jdbc.driverClassName=core.log.jdbc.driver.OracleDriver
DB에 따라서 변경해야하는 드라이버 명은 (http://log4sql.sourceforge.net/) 이곳에서 확인 가능.

기타 log 설정 등은 기존 설정을 사용하되,sql에 관해 로그를 남기던 옵션은 다 해제해 준다.


Posted by 타카스 류지
|

 

 

 

 

 

ExcelRead.zip

 

 

// *.xls 파일 가능( - xlsx파일 불가)
HSSFWorkbook workBook  = new HSSFWorkbook(new FileInputStream(new File(filePath)));
HSSFSheet sheet = null;
HSSFRow row  = null;
HSSFCell cell   null;

 

// *.xlsx 파일 가능( - xls파일 불가)
XSSFWorkbook workBook   = new XSSFWorkbook(file);
XSSFSheet sheet = null;
XSSFRow row  = null;
XSSFCell cell = null;

 

// *.xls, *.xlsx 파일 가능
Workbook workBook = WorkbookFactory.create(file);
Sheet sheet = null;
Row   row  = null;
Cell  cell  = null;

 

 


[출처] [Java] POI를 이용한 (*.xls, *.xlsx) 읽기|작성자 마이레몬트리

http://tychejin.blog.me/110182191752

 

Posted by 타카스 류지
|

 /**
  * xlsx 파일(XSSFWorkbook)을 xls 파일(HSSFWorkbook)로 변환하는 메서드.
  * [참조] http://stackoverflow.com/questions/20049922/java-poi-api-convert-from-xlsx-to-xls 
  *
  * @param xssfWorkbook
  * @return
  * @throws Exception
  */
 public static HSSFWorkbook convertXlsxToXls(String filePath) throws Exception {
  
  FileInputStream fis = new FileInputStream(new File(filePath)); 
  XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);

     HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
     int sheetCnt = xssfWorkbook.getNumberOfSheets();
     for (int i = 0; i < sheetCnt; i++) {
      Sheet sIn = xssfWorkbook.getSheetAt(i);
      Sheet sIn = xssfWorkbook.getSheetAt(0);
         Sheet sOut = hssfWorkbook.createSheet(sIn.getSheetName());
         Iterator rowIt = sIn.rowIterator();
         while (rowIt.hasNext()) {
             Row rowIn = (Row) rowIt.next();
             Row rowOut = sOut.createRow(rowIn.getRowNum());
 
             Iterator cellIt = rowIn.cellIterator();
             while (cellIt.hasNext()) {
                 Cell cellIn = (Cell) cellIt.next();
                 Cell cellOut = rowOut.createCell(cellIn.getColumnIndex(), cellIn.getCellType());
                 switch (cellIn.getCellType()) {
                 case Cell.CELL_TYPE_BLANK: break;
                 case Cell.CELL_TYPE_BOOLEAN:
                     cellOut.setCellValue(cellIn.getBooleanCellValue());
                     break;
                 case Cell.CELL_TYPE_ERROR:
                     cellOut.setCellValue(cellIn.getErrorCellValue());
                     break;
                 case Cell.CELL_TYPE_FORMULA:
                     cellOut.setCellFormula(cellIn.getCellFormula());
                     break;
                 case Cell.CELL_TYPE_NUMERIC:
                     cellOut.setCellValue(cellIn.getNumericCellValue());
                     break;
                 case Cell.CELL_TYPE_STRING:
                     cellOut.setCellValue(cellIn.getStringCellValue());
                     break;
                 }
                 CellStyle styleIn = cellIn.getCellStyle();
                 CellStyle styleOut = cellOut.getCellStyle();
                 styleOut.setDataFormat(styleIn.getDataFormat());
                 cellOut.setCellComment(cellIn.getCellComment());
             }
         }
        }
    
     return hssfWorkbook;
 }

Posted by 타카스 류지
|
import java.util.Calendar;
import java.text.SimpleDateFormat;

Calendar  cal = Calendar.getInstance();  //날짜,시간
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss"); //포멧변환
String to_date = format.format(cal.getTime());
Posted by 타카스 류지
|

일반적인 파라미터로 가져오는 데이터는

 

예> ?aaa=111&bbb=222&ccc=333

request.getParameter("Key 값")

 

위와 같은 방식으로 가져올수있는데

 

HttpClient client = new HttpClient();

GetMethod method = new GetMethod("naver.com");

 

방식으로 데이터롤 리턴받을시에

post 방식으로 param 값이 넘어올때 데이터를 각 각 parameter 단위로

나누어서 사용할때가 있다 그럴때 사용하면된다.

 

#선언

 public String getRtnParams(String[] values,String paramName){
  String rtnval="";
  for( int x = 0; x < values.length; x++ )
  {
   String strName = values[x].split("=")[0];
   if(strName.toUpperCase().equals(paramName.toUpperCase())){
    rtnval = values[x].split("=")[1];
    break;
   }
  }
  return rtnval;
 }

 

 

#사용법

1차 & 단위로 분할

String[] values = new String(responseBody).split("&");

 

#호출

getRtnParams(values, "Key 값")

Posted by 타카스 류지
|

 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 
 //클래스에 추가할 request
 HttpServletRequest request

 
 //사용하는 함수
 createFileHtml(request.getSession().getServletContext(), releasemanageVoHtml.getCntsId(), releasemanageVoHtml.getMenuId(),releasemanageVoHtml.getCntsSrc());


 /**
  * 배포 html 파일 생성
  */
 public void createFileHtml(ServletContext context,String cntsId,String menuId,String cntsSrc){
 
  //구분자 (/)
  String separatorSymbol = File.separator;
  //최상단 경로부터 하단경로
  String realFolder = context.getRealPath("html/cms");
  //파일명
  String fileName = cntsId + "_" + menuId + ".html";
  //개행문자 치환
  String sCntsSrc = cntsSrc;
  
  sCntsSrc=sCntsSrc.replaceAll("&amp;","&");
  sCntsSrc=sCntsSrc.replaceAll("&lt;","<");
  sCntsSrc=sCntsSrc.replaceAll("&gt;",">");
  //sCntsSrc=sCntsSrc.replaceAll("\n", "<br>");
  sCntsSrc=sCntsSrc.replaceAll(System.getProperty("line.separator"), "<br>");
  sCntsSrc=sCntsSrc.replaceAll("&nbsp;"," ");  //공백
  sCntsSrc=sCntsSrc.replaceAll("&quot;", "\""); //"(더블 쿼테이션)
   
  try {
   
         File targetFile = new File(realFolder + separatorSymbol + fileName);
        
         targetFile.createNewFile();
        
         BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(targetFile.getPath()), "UTF8"));
        
         output.write(sCntsSrc);
        
         output.close();
        
     } catch(UnsupportedEncodingException uee) {
         uee.printStackTrace();
     } catch(IOException ioe) {
         ioe.printStackTrace();
     }
 
 }

 

Posted by 타카스 류지
|