728x90
반응형

Locale 클래스를 이용한 표준 국가 명 한글로 얻어오기

java.util 패키지에 있는 Locale 클래스를 이용하게 되면 국가 정보를 얻을 수 가 있는데

그중 getISOCountries() 메소드를 이용하면 국제 표준 국가명 리스트를 배열로 가져올 수 있다. 

가져온 국가명 리스트를 한글로 변환 하기위해 Locale 클래스의 생성자인 Locale(String language, String country)

로 초기화후 getDisplayCountry() 메소드를 출력하면 결과가 출력된다.

1
2
3
4
5
6
7
8
9
10
11
 
public class LocaleTest {         
    public static void main(String[] args) {                
        java.util.Locale locale = null;                
        String[] countries = java.util.Locale.getISOCountries();                
        for(String country : countries) {            
            locale = new java.util.Locale("ko", country);            
            System.out.println(locale.getDisplayCountry());        
        }    
    }
cs



728x90
반응형
728x90
반응형

Ajax 로 구현한 비동기 멀티 파일 업로드 


회사 솔루션에서 .eml파일과 .zip 파일을 ActiveX를 이용하여 서버에 업로드하는 기능이 있었는데 

알다시피 크로스브라우징 문제때문에 Ajax 를 이용하여 비동기 멀티 파일 업로드를 구현했다. 훗....

구현시 몇가지 문제가 있었는데 첫번째 브라우저나 pc사양에 따라 다르겠지만 내 작업 노트북 기준( CPU : i7-4720 RAM : 8GB ) 인데

4메가 파일 100개 가량을 업로드 하니 브라우저가 그대로 프리징-_-;;; 이 발생해서 ( 뭐 당연한 얘기겠지만.... )  

50개 정도의 제한을 둘까 하다가 10개로 일단 제한을 걸어두었다. 

두번째는 Ajax 로 서버에 비동기 요청시 응답을 다 받기도 전에 다음 소스 코드가 수행이 되버려서 찾아보니 XmlHttpRequest 객체 

open(); 메서드의 세번째 파라미터 예 ) xhr.open("POST",URL,true); 를 xhr.open("POST",URL,false); 로 즉 false 로 변경하여 이를 해결하였다. 

추가로 ie-8 이하에서는 file폼에서 multiple 이 지원되지 않으므로 어쩔 수 없이 ie-8 일경우엔 activeX 다운로드 버튼이 보이도록 하였다.

