2010년 11월 27일 토요일

[WEB] form 의 GET & POST 방식의 차이

 

 

 

 

 

 

 

 

웹 문서에서 아이디나 비밀번호 또는 다른 데이터 들을 서버측 으로 보낸 다음 수행이 되는 경우가 있다. 이때 문서에서 서버측 으로 데이터가 전달되는 방법이 2가지가 있는데 GET 방식과 POST방식이다. 각각의 방식들은 나름대로의 장단점을 가지고 데이터를 전달하는 역할을 한다.




GET 방식

1.웹 브라우저의 주소 입력란에서 아래와 같이 직접 입력하여도 데이터를 서버로 전송한다.(클라이언트로 부터의 데이터를 이름과 값이 겨합된 스트링 형태로 전달 하므로 각각 이름과 값은 “&”를 이용하여 결합한다.

ex) (http://localhost/chs/book/Request.jsp?Name=Michael&Depy=Computer)

2.기본적으로 데이터베이스에 대한 질의어 데이터와 같은 요청을 위한 정보를 전송할 때 사용

3.GET방식으로 보낼때는 같이 딸려가는 글자수에 제한이 있다(255자).

4.GET 방식을 사용하면 이를 초과하는 데이터가 절단된다.

5.GET 방식을 사용하면 데이터가 주소 입력란에 표시되므로 최소한의 보안도 유지되지 않는다.

6.GET 방식은 정보를 URL의 끝에 질의 문자열로서 서버로 보내어진다.

7.데이터를 쿼리 스트링(Query String)의 일부로써 전달한다.

8. 일반적인 HTTP 호출은 모두 GET 방식으로 이루어진다.

9.변수 넘기지 않는 일반 호출도 GET 이다.

10. 사용이 간편하다는 장점이 있다.

11.사용 예)

get 방식 예제

<HTML>

<HEAD><TITLE> get 방식 예제 </TITLE></HEAD>

<BODY><CENTER>

<FORM NAME="form1" ACTION="get_meth_view.asp" METHOD="get">

    이 름 : <INPUT TYPE="text" NAME="uname">

    메 일 : <INPUT TYPE="text" NAME="mail">

    <P></P>

    <INPUT TYPE="submit" VALUE="전송">

    <INPUT TYPE="reset" VALUE="다시">

</FORM></CENTER>

</BODY>

</HTML>

테스트 후 브라우저의 주소박스에 보여지는 URL은 다음과 같다.

http://localhost/object_asp/get_meth_view.asp?uname=seong+gigoo&mail=midibest@orgio.net




POST 방식

1.POST 방식은 HTTP 헤더에 숨겨져(인코드되어) 서버로 전송이 됩니다.

2.다음과 같이 브라우저의 주소창에는 실행 파일명만 나타납니다.

http://localhost/object_asp/post_meth_view.asp

3.일반적으로 HTML의 FORM을 이용해서 넘기는 방식입니다.

4.이 방식은 서버에 값을 넘기기 위해 만들어진 방식입니다.

5. 데이터베이스에 대한 갱신 작업과 같은 서버측에서의 정보 갱신 작업을 원할 때 사용

6.POST 방식을 사용하면 GET 방식에 비해 상대적으로 처리 속도가 늦어짐

7.클라이언트로부터의 데이터가 HTTP 헤더에 포함되어 전송

8.일정한 크기 이상의 데이터를 전송할 때에는 POST 방식을 사용

9.내부의 구분자가 각 파라미터(이름과 값)를 구분

10.클라이언트측에서 데이터를 인코딩 → 서버측에서 디코딩 클라이언트와 서버간에 상호 정의되어 있는 형식대로 값을 인코딩한 다음 서버로 전송

서버 : 전달된 스트링을 디코딩 → 각 파라미터를 구분 → 필요한 값들을 추출

11.사용 예)

파일명 : post_meth_vtest.htm

<HTML>

<HEAD>

<TITLE> POST 방식 예제 </TITLE>

</HEAD>

<BODY>

<CENTER>

<FORM NAME="form1" ACTION="post_meth_view.asp" METHOD="post">

    이 름 : <INPUT TYPE="text" NAME="uname">

   <BR>

    메 일 : <INPUT TYPE="text" NAME="mail">

  <BR><BR>

    <INPUT TYPE="submit" VALUE="전송">

    <INPUT TYPE="reset" VALUE="다시">

