[네이버 클라우드 캠프-DevOps] 19일차

정지안·2023년 7월 3일
0
post-thumbnail

Java

파일 처리

파일 처리의 개념

  • 파일 처리란 읽기,쓰기,편집 등 파일에 대한 다양한 기능을 수행하는 것을 말함

입출력스트림

  • 스트림은 데이터 전달 방식에 따라 바이트스트림과 문자스트림으로 구분.
  1. 바이트 스트림 : 영상,음성,영문자 등 바이너리 데이터를 처리. 1바이트단위.
    • 입력스트림
    • 출력스트림
  2. 문자 스트림 : 2바이트 단위의 문자 입출력을 처리할 수 있는 수단 제공.
    • Reader 스트림
    • Writer 스트림

바이너리타입

입력스트림(input stream)

네트워크상에서 데이터가 줄지어서 흘러 들어가는 것

대역폭이 크면 넓게 들어갈 수 있고

대역폭이 작으면 좁게, 차선에 맞춰서 줄지어서 간다.

ex_) 저장장치에있는걸 화면으로 불러오는것

출력스트림

네트워크상에서 데이터가 줄지어서 흘러나오는 것

ex)화면에있는걸 저장장치에 저장

주기억장치⇒화면에보이게해주는것

파일 처리 과정

  1. File 클래스로 파일 열기(생성)
  2. 입출력 스트림 클래스로 파일 읽기 쓰기
  3. 파일 읽기/쓰기 종료하기(닫기)

파일 생성

import java.io.File;

  • .exists()
    • 존재하는지 확인하는 메서드
메서드의미
파일 변수.getName()파일의 이름
getAbsolutePath()파일의 경로
canWrite()파일이 쓰기 가능한가?
canRead()파일이 읽기 가능한가?
length()파일의 크기
createNewFile()새로운 파일 생성
close()입출력 관련 클래스의 리소스를 해제하고 버퍼를 비우는 역할. (예외처리의 역할도 한다.)

바이트/문자 스트림은 공통점이 있다!

FileOutputStream 예시

