반응형

Web System에서 윈도우의 도스명령어를 실행해야 하는경우가 있다.

 

예를들어, Database를 백업 또는 복구하는 경우에 이러한 기능이 매우 좋은 기능이다.

 

아래 소스를 보고 설명해 보자.

 

 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;

public class DosCommandExecute {

 public static void main(String args[]) {

  try {
   Scanner scan = new Scanner(System.in);
   System.out.print("INSERT DOS COMMAND :");
   String command = scan.next();

 

   String cmd[] = new String[3];
   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = command;


   Runtime runTime = Runtime.getRuntime();
   Process process = runTime.exec(cmd);

 

   InputStream is = process.getInputStream();
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader br = new BufferedReader(isr);


   String line;

   while ((line = br.readLine()) != null) {
    System.out.println(line);
   }

   int execTime = process.waitFor();
   System.out.println("exectiog time: " + execTime);
  } catch (Throwable t) {
   t.printStackTrace();
  }
 }

위 소스에 대해서 분석을 해보도록 하자.

 

우리가 입력하는 DOS명령어는 다음과 같은 형식이다.

 

cmd.exe /C (명령어)

 

/C는 다음과 같은 옵션이다.

(/C옵션)

/C      문자열이 지정한 명령어를 수행한 후에 종료합니다.

 

저 위의 명령어가 String 배열로 입력이 들어가는 것이다.

 

 

내부적으로 실행하는 방법은 Runtime Class를 이용하여 별도로 Thread를 이용하여 실행하는 방법이다.

 

원래 Java의 경우 Java 실행시 Runtime Class 실행하여 1개의 Thread를 생성한다, 내부적으로 Runtime Class를 하나 더 생성하여

 

도스명령어를 이용한 데이터를 가져온다.

 

이상이다. 만약 DB 백업 을 원하신다면 아래와 같이 데이터를 넣으면 쉽게 적용할 수있다.

 

 

   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = "mysqldump -u root -papmsetup amt_db_oper > d:/견적서/하이루.sql"; 

 

그럼 깔끔하게 적용된다. 웹의 경우 Servlet에서 위와 같은 기능을 추가하게 된다면 많은 기능을 더 적용할 수 있을 것이다.

 

반응형
반응형
아~~~ 정말 오랜만에 글을 쓴다.

애기들 공부 가르키다가, 새롭게 기억이 쏙쏙 돛아나는 정규식~ 매번 공부해야겠다고 마음은 먹지만 못하는 이놈.ㅋㅋㅋ

정규식이란 놈은 골때린다. 그 이유인즉, Java, 기타 툴, DB 등등 각각의 엔진마다 조금씩 다르기 때문이다.

휴~~ 그래서 우선 Java에서 쓰이는 정규식만 정리를 해보도록 하자.

머 내가 정리한다기 보다는 Java API에 있는것들 어느정도 해석해서 적어보도록 하겠다.

테스트를 위해서는 아래 코드를 활용하면 쉽게 테스트 가능하다.