</FORM>

</CENTER>

</BODY>

</HTML>

출처 : Tong - bitworld님의 ♣ php/mysql통


==========================

<input type='hidden' name='mode' value='mode'>

 

 

 

 

 

[출처] - http://www.ezslookingaround.com/blog/tech/?no=1380

 

 

 

 

 

 

 

2010년 11월 23일 화요일

웹에서 로딩 gif 만들기

 

 

 

 

 

http://www.webscriptlab.com/

 

 

들어가 보셔요~

[Android] 한 줄에서 몇 줄로 되는 필요한 잡코드들

 

 

 

17. Android 키보드 숫자형으로 시작하게 하기
edittext.setInputType(InputType.TYPE_CLASS_NUMBER);

16. Android listview 검정화면 없애기
android:cacheColorHint="#00000000"

15. Android 화면 고정하기
AndroidManifest.xml의 activity 속성중 screenOrientation을 다음과 같이 지정해준다.

//화면을 세로로 유지
<activity android:name=".Powermeter"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait">
//화면을 가로로 유지
<activity android:name=".Powermeter"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape">
자바 소스에서
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

14. Android Handler example
  // 시간주고 바로 뜨게 하기 20이 최소 가능 값..
        new Handler().postDelayed(new Runnable() {
            public void run() {
                openOptionsMenu();
            }
        }, 20);

13. Android 소프트 키보드 끄기 및 보이기 및 숨기기
  // 키보드 오프시키는 소스..
  EditText et = (EditText)findViewById(R.id.menu6_e_number);
  et.setInputType(0); //가상키보드 오프

1. 보이게 하기

EditText et = (EditText)findViewById(R.id.moneyEdit);
et.setInputType(0); //가상키보드 오프
       
        et.setOnClickListener(new OnClickListener() {  
   public void onClick(View arg0) {    
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
          imm.showSoftInput(input, 0);
   }         
        });

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, 0);

2. 숨기기
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);


12. Android  Edittext Hint, 흐리게 보이기
android:hint="ex) 안드로이드"


11. Android  EditText 숫자키만 허용하기

DigitsKeyListener digit =
new DigitsKeyListener(true, true); // first true : is signed, second one : is decimal
digit.setKeyListener( MyDigitKeyListener );

위와같이 하거나 xml 에서

android:inputType="number"


10. Android  Option menu 실행 소스
openOptionsMenu();


9. Android Menu 만들기
- xml 소스
res/menu/menu.menu

<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item
  android:id="@+id/adjust"
  android:title="수정"
  android:orderInCategory="1" >
 </item>
 <item
  android:id="@+id/delete"
  android:title="삭제"
  android:orderInCategory="2" >
 </item>
</menu>

- 자바 소스
 // OptionMenu
 public boolean onCreateOptionsMenu(Menu menu){
  getMenuInflater().inflate(R.menu.del_adjust, menu);
  return true;
 }

    // OptionMenu click event
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
   case R.id.adjust:
    finish();
    return true;
   
   case R.id.delete:
    finish();
    return true;
  }
  return false;
 }

8. Android Dialog 만들기 (Android.Dialog.Builder())

기존에는 Activity에서 showAlert(()를 제공해줬나보다. (예제를 보니...)
더 이상 지원하지 않기 때문에 AlertDialog.Builder()를 이용하여 Dialog를 생성하였다.

*onClickLister() 생성시 반드시 DialogInterface.OnClickListener()라고 클래스를 적어줘야 한다.
 (Activity에서 button 클릭 이벤트를 처리하기 위해 import한 View 클래스에 OnClickListener 메소드가 있다.)

a. Android  yes or no - 버튼 2개짜리
new AlertDialog.Builder(LoginMainActivity.this)
.setTitle("Login Data")
.setMessage("rosa : test") //줄였음
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {                                        
        //...할일
    }
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        //...할일
    }
})
.show();

b. Android  ok (or cancel)
new AlertDialog.Builder(LoginMainActivity.this)
        .setTitle("Login Data")
        .setMessage("rosa : test") //줄였음
        .setNeutralButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {                                        
                //...할일
            }
        })        
        .show();