package ex12;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Example02 {

    public static void main(String[] args) {
        String str = "Hello! Java Programming";
        File f;
        FileOutputStream fos = null; // null을하는 이유는, 클로즈 해주기 위해 생성해주는 작업임.

        try {
            f = new File("src\\ex12\\example02.txt");
            if (!f.exists()) { // 없으면 참이 됨.
                f.createNewFile();
            }
            // 스트림 방식의 출력 파일 생성 그래서 출력도 바이트 스트림을 출력
            fos = new FileOutputStream(f);
            // str은 문자열이고, 그것을 바이트 형태로 가져오기.
            byte[] b = str.getBytes();
            fos.write(b);
            System.out.println("파일쓰기 성공");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}

FileWriter 예시

package ex12;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Example03 {

	public static void main(String[] args) {
		FileWriter myWr = null;
		try {
			File f = new File("src\\ex12\\example03.txt");
			if(!f.exists()) {
				f.createNewFile();
			}
			myWr = new FileWriter(f);
			myWr.write("Hello!!\n");
			myWr.write("Java Programing");
			System.out.println("파일 쓰기 성공");
		}
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		finally {
			if(myWr != null) {
				try {
					myWr.close();
				}
				catch(IOException e) {}
			}
		}

	}

}

FileWriter예시2 - while문 및 Scanner 응용

package ex12;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
import java.io.IOException;

public class Filehandling03 {

	public static void main(String[] args) {
		File file = new File("src\\ex12\\member.txt");
		FileWriter fw = null;
		try {
			if (!file.exists()) {
				file.createNewFile();
			}
			fw = new FileWriter(file);
			Scanner s = new Scanner(System.in);
			
			boolean quit = false;
			
			while(!quit) {
				System.out.println("아이디 : ");
				String userID = s.next();
				fw.write("아이디 : "+ userID+"\n");
				
				System.out.println("이름 : ");
				String userName = s.next();
				fw.write("이름 : "+ userName+"\n");
				
				System.out.println("계속 진행? Y | N");
				//왜 다시 스캐너를 생성하지?
				s = new Scanner(System.in);
				String str = s.nextLine();
				if (str.toUpperCase().equals("N")) {
					quit = true;
				}
			}
			
			
			System.out.println("파일 쓰기 성공");
		}
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		finally {
			if (fw!=null) {
				try{fw.close();
				}
				catch(IOException e) {}
			}
			
			
		}
		

	}

}

FileInputStream예시

package ex12;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

// FileOutputStream , FileInputStream, FileWriter, FileReader는 파일 읽기쓰기에 관여함.
// Stream은 바이너리타입(외부적 활용. 예를 들면 통신), 이외는 텍스트타입(내부적 활용)에 쓰임.

// ★★★  위 4가지를 작성 함에 있어 공통점이 있다.   ★★★(아래 예시는 FileOutputStream으로 진행.)
// 1. File 파일의객체이름 = new File("파일이름.파일형식"); 					=> '파일타입 객체'를 생성해줌.(파일의 생성과 관련된 조건문에 관여함.)
// 2. FileOutputStream 클래스변수 = null; 								=> try문 시작부에서 클래스변수로 FileOutputStream 선언 (이 객체는 직접적인 쓰기에 관여함.)
// 3. if(!파일객체이름.exists()){ 파일객체이름.createNewFile} 				=> try문 시작부에서 '파일타입 객체'는 if문을 활용해서 파일존재를 검증하고, 새로운파일 생성.
// 4. 클래스변수 = new FileOutputStream; 								=> try문 내부에서 FileOutputStream과 관련해서 초기화시켜줌.(선언 했으면 초기화 해야하기 때문)
// 5. 쓰고싶은 것, 읽고 싶은 것을 작성함.										=> try문 내부에서 원하는 문구를 작성함.
// 6. catch(Exception e) {System.out.println(e.getMessage());		=> catch로 오류잡기. 오류와 관련된 메세지를 출력.
// 7. finally{try{ 클래스변수.close(); }  catch(IOException e){} }		=> close()함수는 반드시 실행해야됨. 만약 오류라면 입출력 관련오류(IOException)를 catch 해줘야한다. 

public class Example04 {

	public static void main(String[] args) {
		
		FileInputStream fis = null;
		
		
		try {
			File file  = new File("example03.txt");
			if(!file.exists()) {
				file.createNewFile();
			}
			//file을 입력용으로 생성해라(오픈해라)
			
		fis = new FileInputStream(file);	
			int i = 0;
			
			while((i=fis.read())!=-1) { //파일의 끝이면 fis.read()=-1 이 출력됨.
				System.out.println((char)i);
			}
		}
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		finally{
			try {
				fis.close();
			}
			catch(IOException e) {}
		}

	}

}
💡 FileWriter는 텍스트타입(내부) 작성, FileOutputStream은 바이너라타입(외부통신) 작성에 쓰이는구나!

jsp

jsp는 두가지메서드 get과 post가 중요하다.

get

  • 데이터를 서버로 전송하기 위해 URL의 쿼리 문자열(query string)에 데이터를 첨부하여 전송합니다.
  • 전송한 데이터가 URL에 노출되므로 보안에 취약할 수 있습니다.
  • 데이터의 길이 제한이 있으며, 대부분의 브라우저는 약 2,048자로 제한합니다.
  • 브라우저에서 캐싱할 수 있으므로, 같은 요청을 반복할 경우 캐시된 결과를 가져올 수 있습니다.
  • 주로 데이터 조회 등의 요청에 사용됩니다.

post

  • 데이터를 HTTP 요청의 본문(body)에 담아 서버로 전송합니다.
  • URL에 데이터가 노출되지 않으므로 GET보다 보안적으로 우수합니다.
  • 데이터의 길이 제한은 없지만, 서버와 클라이언트 간에 약속된 최대 크기가 있을 수 있습니다.
  • 브라우저에서 캐싱할 수 없으므로, 같은 요청을 반복할 때마다 새로운 결과를 가져옵니다.
  • 주로 데이터 생성, 수정, 삭제 등의 요청에 사용됩니다.

포스트는어디?

웹 동작 원리

웹 - Web - WAS - DB


web은 어플리케이션 보호하려고 분리되어있다.

정적웹페이지

HTML, CSS, JavaScript 등 클라이언트 요청에 따라 변하지 않음.

동적웹페이지

PHP, Java, Python 등 클라이언트 요청에 따라 동적으로 생성됨.

  1. 클라이언트가 웹페이지 요청
  2. 웹서버가 요청을 분석하여 처리
  3. 결과를 html문서로 생성
  4. 요청에 맞게 정제된 html문서를 전달
  5. 웹브라우저가 html을 보여줌.

jsp페이지 처리과정

  1. jsp요청
  2. jsp컨테이너에서 jsp페이지를 번역 ⇒ 서블릿프로그램으로 넘어감.
  3. 서블릿프로그램 ⇒서블릿클래스로 갈 때 컴파일된다.
  4. jsp 서블릿 실행 응답을 진행.
💡 jsp는 자바 기반이었구나. JavaService() 를 통해 jsp가 java파일로 변하는 걸 볼 수 있었다.

jsp생명주기

  1. 번역
    1. (jsp파일)
  2. 컴파일
    1. (_jsp.java파일)
  3. 로딩 및 초기화
    1. (_jsp.class)
  4. 실행
  5. 소멸

스크립트 태그의 종류

스크립트태그

  1. <%…%> 사용
  2. JSP페이지가 서블릿 프로그램에서 서블릿 클래스로 변환할 때 JSP컨테이너가 자바 코드가 삽입되어 있는 스크립트 태그를 처리하고 나머지는 HTML코드나 일반 텍스트로 간주.
    스크립트태그형식설명
    선언문(declaration)<%! %>전역 범위 선언, 서블릿 클래스 멤버 선언, 초기화
    스크립트릿(scriptlet)<% %>Java코드를 작성할 수 있고, 서버 측 로직을 처리하거나 변수를 선언할 때 사용
    표현문(expression)<%= %>변수나 결과값 출력. 한 번에 하나의 변수(혹은 메서드)를 출력하며 세미콜론’;’을 쓰지 않는다.

jspService()

  • jspService() 메서드는 JSP 컨테이너에 의해 자동으로 생성되고 호출되는 메서드
  • JSP 페이지의 코드를 실행하는 데 사용

jspService() 메서드는 HttpServlet 클래스의 service() 메서드를 오버라이드하여 JSP 페이지의 동작을 정의

data.toLowerCase();

  • 소문자로 변경

디렉티브 태그의 개요

디렉티브 태그

  1. jsp페이지를 어떻게 처리할 것인지를 설정하는 태그
  2. jsp페이지가 서블릿 프로그램에서 서블릿 클래스로 변환할 때 jsp페이지와 관련된 정보를 jsp컨테이너에 지시하는 메시지
형식
page<%@ page %>설명페이지에 대한 정보 설정
include<%@ include %>페이지 특정 영역에 다른 문서를 포함
taglib<%@ taglib %>사용할 태그 라이브러리 설정

page디렉티브 태그의 기능과 사용법

속성설명기본 값
language현재 JSP페이지가 사용할 프로그램이 언어를 설정
contentType현재 JSP페이지가 생성할 문서의 콘텐츠 유형을 설정
pageEncoding현재 JSP페이지의 문자 인코딩을 설정
import현재 JSP페이지가 사용할 자바 클래스 설정
session현재 JSP페이지의 세션 사용 여부를 설정
buffer현재 JSP페이지의 출력 버퍼 크기를 설정
autoFlush출력 버퍼의 동작 제어를 설정
isThreadSafe현재 JSP페이지의 멀티스레드 허용 ….
info
errorPage
isErrorPage
isELIgnored
isScriptingEnabled
💡 하드디스크의 buffer역할은 스풀이다.

세션

  • 클라이언트와 서버가 연결되어있는 상태

buffer

  • 역할
    • 임시기억장소
  • 목적
    • 데이터 전달 속도 향상.

에러페이지

EL표기

  • isELIgnored

    • false이면 데이터로 나옴.
    • true이면 문자로 나옴.(EL표기를 무시하라는 거니까 리얼 무시하는것!)


JS

자바스크립트 책 566~582p

Date

ex_) var now = new Date("2020-10-15");

.getTime()

window객체의 프로퍼티
document브라우저 창에 표시된 웹 문서에 접근할 수 있다.
frameElement현재 창이 다른 요소 안에 포함되어 있을 경우 그 요소를 반환. 반대로 포함되어 있지 않으면 null값을 반환.
innerHeight내용 영역의 높이를 나타낸다.
innerWidth내용 영역의 너비를 나타낸다.
localStorage
location
name
outerHeight
outerWidth
pageXOffset
pageYOffset
parent
screenX
screenY
scrollX
scrollY
sessionStorage
종류설명
alert()알림 창을 표시한다.
blur()현재 창에서 포커스를 제거한다.
close()현재 창을 닫는다.
confirm()확인,취소 버튼이 있는 확인 창을 만든다.
focus()현재 창에 포커스를 부여한다.
moveBy()현재 창을 지정한 크기만큼 이동한다.
moveTo()현재 창을 지정한 크기만큼 이동한다.
open()새로운 창을 연다.
postMessage()메시지를 다른 창으로 전달.
jprint()현재 문서를 인쇄.
prompt()프롬프트 창에 입력한 텍스트를 반환.
resizeBy()지정한 크기만큼 현재 창의 크기를 조절한다.
resizeTo()동적으로 브라우저 창의 크기를 조절한다.
scroll()문서에서 특정 위치로 스크롤한다.
scrollBy()지정한 크기만큼 스크롤한다.
scrollTo()지정한 위치까지 스크롤한다.
sizeToContent()내용에 맞게 창의 크기를 맞춘다.
stop()로딩을 중지한다.

window.open() - 팝업 띄우기 버튼, 팝업 닫기 버튼

  • 팝업띄우기 , window.open()
    //css
    #button1{
    	width:100px;
    	height:100px;
    	background-color: red;
    	color:white;
    	border-radius:50%;
    	border: 10px solid gray;
    	}
    
    // js
    function pupupw(){
    	window.open("파일이름.jsp","","width=500, height=400");
    }
    
    // html
    <button id="button1" onclick="javascript:pupupw();">팝업 열기</button>

