성장 일기/쌍용교육센터 / / 2023. 4. 18. 13:26

0417/다운로드, 웹 동작 방식

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/sangyoungjsp에 올려두었습니다.

 

무조건 다운로드

  - web browser는 브라우저가 해석할 수 있는 파일은 브라우저 안에서 보여준다.

    (이미지, text, xml, json, 서버에서 실행 될 수 있는 SSS)  서버의 정보를 얻을 수 있다.
  - 브라우저가 해석할 수 없는 파일은 자동 다운로드 수행
  - IOStream을 사용

// 0. 페이지 지시자 contentType 변경( HTML응답에서 Stream 응답 변환 )
contentType="application/octet-stream"

//1.응답 헤더를 변경                                                                             
response.setHeader("Content-Disposition","attachment;fileName=다운로드할파일명");
// 설정하지 않으면 JSP명으로 다운로드가 된다

// 2. 다운로드할 파일의 정보를 얻기
// 업로드한 파일의 경로 + 이전페이지에서 선택한 파일명
File file=new File("다운로드할 파일의 경로");

// 3. 다운로드할 파일에 input stream 연결
FileInputStream fis=new FileInputStream("읽어들인 파일의 경로");

// 4. 읽어들인 파일의 내용을 저장할 배열 생성
byte[] read=new byte[(int)file.length()];

int temp=0;// 읽어들인 값을 저장할 변수
int i=0; // 배열 방에 값을 넣기위한 인덱스 변수
  
// 파일에서 읽어들인 내용을 배열에 할당
// 배열은 파일과 똑같은 크기를 가지게 된다. 
while( (temp=fis.read()) != -1 ){
 read[i]=(byte)temp;                  
 i++;
}
//출력스트림 초기화 : out은 HTML을 출력할 목적의 스트림으로 파일을 출력하기 위해
// out을 초기화
out.clear();
// 설정된 응답헤더를 초기화된 스트림에 설정( 다운로드할 파일명 설정)
out=pageContext.pushBody(); // JSP의 정보를 접속자에게 출력하기 위해 내장 객체 사용
// 파일을 쓰기위해 출력 스트림 얻기
OutputStream os=response.getOutputStream();
// 파일 출력
os.write( read );// 파일 크기대로 저장된 배열을 스트림에 쓴다.
//스트림 끊기
os.flush();

 

*  charset을 변경해야 패킷을 타고 나갈 수 있다.

 

웹 동작방식

  - 동기식, 비동기식

 

* 동기 방식 동작

  - 요청을 보내면 브라우저는 응답받은 HTML 을 그리기위해 웹 브라우저 안의 내용을 
    지우고, 서버에서 처리 결과 올 때까지 기다린 후 처리 결과가 오면 다시 그린다.

    (화면 깜빡임 발생)

  - <a>, <form>으로 요청을 보낼 때 동기 방식으로 동작
  - 로딩된 페이지가 아닌 전체를 다시 그릴 때 사용
  - 단점 : 화면 일부분이 변경되더라도  모든 데이터를 다시 받아와서 다시 그린다. 

 

* 비동기식

  - 데이터만 보내고, 데이터만 받아 오는 방식
  - RIA(Rich Internet Application) => 접속자의 자원을 많이 사용하는 internet application
    AJAX (JavaScript)
  - XMLHttpRequset : JS에서 요청을 보내고 응답을 받을 수 있는 객체

  - JavaScript으로 요청을 보내고, JavaScript에서 응답을 받는 방식
    ( XMLHttpRequest - 자바스크립트 객체를 사용 )
  - 화면 깜빡임이 발생하지 않는다.(화면 전체를 갱신하는 것이 아님)
  - 데이터만 주고 받기 때문에 네트워크 사용 비용이 동기식보다 적다.
  - JavaScript에서 DOM을 사용하여 변경할 디자인이 있는 곳을 찾아서

    응답받은 데이터를 사용하여 디자인을 만들어 보여준다. 

 

 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

0419/Parsing  (0) 2023.04.20
0418/AJAX, JSONObject  (0) 2023.04.18
0415/FileUpload  (0) 2023.04.16
0414/DBMS 암호화  (0) 2023.04.16
0413/DBCP, 로그인 흐름  (0) 2023.04.13
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유