c. Android   다른 layout 출력
new AlertDialog.Builder(LoginMainActivity.this)
.setTitle("list 예제")        
.setItems(R.array.listBtnArray, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int selectedIndex) {        
        String[] list = getResources().getStringArray(R.array.listBtnArray);        
        new AlertDialog.Builder(LoginMainActivity.this)
        .setTitle("선택한 리스트 아이템")
        .setMessage(list[selectedIndex])
        .setNeutralButton("OK", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub                        
            }                    
        });                
    }
    })
.show();

--
value 값으로 array 추가
<string-array name="listBtnArray">
        <item>One</item>
        <item>Two</item>
        <item>Three</item>
    </string-array>



7. Android  뒤로 가기 키
 onBackPressed();

6. Android  바이브레이터
Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibe.vibrate(500);
// 퍼미션        
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>

5. Android  밝기 셋팅
Window w = getWindow();
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0~1까지의 float 값;
w.setAttributes(lp);

-1.f를 주면 default 밝기로 세팅됩니다.

4. Android  화면 꺼지는것 막기
현재 Activity가 보여지고 있는 동안은 시간이 지나도
화면이 자동으로 꺼지지 않도록 합니다.
즉 단말이 슬립상태로 들어가지 않고 계속 화면을 켜놓습니다.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

3. Android  toast
1-Type
Toast.makeText.(this, "토스트 메세지", Toast.LENGTH_SHORT).show();

2-Type
Context context = getApplicationContext();
String msg = "";
int duration = Toast.LENGTH_SHORT;
Toast.makeText(context, b, duration).show();


2. Android  View 백그라운드 색 변경
TextView a = null;
a.setBackgroundColor(Color.WHITE);

1. Android  timer 이용
http://docs.androidside.com/docs/reference/java/util/TimerTask.html
--------------------------------------------------------------------------------------------------
모토로이 볼륨 올리고 내리는 버튼 키값을 알아내서
edittext 에 원하는 값을 넣는 방법 볼룸 위아래 버튼을 누르면
화면에 벨로시 볼륨 조절하는 창이 나타나는데 완전히 키값을 가로채는 방법

et_editText.setOnKeyListener(new OnKeyListener() {
       
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
           // TODO Auto-generated method stub
           if(event.getAction() == KeyEvent.ACTION_DOWN){
              if(keyCode == 24 || keyCode == 25){
              et_editText.setText("1234567890");
             
              return true;
              }
           }
           return false;
        }
       
     });


- 전체적으로 필요한 기능
// 종료 후 재 부팅시 기능이 죽지않고 유지되게 하는 방법들..
http://www.androidpub.com/android_dev_qna/189549

- 박사마 만드는데 필요한 기능
// view에서  페이지 넘기는 기능
API Demos에서 Animation에 간단하게 Fade in, Zoom in 효과가 있네요.

내가 만드는 부분에 필요한 부분들
// 강제로 클릭을 발생시키는 이벤트
dispatchTouchEvent
// 좌표관련들..
getWidth()랑 getHeight()로 전체 좌표값을 얻어오고 %로 비율 정해서 좌표값 설정하세요






[출처] - http://winchester.tistory.com/tag/%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EC%83%89%20%EB%B3%80%EA%B2%BD



2010년 11월 20일 토요일

[JAVA] int, float, double ↔ String 형변환 / 진수 변환

 

 

 

 

숫자를 문자열로 바꾸기
int i = 1234;
String s = String.valueOf(i);     문자열 "1234"로 변환
String s = Integer.toString(i);   문자열 "1234"로 변환
String s = ””+i;                문자열 "1234"로 변환
String s = “”+12.34;            문자열 "12.34"로 변환
String s = “”+0;                문자열 "0"로 변환

 

문자열을 숫자로 바꾸기
String str = "1234";
int i = Integer.valueOf(str).intValue();
int i = Integer.parseInt(str);
long i = Long.parseLong(str)
double i = Double.valueOf(str).doubleValue();
Byte.parseByte(str)        바이트형 정수로 변환
Short.parseShort(str)      short형 정수로 변환
Integer.parseInteger(str)  int형 정수로 변환
Long.parseLong(str)        long형 정수로 변환
Float.parseFloat(str)      float형 부동 소수로 변환
Double.parseDouble(str)    double형 부동 소수로

 

 

문자 16진수 → 숫자 10진수

String strHexValue = "A";
System.out.println(Integer.parseInt(strHexValue, 16));

>> 10

 