팝업위치 설정하기

  • 팝업 닫기 window.close();
  • 팝업이 차단된 브라우저의 알림 창 표시하기

웹브라우저의 버전을 비롯해 플러그인 설치 정보나 온,오프라인 등의 여러 정보가 담겨있다.

  • 웹 브라우저가 점점 다양해짐에 따라 모든 사용자의 웹 브라우저에서 똑같이 동작하는 웹 문서를 개발할 필요성이 생겼다.

정보를 보는 것.

history 객체

history.back() : 뒤로가기

location.replace(’사이트이름’) : 하이퍼링크

<button class="button1" onclick="location.replace('http://www.easyspub.com')">이지스퍼블리싱 홈페이지</button>

변수.innerHTML=”~” : HTML안에 삽입하기

팝업이 팝업을 여는 작업.

💡 window.open() 함수와 opner 의 관계를 잘 짚고 넘어가자.

open()

  • 새로운 브라우저 창 또는 탭을 열기 위해 사용

    • url : 열고자 하는 창의 url
    • target : (선택사항) 열려는 창의 이름이나 타겟
      • _blank
      • _self
      • _parent
      • _top
    • features : (선택 사항)창의 속성을 지정하는 문자열
    • replace : (선택 사항)새 창을 열 때 현재 창을 대체할지 여부를 나타내는 부울 값