 public class Test {
 public static void main(String argsp[]) {

  String tmp = "0A가B1abc나2C32dd2ⓔ34DDD다d";

  for (int i = 0; i < tmp.length(); i++) {
   String tt = tmp.substring(i, i + 1);
   if (tt.matches("
\\p{Lower}")) {   // ==> 요기에 정규표현식을 섞어서 넣어주면 쉽게 테스트가능하다.
    System.out.println(tt);
   }
  }
 }
}


우선 Java에서 아주 쉽게 사용할 수 있는것 부터 소개 하도록 하겠다.

정규식에 대해서 기타 다른 프로그램도 동일하게 적용되는 부분이다. API에서는 이 부분을 "Predefined character classes"

라고 명명하였다.

[1] Predefined character classes

.       Any character                                                 : 어떤 문자든 . 으로 표현한다.
\d       A digit: [0-9]                            : 0부터 9까지의 숫자
\D       A non-digit: [^0-9]                       : 0~9까지의 숫자 가 아닌 것
\s       A whitespace character: [ \t\n\x0B\f\r]    : 띄워쓰기
\S       A non-whitespace character: [^\s]          : 띄워쓰기가 아닌문자
\w       A word character: [a-zA-Z_0-9]            : 대.소문자 영문자 + 숫자
\W       A non-word character: [^\w]               : (대.소문자 영문자 + 숫자) 가 아닌것

위의 Pattern은 모든 정규식에서 공통적으로 이용되는 정규식이기 때문에 외우두면 개발하기 매우 편하다.

다음으로 POSIX 에서 정의한 정규표현식을 알아보도록 하자. POSIX에서 정의한 정규표현식도 Java에서는 사용가능하다.

[2] POSIX character classes

\p{Lower} A lower-case alphabetic character: [a-z]                  : 영어 소문자
\p{Upper} An upper-case alphabetic character:[A-Z]                  : 영어 대문자
\p{ASCII} All ASCII:[\x00-\x7F]                                  : 아스키코드로 표현가능한 모든 문자
\p{Alpha} An alphabetic character:[\p{Lower}\p{Upper}]            : 모든 알파벳(대.소문자 포함)
\p{Digit} A decimal digit: [0-9]                                  : 0~9까지의 숫자
\p{Alnum} An alphanumeric character:[\p{Alpha}\p{Digit}]          : 알파뉴메릭(대.소문자 영문자 + 숫자)
\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~    : 키보드로 표현가능한 특수문자
\p{Graph} A visible character: [\p{Alnum}\p{Punct}]                : 알파뉴메릭 + 키보드로 표현가능한 특수문자
\p{Print} A printable character: [\p{Graph}\x20]                   : 알파뉴메릭 + 키보드로 표현가능한 특수문자
\p{Blank} A space or a tab: [ \t]                                 : 띄워쓰기 또는 Tab
\p{Cntrl} A control character: [\x00-\x1F\x7F]                     : 요건 나도 뭔지 잘 모름 ????
\p{XDigit} A hexadecimal digit: [0-9a-fA-F]                         : 16진수로 표현가능한 문자
\p{Space}

A whitespace character: [ \t\n\x0B\f\r]                 : Tab , Enter, Carrige Return 문자



위의 POSIX Pattern 자체가 좀 더 눈으로 식별하기는 쉬운 느낌이 든다.

[1] 과 [2] 외에도 여러가지 정규 표현식 들이 존재한다.

하지만, 내 생각에는 [1]과 [2]의 표현식 정도면 외우고 있고 적당히 조합을 하면 왠만한 문자열 패턴을 찾는

것은 쉬울것이라 생각한다.



 마지막으로, 한글을 어떻게 하면 걸러낼 수 있을까? 라는 의문점이 든다. 모든 정규표현식은 한글이 아닌 US 문자를 기준

으로 구현되었기 때문에 한글의 경우는 과연 어떻게 할까?

우선 정답은 다음과 같다.


matches("[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]")

대략 보면 다음과 같다.

(1) 모든 한글은 ㄱ 으로 시작해서 ㅎ 으로 끝난다.
(2) 모든 모음은 ㅏ 로 시작해서 ㅣ 로 끝난다.
(3) (1)과 (2)을 모두 조합해 보았을때 모든 문자는 가 로 시작해서 힣 으로 끝이 난다.



정규표현식은 잘쓰면 복잡한 코드를 상당히 줄 일 수 있는 아주 유용한 표현식이다. 어느정도 익혀 놓는다면

개발자가 퀀텀점프 할 수 있는 좋은 계기가 될 것이라 생각한다.


                                                                                            - 2012.01.20 랑이씀 -


반응형

'Program > JAVA' 카테고리의 다른 글

ShellScript를 이용한 jar파일만들기  (0) 2012.08.09
JAVA에서 윈도우 명령어 실행하기  (0) 2012.06.14
[ Vector와 ArrayList의 차이점]  (2) 2010.11.22
POJO(Plain Old Java Object) 란?  (5) 2010.11.05
Abstract Class란?  (0) 2010.09.16
반응형
PHP 에서 Json 인코드 하여 한글을 출력시에는 다음과 같이 코드를 짜면된다.

아주 쉽다.

(1) 일반적인 Json 한글 출력방법