숫자 10진수 → 문자 16진수

System.out.println(Integer.toString(intHexValue, 16));

>> a

 

소문자 → 대문자

String strSmallA = "a";
String strLargeA = strSmallA.toUpperCase();

 

문자 비교

"a".equals("A") → false
"a".equalsIgnoreCase("A") → ture

 

 

 

 

 

 

 

 

2010년 11월 19일 금요일

Android의 TableLayout 의 코너를 둥글게

 

 

 

 

 

iPhone 의 UI 를 보면 다음의 이미지와 같이 테이블의 네귀퉁이 각 모서리가

둥글게 둥글게 처리되어 있는것을 볼수 있다.




이와같은 둥근 모서리를 안드로이드에서 구현을 해보려고 한다.
처음엔 9Patch image 를 쓰려했지만 검색결과 Drawable XML 을 가지고 편하게
둥근 모서리를 구현시킬수 있었다.
나는 TableLayout 에 적용해보았지만 백그라운드에 적용시키는것이기 때문에
다른곳에도 적용할수 있을 것이다.

먼저 Reaource (res) 안의 drawable 폴더에 다음과 같은 XML 을 생성한다.
나는  com_rounded_corner.xml  이라고 저장 하였다.

<?xml version="1.0" encoding="UTF-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#99FFFFFF"/>

    <corners android:radius="15dip"/>

    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /> 

</shape>


그리고 layout 의 적용할 부분의 background 에 해당 XML 을 넣어준다.

<TableLayout android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/com_rounded_corner"

android:padding="10dip"

android:orientation="vertical">


...


</TableLayout>


그러면 다음과 같이 둥글게 깍인 백그라운드를 쉽게 가질수 있다 :-)

2010년 11월 9일 화요일

[Android] 웹페이지 소스 텍스트파일로 저장하기

 

//넘겨주는 url인데 한글을 넘겨줄때 인코딩을 해서 넘겨줘야 한다는것!

String url_str = "http://map.naver.com/local/search.nhn?query=";
String searchName = URLEncoder.encode("부산 남구  감만2동 경명중국관");
   
    try {
     InputStream inputStream = new URL(url_str+searchName).openStream();
     InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8");
     BufferedReader br = new BufferedReader(isr);
     
     File file = new File("/mnt/sdcard/url.txt");
     OutputStream out = new FileOutputStream(file);
     writeFile(br, out);
     out.close();
    }
    catch (Exception e) {
     
    }
    finally {
     Toast.makeText(parsingtest.this, "저장완료", Toast.LENGTH_SHORT).show();
    }

 

 

 

//AndroidManifest.xml에 권한 추가하기

<!-- 외부메모리에 저장할때 작성 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

2010년 11월 5일 금요일

[JAVA] 스트링(String) 클래스의 length, substring, compareTo 와 StringTokenizer() 클래스

 

 

자바기반인 안드로이드의 문자열을 다룰때 사용할 스트링 클래스들 입니다.

 

스트링 클래스에는 문자열을 분석하거나 조작하기 위한 몇가지 기본 메서드를 지원한다.

<length() 메서드>

String a = "ABC";
int len = a.length();

이것은, 문자열의 길이를 구해준다.

재미있는 점은, 한글이나 영문,숫자등을 모두 한글자를 1 로 계산한다는 것이다.

    String a = "ab";
    String b = "가나";
    System.out.println(a.length());
    System.out.println(b.length());

위와같이 영어 두글자와 한글 두글자의 길이를 출력시키면, 모두 2 라는 똑같은 값이 나온다.
즉, 바이트 기준이 아니라, 문자 기준이라는 것이다.

일부, 프로그램에서 한글의 경우 2배수가 나오는 것에 비하면 꽤나 편리한 편이다.


<substring() 메서드>
substring() 메서드는 자바스크립트나 php 에서와 동일하게 문자열의 일부를 가져오는 것이다.

String a = "ABCDEF";
String b = a.substring(2, 5);  //2번 이후부터 5번 전까지 가져옴 (CDE 를 가져옴)

역시, 주의할점은, 처음 시작이 0 번 부터라는 것이다.
즉, A=0, B=1, C=2, D=3, E=4, F=5
가 되고, 2번부터라면, C 부터 시작함을 의미하고, 5번 전까지이기 때문에 E 까지 가져온다.

    String a = "abcdef";
    String b = "가나";
   
    String c = new String();
    c = a.substring(2,5);
    System.out.println(c);  // 'cde' 출력
   
    String d = new String();
    d = b.substring(1,2);  //'나' 출력
    System.out.println(d);

