'공부 > JAVA' 카테고리의 다른 글

JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23
JAVA_[StringTokenizer 과 Split 의 차이]  (0) 2012.06.21
JAVA_[텍스트파일읽기_예제]  (0) 2012.06.21

- Request 기본 객체는 JSP 페이지에서 가장 많이 사용되는 기본객체로 웹브라우저의 요청과 관련이 있다.

  웹 브라우저(사이트 주소입력) -> 해당 웹 서버(요청 정보 전송)

  클라이언트가 전송한 요청 정보를 제공하는 것이 바로 Request 이다.

 

#### Request 의 제공하는 기능 ####

  - 클라이언트(웹 브라우저)와 관련된 정보 읽기

  - 서버와 관련된 정보 읽기

-------------------------------------------------------------------------------

* 클라이언트 및 서버 정보 관련 메서드 *

gerRemoteAddr()               :  클라이언트의 IP주소

getContentLength()            :  클라이언트가 전송한 요청 정보의 길이

getCharacterEncoding()     :  클라이언트가 요정 정보를 전송할 때 사용한 캐릭터 인코딩

getContentType()               :  클라이언트가 요청 정보를 전송할 때 사용한 컨텐트의 타입

getProtocol()                     :  클라이언트가 요청한 프로토콜

getMethod()                      :  웹 브라우저가 정보를 전송할 때 사용한 방식(GET/POST) 

getRequestURI()                :  웹 브라우저가 요청한 URL에서의 경로

getContextPath()                :  JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로

getServerName()                :  연결할 때 사용한 서버 이름

getServerPort()                  :  서버가 실행 중인 포트 번호

-------------------------------------------------------------------------------

 

  - 클라이언트가 전송한 요청 파라미터 읽기

-------------------------------------------------------------------------------

* 파라미터 읽기 메서드 *

getParameter(String name) / returnType - String                      :  이름이 name 인 파라미터의 값을 구함.

getParameterValues(String name) / returnType - String[]         :  이름이 name 인 모든 파라미터의 값을 배열로 구함.

getParameterNames()                  / returnType - Enumeration   :  웹 브라우저가 전송한 파라미터의 이름을 구함.

getParameterMap()                     / returnType - Map              :  웹 브라우저가 전송한 파라미터의 맵을 구한다.

<Key, Value>

 ------------------------------------------------------------------------------

 

  - 클라이언트가 전송한 요청 헤더 읽기

  - 클라이언트가 전송한 쿠키 읽기

  - 속성 처리

  

#### JSP 페이지 읽어 올때 웹컨터이너가 사용할 캐릭터 셋을 결정짓는 기본과정 ####

 

※ BOM : Byte Order Mark 의 약자.

    - UTF-16 이나 UTF-32 와 같은 유니코드에서 바이트의 순서가 '리틀엔디언' 인지 '빅 엔디언' 인지의 여부를 알려주는 값. 

 

1. 파일이 BOM 으로 시작하지 않을 경우

  - 기본 이코딩을 이용해서 파일을 처음부터 읽고,

     JSP 페이지 내의 Page 디렉티브의 pageEncoding 속성을 검색한다.

     (단, pageEncoding 속성을 찾기 이전에 ASCII 문자 이외의 글자가 포함되어 있지 않아야 함.) 

 

  - pageEncoding 속성이 값을 갖고 있다면, 속성의 값을 파일을 읽어올때 사용할 캐릭터 셋으로 사용

 

  - pageEncoding 속성이 없으면, contentType 속성을 검색.

    contentType 속성이 존재학 charset을 이용해서 캐릭터 셋을 지정했다면, 파일을 읽어 올때 사용할 캐릭터 셋으로

    charset에 지정한 값을 사용한다.(단, 위와같이 contentType 속성을 찾기전에 ASCII 문자 이외의 글자가 포함되어 있으면 안됨)

 

  - 위의 모든 경우에 해당되지 않을 경우 ISO-8859-I 을 캐릭터 셋으로 사용한다.

 

 

2. 파일이 BOM으로 시작할 경우

  - BOM 을 이용ㅎ서 결정된 인코딩을 이용하여 파일을 읽고, page 디렉티브의 pageEncoding 속성을 검색.

 

  - 만약 pageEncoding 속성의 값과 BOM 을 이용해서 결정된 인코딩이 다르면 에러를 발생 시킨다.

 

  - 위의 두 과정을 통해 설정된 캐릭터 셋을 이용하여 파일을 읽어온다.

'공부 > JSP' 카테고리의 다른 글

JSP_[웹 어플리케이션의 초기화 파라미터 값 설정]  (0) 2012.09.19
JSP_[JSP 페이지의 초기화 파라미터]  (0) 2012.09.18
JSP_[JDBC 예제]  (0) 2012.07.24
JSP_[Request_기본객체]  (0) 2012.06.21
JSP_[페이지의 구성요소]  (0) 2012.06.21

### JSP 구성요소 ###

 

● 디렉티브

   - Page

   - Taglib

   - Includ

   - Import

   - Session

   - Buffer

   - autoFlush

   - errorPage

   - Info

   - pageEncoding  등 ...

● 스크립트

   - 표현식

      ex) <%= >

   - 스크립트릿

      ex) <%  자바코드 %>

   - 선언부

      ex) 자바 메소드(함수)/ <%! 자바함수 %>

● 기본객체

● 정적인 데이타

● 표준 액션 태그

      ex) <jsp:include> 

● 커스텀 태그 & 표준 태그 라이브러리(JSTL)

- StirngToKenizer 과 Split 의 차이점

 

### StringTokenizer ####

 

보통 문자열을 쪼개서 사용을 할때 많이 사용하는 것이 String Tokenizer 이다.