  1 <?
  2    require_once "/home/srzero/public_html/airman/wpc/var/global.var.php";
  3
  4    $query="SELECT good.goodsno,link.category,good.goodsnm FROM gd_goods_link link,gd_goods good WHERE link.goodsno = good.goodsno AND good.open=1 AND link.category LIKE '".$category."%' ORDER BY goodsno asc";
  5
  6    $result = db_query($query,$DB_CONNECT);
  7
  8    $rows = array();
  9
 10    $i = 0;
 11    while($r= db_fetch_array($result)){
 12       $rows[] = urlencode($r[goodsnm]);
 13    }
 14
 15    $json_result =  json_encode($rows);
 16    echo urldecode($json_result);
 17
 18 ?>

urlencode / urldecode를 번갈아가며 사용해야지만, 한글이 제대로 출력이 된다.

(2) Ajax 호출시 Json 한글출력법

(2-1) 호출페이지 소스

 function makeProductList(){

      var form = document.frmMember;

      param = "category="+$("select[name=product_step_one]").val()

      $.ajax({
         type : "POST",
         url : "../../../../../wpc/webSrc/php/daemin/productListByCategory.php",
         dataType : "json",
         data : param,
         beforeSend : function(xmlHttpRequest){
         },
         success :  function(msg) {


            for(var i=0; i<msg.length; i++){
               var opt = form.product_step_two.options;
               optTxt = msg[i];
               optVal = msg[i];
               opt[i+1] = new Option(optTxt,optVal);
            }
         },
         error : function(xmlHttpRequest, textStatus, errorThrown){
            alert(textStatus + ", " + errorThrown);
         }
      });

}


(2-2) Json 응답 페이지

<?

   header("Content-Type: text/html;charset=euc-kr");
   header("Content-Encoding: utf-8");

   require_once "/home/srzero/public_html/airman/wpc/var/global.var.php";

   $query="SELECT good.goodsno,link.category,good.goodsnm FROM gd_goods_link link,gd_goods good WHERE link.goodsno = good.goodsno AND good.open=1 AND link.category LIKE '".$category."%' ORDER BY goodsno asc";

   $result = db_query($query,$DB_CONNECT);

   $rows = array();

   $i = 0;
   while($r= db_fetch_array($result)){
      $rows[] = encode_utf8(urlencode($r[goodsnm]));
   }

   echo json_encode($rows);

?>


위 소스에서 보면 header 값의 Content-Encoding을 셋팅하게 되어있다. 저걸 셋팅안해주면 아래 소스에서
 enncode_utf8을 하였다고 하더라도 , 결국 Ajax는 euc-kr로 응답받게 된다.

결국 소스의 최종 goal은 header를 바꾸어주느냐 마느냐에 있는 것이다.



반응형
반응형
일반 Form Page에서 파라미터값에 대해 어떻게 넘어가는지

PHP에서 알아볼 수 있는 방법은 한개밖에없다.

 <PRE>
  <? var_dump($_POST); ?>
</PRE>

위와 같은 방식으로 하면 아래와 같은 데이터가 나온다.

 <html>                                             
<head>                                            
</head>                                           
<body>                                            
<form action="insertOk.php" method="post">        
   <input type="text" name="wow[]" value="t1"><br>
   <input type="text" name="wow[]" value="t2"><br>
   <input type="text" name="wow[]" value="t3"><br>
   <input type="text" name="wow[]" value="t4"><br>
   <input type="text" name="wow[]" value="t5"><br>
                                                  
   <input type="submit" value="send">             
</form>                                           
</body>                                           
</html>
                                   

위 처럼 하였을때

다음 페이지는 이렇게 코딩하면된다.

 <?

    // POST 방식으로 넘어온 값을 전달받는 방법
    var_dump($_POST);


?>


아주 좋은 팀 같다. 이렇게 하니 결과물이 아래처럼 나온다.

 array(1) { ["wow"]=> array(5) { [0]=> string(2) "t1" [1]=> string(2) "t2" [2]=> string(2) "t3" [3]=> string(2) "t4" [4]=> string(2) "t5" } }

이렇게 보면 WOW라는 놈이 Array로 넘어오는 것을 확인 할 수 있다. ㅋㅋㅋ

이상 PHP간략한 팁이었음.

반응형

+ Recent posts