위의 출력 예를 보면 이해가 쉽다.

자바나, php 등을 오래 한사람은 substring 가 익숙하겠지만,
ASP 의 Mid 나 substr 같은 용법에 익숙한 사람은 아무래도 헷갈리는데,
아쉽게도 자바에는 기본적으로 substr 메서드가 없다.


<compareTo() 메서드>

메서드 이름에서 알 수 있듯이, 이는 두 문자열을 비교하는 메서드이다.

public class a
{
  public static void main(String [] args){
    String a = "ABC";
    String b = "ABC";
    String c = "BCD";
    String x = "B";
   
    int d = a.compareTo(b);
    int e = a.compareTo(c);
   
    System.out.println(d);  //0 출력
    System.out.println(e);  //-1 출력
   
    int y = a.compareTo(x);
    System.out.println(y);  //-1 출력
   
    int w = x.compareTo(a);
    System.out.println(w);  //1 출력
  }
}

즉, a 와 b 를 비교했을때, 완전히 일치하기 때문에 0 을 반환하였고,
a 와 c 를 비교했을때, 부분적으로는 비슷한 문자가 들어있지만, 문자열 전체를 봤을때는 일치하지 않으므로, -1 을 반환한다.
(-1 은 전혀 다르다는 것을 의미)

그런데, 특이한 점은(주의) 어느것을 기준으로 비교하느냐에 따라 값이 차이가 난다는 것이다.
a.compareTo(b)
라는 문법은, b 에다가 a 문자열을 대조해보는 것으로, 기준이 되는 것이 괄호안에 들어 있는 b 문자열이다.
따라서,
x="B" 에다가 a="ABC" 를 비교하면, 어느곳에도 일치하지 못하기 때문에 -1 이 반환되지만,
a="ABC" 에다가 x="B" 를 비교하면, 문자 B 가 두번째에 위치하고 있기 때문에(0부터 시작해서 1위치),
결과값이 1 이 반환되는 것이다.

테스트를 통해서도 보았지만, 어느것을 기준으로 비교하는지 헷갈리지 않도록 주의해야 하며,
대체로는 지정한 문자열이 대상 문자열에 들어 있는지 또는 두 문자열이 똑같은지 정도로만 체크하는 용도로 주로 사용된다.


<StringTokenizer() 클래스>

StringTokenizer 클래스는 문자열을 분할하는 클래스이다.(분할한 문자열을 토큰이라고 부른다)
이것은 자바스크립트, PHP 의 split 와 비슷한 기능을 하는 클래스이다.

사용 방법은 아래와 같다.

StringTokenizer a = new StringTokenizer("i,love,cat", ",");

이것은 'i,love,cat' 라는 문자열을 콤마(,) 를 기준으로 분할한다는 의미이다.
이렇게 분할해서, 만약 분할이 되면(토큰이 있으면) true 를 반환한다.
그러면, nextToken() 메서드를 이용해 하나씩 불러올 수 있다.

사용예시)
<a.java 의 내용>------------------------------

import java.util.*;

public class a
{
  public static void main(String [] args){
    StringTokenizer msg = new StringTokenizer("i,love,you", ",");
    //만약, 토큰의 분할 방법을 기술하지 않으면 공백을 기본으로 하여 구분한다.
    // StringTokenizer("i love you"); 와 같이 사용 가능.
   
    String a="",b="",c="";
   
    //System.out.println(msg);
    /* 아래와 같이 직접 지정할 수 있다.
      a = msg.nextToken();
      b = msg.nextToken();
      c = msg.nextToken();
     
      String x = a + b + c;  //iloveyou 출력
      System.out.println(x);
    */
   
    String x = new String();
   
    //x = msg.nextToken();  //이 부분은 써도되고, 안써도 상관없다.
    while(msg.hasMoreTokens()){  //토큰이 없을때까지 반복한다.
      x = x + msg.nextToken();
    }
    System.out.println(x);  //iloveyou 출력
  }
}
--------------------------------------------

주의할점은, StringTokenizer 클래스를 사용하기 위해서는 java.util 을 임포트 해야 한다는 것이다.