opener

  • 이를 열게 된 원래 창(부모 창)을 가르킨다.

  • 객체를 통해 부모 창의 속성에 접근하거나 부모 창으로 데이터를 전달할 수 있다.


  • 팝업 코드

    1

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>팝업창 열기</title>
    <script type="text/javascript">
    		let popWin = window.open("doitEvent.jsp","popup","width=750, height=600, left=100,top=100");
    		popWin.opener = self; // popWin 객체를 만든 부모가 자신(self)이라고 알려줌.
    </script>
    </head>
    <body>
    	<p>문서를 열면 팝업창이 표시됩니다.</p>
    	
    
    </body>
    </html>

    2

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>이벤트 공지</title>
    </head>
    <style>
    body{
    display:flex;
    justify-content:center;
    align-items:center;
    flex-direction:column;
    
    width:100vw;
    height:100vh;
    background-color:yellow; 
    }
    .image{
    width:200px;
    height:auto;
    border-radius:12%;
    border: 3px double black;
    }
    
    </style>
    <script>
    function loadURL(){
    	//alert(url);
    	window.opener.location=url;
    	window.close();
    }
    </script>
    <body>
    	<div id="container">
    		<img class="image" alt="" src="data:image/jpeg;base64,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">
    		<p><a href="doitMain.jsp"
    			  onclick="javascript:loadURL(this.href; return false;)">자세히보기</a>
    	</div>
    </body>
    </html>

    3

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Do it!!</title>
    <style>
    #container{
    width:750px;
    margin: 0 auto;
    text-align:center;
    }
    </style>
    <script>
    </script>
    </head>
    <body>
    	<div id="container">
    		<img src="http://www.easyspub.co.kr/upload/smarteditor/BOOK/2016/20160418190258778248.jpg">
    	</div>
    </body>
    </html>

profile
1% 개발자를 향해:: 개발 공부 일지를 써나갑니다

0개의 댓글