하지만, 조심해야 한다. 특정 구분자로 문자를 자를때 Null 값을 출력하지 못한다.

예를 들면,

String _str = "최우철|김진성||김성수";

StringTokenizer _tokens = new StringTokenizer(_str, "|");

for ( int i = 1; tokens.hasMoreElements(); i++ ) {

System.out.println("문자" + i + " = " + tokens.netToken() );

}

결과는

문자1 = 최우철

문자2 = 김진성

문자3 = 김성수

 

이렇게 나오게 된다. 즉 구분자("|") 로 따지면 Null 값이지만 값은 4개다.

하지만, 인식을 못한다.

만약에, DB 에 INSERT 한다면, 필드가 하나 빠지게 된다.

조심하자. 그래서 SDK 1.4 부터 나온 Split() 가 있다.

 

### Split ####

 

Stirng _str = "최우철|김진성||김성수";

String[] _values = _str.split("|");

for( int i = 0; x < _values.length; i++ ) {

System.out.println("문자" + (i+1) + " = " + _values[i] );

}

결과는

문자1 = 최우철

문자2 = 김진성

문자3 =

문자4 = 김성수


만약에, 맨 뒤에 값이 없을 경우에는 어떻게 처리할까?

String _str = "최우철|김진성|김성수||";

String[] _values = _str.split("|");

결과는

문자1 = 최우철

문자2 = 김진성

문자3 = 김성수

이렇게 나온다. 참고! split / StringTokenizer 두개 모두 이런경우에는 3개만 나온다.

하지만 마지막 데이타도 Null 값으로 출력을 하고 싶다면...

당연 split() 메서드다.

이클립스 split() 자동완성 API 를 보면 오보로딩 된 메서드로 2개가 있다.

1. split( String regex ) / 2. split( String regex, int limit )

2번 split( String regex, int limit ) 를 사용하면 limint int 만큼 배열의 Null 값 입력

문자열이 limit int 보다 크면 limit int 만큼만 출력하고 나머지는 버린다.

'공부 > JAVA' 카테고리의 다른 글

JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23
JAVA_[코딩_지침]  (0) 2012.06.21
JAVA_[텍스트파일읽기_예제]  (0) 2012.06.21

- 회사에서 '우편모아 시스템' 도로명 주소 검색시 INSERT 를 위해 GOOGLE 검색해서 만든 코드.

  1줄씩 읽어와서 처리. 특정 경로의 1개의 파일만 읽을시에는 File file = new File("경로/텍스트파일명")

  특정 폴더의 모든 텍스트 파일을 읽어 오려면 아래의 예제 처럼 사용하면 된다.

  사용하는 코드를 그대로 옮겨 놓은 것이므로 조금은 예제의 목적에 맞지 않지만 이해하자.

 

 

#### JAVA_텍스트파일읽기_예제 ####

 

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;

import com.srpost.salmon.lang.StringUtil;

public class ConversionMain {
   
    /* 새주소 텍스트 파일 postmoa insert 변환 */
    /* 텍스트 파일 구분자 */
    private final static String DELIM = "|";
    /* 변환할 도로명주소 텍스트파일 저장경로 */
    private final static String READ_TXT_PATH = "D:/DEV/PROJECTS/postmoa_juso_conversion/file/read/";
    /* 변환후 도로명주소 텍스트파일 저장경로 */
    private final static String CREATE_TXT_PATH = "D:/DEV/PROJECTS/postmoa_juso_conversion/file/create/";

    public static void main(String[] args) throws Exception {

        try {
            File file = new File(READ_TXT_PATH);
            File[] files = file.listFiles();

            /* READ_TXT_PATH 경로의 파일 수 체크 */
            int _fileLen = files.length;
            System.out.println(" [FileLength] :" + _fileLen);

            // FileReader fr = null;
            BufferedReader br = null;

            String read = null;

            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                String filePath = files[i].getPath();
                System.out.println(" [FileName] : " + fileName);
                System.out.println(" [FilePath] : " + filePath);

                // fr = new FileReader(filePath);
                File _encodingFile = new File(filePath);

                /* 인코딩 해서 BufferedReader */
                br = new BufferedReader(new BufferedReader(
                        new InputStreamReader(
                                new FileInputStream(_encodingFile), "UTF-8")));

                /* 변환 후 텍스트 파일 생성 */
                FileWriter out = new FileWriter(CREATE_TXT_PATH + "변환_" + fileName);

                while ((read = br.readLine()) != null) {

                   /* 회사 Salmon 프레임워크 코드 문자열 구분자("|") 잘라서 String[] 에 넣기 */
                    String[] _linez = StringUtil.fastSplit(read, DELIM);

                    String _lineStr = "";

                    _lineStr = _linez[19] + "|" + _linez[1] + "|" + _linez[2]
                            + "|" + _linez[3] + "|" + _linez[4] + "|"
                            + _linez[5] + "|" + _linez[6] + "|" + _linez[7]
                            + "|" + _linez[9] + "|" + _linez[11] + "|"
                            + _linez[12] + "|" + _linez[13] + "|" + _linez[14];
                    out.write(_lineStr + "\n");
                }
                out.close();
            }
            // if(fr!=null)fr.close();
            if (br != null)
                br.close();

            System.out.println(" [FileCreate_End !!!] ");
        } catch (Exception e) {
            System.out.println("Error :" + e.getMessage());
        }

    }// end - main
}// end - class

 

'공부 > JAVA' 카테고리의 다른 글

JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23
JAVA_[코딩_지침]  (0) 2012.06.21
JAVA_[StringTokenizer 과 Split 의 차이]  (0) 2012.06.21

+ Recent posts