아래는 소스 전문이다. 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    function ajaxUpload() {
        var objForm = document.f;
        var sf = objForm.file.files;
        if (objForm.file.value == "") {
            alert("파일을 선택해 주십시오.");
            return;
        } else {
            try {
                for (var i = 0; i < sf.length; i++) {
                    objForm.strFileName.value = sf[i].name.substr(sf[i].name.lastIndexOf("\\") + 1);
                    var formData = new FormData(objForm);
                    var xhr = initAjax();
                    xhr.open("POST", "mbox.auth.do?method=UploadMailProcess", false);
                    xhr.send(formData);
                }
            } catch (e) {
                console.log("Upload Error : "+e);
                alert("업로드 중 오류가 발생하였습니다.");
                return;
            } finally {
                alert("업로드가 완료되었습니다.");
                opener.location.reload();
                self.close();
            }
        }
    }
 
    function initAjax() { // 브라우저에 따른 AjaxObject 인스턴스 분기 처리
        var xmlhttp;
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlhttp;
    }
 
    function limitFileChk() { //    파일 업로드 제한 
        var objForm = document.f;
        var sf = objForm.file.files;
        var fileLimit = sf.length;
        
        if (fileLimit > 10) {
            reloadDialog("eml 파일 업로드는 10개를 넘길 수 없습니다. zip 으로 업로드 
                               해주시기 바랍니다.", objForm);
            return;
        }
        if (!multiFileChk(objForm)) { // 다중 업로드시 확장자 체크
            return;
        }
    }
 
    function reloadDialog(msg, objForm) { // 팝업창 갱신
        alert(msg);
        objForm.file.value = null; //    firefox multi-file Form flush code
        location.reload();
    }
 
    function multiFileChk(objForm) {// 다중 업로드시 eml 외에 다른 확장자 올라가는것을 방지
        var sf = objForm.file.files;
        if (sf.length == 1 && sf[0].name.lastIndexOf(".zip") != -1) // .zip 은 한개만 업로드가능
            return true;
        for (var i = 0; i < sf.length; i++) {
            if (sf[i].name.lastIndexOf(".eml") < 0) {
                reloadDialog("다중 업로드는 .eml 파일만 지원합니다.", objForm);
                return false;
            }
        }
        return true;
    }


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <form name="f" method="post" enctype="multipart/form-data">
        <input type="hidden" name="strFileName" value="">
        <table class="h2">
            <tr>
                <td><img src="/images_std/kor/bullet/arrow_pop.gif" align="top" />파일 업로드</td>
            </tr>
        </table>
        <div class="k_puAdmin_box">
            <table>
                <tr>
                    <td width="80" align="right"><strong>파일 선택</strong></td>
                    <td><input name="file" type="file" style="width: 350px;"
                             onchange="limitFileChk();" multiple/></td>
                </tr>
            </table>
        </div>
        <div style="text-align: center">
            <a href="javascript:ajaxUpload()"><img src="/images/kor/btn/popup_confirm.gif" /></a>
             &nbsp;
            <a href="javascript:window.close()"><img src="/images/kor/btn/popup_close.gif" /></a>
        </div>
    </form>


728x90
반응형
728x90
반응형

JavaScript Array Object 의 메서드 사용방법 예

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// 배열 엘리먼트 추가
console.log('[1,2] =======================');
var data = [1, 2];
data[2] = 3;
console.log(data);
 
var value = data[2];
console.log(value);
 
// 값이 없는 배열 엘리먼트에는 undefined가 할당됨
data[5] = 6;
console.log(data);
console.log(typeof data[4]); // undefined 가 나옴
 
var five = 5;
data[five + 1] = 7;
console.log(data);
 
// new Array() : Array Object 의 인스턴스를 반환
console.log('new Array() =======================');
var obj = new Array();
console.log(obj.length);
 
obj = new Array(3);
console.log(obj.length);
 
// 아래의 3가지는 모두 동일하다
console.log(new Array(11, 34, 56));
console.log(new Array([11, 34, 56]));
console.log([11, 34, 56]);
 
// concat() : 값을 결합 하여 배열로 반환
console.log('concat() =======================');
var value = [1, 2];
// [1, 2, 3, 4]
result = value.concat(3, 4);
console.log(result);
console.log(value.concat([3],[4]));
// [1, 2, 3. [4. [5. 6]]]
console.log(value.concat([3, [4, [5,6]]]));
 
// push() : 배열의 끝에 값을 추가한다.
console.log('push() =======================');
var len,
    value = [1,2,3];
 
len = value.push(456); // length를 반환
console.log(value);
console.log(len);
value.push(12, [34]);
console.log(value);
console.log(len);
 
// join() : 배열과 분리자를 결합해서 문자열로 변환 및 반환
console.log('join() =======================');
var value = [1, 2, 3];
console.log(value.join());
console.log(value.join('')); // ,(콤마) 가 사라지고 일반 문자열 인것처럼 변환한다.
console.log(value.join('##'));
 
// pop() : 배열의 마지막 엘리먼트 삭제
console.log('pop() =======================');
var value = [1, 2, 3];
value.pop();
console.log(value);
 
// unshift() : 배열의 첫 번째 엘리먼트에 추가
console.log('unshift() =======================');
 
// shift() : 배열의 첫 번째 엘리먼트 삭제
console.log('shift() =======================');
 
// sort() : 엘리먼트 값이 적은 순서대로 sort 된다. ascending
console.log('sort() =======================');
var result,
    value = [4, 2, 3, 1];
 
result = value.sort();
console.log(result);
console.log(value);
 
value = ['A1', 'A01', 'B2', 'B02'];
value.sort();
console.log(value);
 
value = ['Z', 'AB', 'JKL', 'JQRT'];
value.sort();
console.log(value);
 
value = ['Z','z', 'AB', 'JKL', 'JQRT'];
value.sort();
console.log(value);
 
value = [, 78, 12]; // 0번째는 undefined
value.sort();
console.log(value[2]);
 
// sort() 를 desc(내림차순) 으로 sort가 불가하다 직접 함수를 작성해야함
var value = [101, 26, 7, 1234];
value.sort();
console.log(value);
 
// 기본적으로 sort 는 문자열 sort이다.
// unicode이기 때문에 한지리씩 비교한다.
value = [101, 26, 7, 1234];
value.sort(function(one, two){
    return one - two;
}); // 굉장히 불필요한 작업이지만 어쩔수없다. 클라이언트 언어이기때문에
    // 제공을 해주지 않은것으로 보인다. factorial 개념
console.log(value);
 
// 역순으로 sort 를 한다.
value = [101, 26, 7, 1234];
value.sort(function(one, two){
    return -(one - two);
});
console.log(value);
 
// reverse() : 배열 엘리먼트 위치를 역순으로 바꿈
console.log('reverse() =======================');
var result;
    value = [1,7,3];
 
result = value.reverse();
console.log(result);



728x90
반응형
728x90
반응형

JavaScript String Object 의 메서드 사용방법 예 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
// charAt() : 해당 하는 인덱스의 케릭터를 반환한다.
console.log('charAt() =======================');
var value = 'SPORTS';
console.log(value.charAt(1));
console.log(value[3]); //  ECMA Script5 이후 부터 사용이 가능하다.
 
// charCodeAt() : 해당 하는 문자열의 인덱스의 유니코드를 반환한다.
console.log('charCodeAt() =======================');
var value = 'abAB',
    len = value.length;
 
for (var k = 0; k < len; k++) {
    console.log(value.charCodeAt(k));
}
console.log(value.charCodeAt(7)); // NaN 이 출력됨.
 
// fromCharCode() : 해당 하는 유니코드의 문자열을 반환한다.
console.log('fromCharCode() =======================');
console.log(String.fromCharCode(65669798)); // fromCharCode()는 메서드가 아닌 함수이다. !!
//var str = new String();
//str.fromCharCode(); 로 사용하지 못한다. 함수는 오브젝트를 모르기때문에 오브젝트.함수명으로 사용한다.
 
// concat() : 문자열을 합칠때 사용함.
console.log('concat() =======================');
var value = 'sports: ';
console.log(value.concat(' soccer :',' 11'));
 
// indexOf() : 문자열에 일치하는 인덱스 반환 존재하지 않으면 -1 를 반환함
console.log('indexOf() =======================');
var str = '가나다가나다';
console.log(str.indexOf('다'));
console.log(str.indexOf('다'), 4);
console.log(str.indexOf('나다'));
console.log(str.indexOf('다'15));
 
// lastIndexOf() : 문자열에 일치하는 마지막 인덱스를 반환한다.
console.log('lastIndexOf() =======================');
var value = '12341234';
console.log(value.lastIndexOf('3'));
console.log(value.lastIndexOf('3',5));
console.log(value.lastIndexOf('34'));
 
// match() : 정규표현식으로 매치되는 결과를 반환한다
console.log('match() =======================');
var value = 'Sports';
console.log(value.match(/s/)); // 소문자 s를 찾음
console.log(value.match('S')); // 대문자 S를 찾음
console.log(value.match(/s/ig)); // ig: ignore global 대소문자를 구분하지 않음. 배열로 반환 s가 2개이니까.
console.log(value.match('spt')); // null 이 반환됨
console.log(/S/.test(value));  // 속도가 더 빠름
 
// replace() : 매치결과를 지정한 값으로 대체 후 반환한다
console.log('replace() =======================');
var value = 'abcabc',
    trimExp = /^\s+|\s+$/g,// 정규표현식을 통하여 trim을 수행한다 ie6~8 ES3에선 trim()이 없음
    base = ' abcd ';
 
console.log(base.replace(/a/g, 'A'));
console.log(value.replace(trimExp, ''));
console.log(base.length);
console.log(value.length);
 
// search() : 검색된 첫번째 인덱스를 반환한다.
console.log('search() =======================');
var value = 'cbacba';
console.log(value.search(/a/g));
console.log(value.search('K'));
 
// substring() : 시작에서 끝 직전까지 인덱스의 문자열 값을 반환한다. 수식으로 나타내면 begin == idx < end
console.log('substring() =======================');
var value = '01234567';
console.log(value.substring(26));
console.log(value.substring(5-1));
console.log(value.substring(-72));
console.log(value.substring(51));
console.log(value.substring());
console.log(value.substring(2));
console.log(value.substring(320));
 
// substr() : 시작위치에서 문자길이만큼의 값을 반환한다. 수식으로 나타내면 begin == idx <= end
console.log('substr() =======================');
var value = '01234567';
console.log(value.substr(03));
console.log(value.substr(3));
console.log(value.substr());
console.log(value.substr(-33));
 
// split() : 구분자로 분리하여 배열로 반환한다.
console.log('split() =======================');
var result,
    value = '_012_345';
 
result = value.split('_');
console.log(result);
console.log(result.length);
 
console.log(value.split('_',2)); // 2번째 인자는 엘리먼트수이다.
console.log(value.split('AA'));
console.log(value.split());
 
// 모두 분리
console.log(value.split(''));
 
// toLowerCase() : 문자를 소문자로 반환한다.
console.log('toLowerCase() =======================');
var value = 'ABCDE';
console.log(value.toLowerCase());
 
// toUpperCase() : 문자를 대문자로 반환한다.
console.log('toUpperCase() =======================');
var value = 'abcde';
console.log(value.toUpperCase());
 
 
cs

[ 출력결과 ]
1. charAt() =======================
2. P
3. R
4. charCodeAt() =======================
5. 97
6. 98
7. 65
8. 66
9. NaN
10. fromCharCode() =======================
11. ABab
12. concat() =======================
13. sports: soccer : 11
14. indexOf() =======================
15. 2
16. 24
17. 1
18. -1
19. lastIndexOf() =======================
20. 6
21. 2
22. 6
23. match() =======================
24. s
25. S
26. S,s
27. null
28. true
29. replace() =======================
30. Abcd
31. abcabc
32. 6
33. 6
34. search() =======================
35. 2
36. -1
37. substring() =======================
38. 2345
39. 01234
40. 01
41. 1234
42. 01234567
43. 234567
44. 34567
45. substr() =======================
46. 012
47. 34567
48. 01234567
49. 567
50. split() =======================
51. ,012,345
52. 3
53. ,012
54. _012_345
55. _012_345
56. _,0,1,2,_,3,4,5
57. toLowerCase() =======================
58. abcde
59. toUpperCase() =======================
60. ABCDE


728x90
반응형

+ Recent posts