본문 바로가기

국비

01.09 국비학원 68일차 (Github Pages 정적웹페이지, Servlet/JSP)

GitHub Pages 활용하여 정적 웹페이지 만들기

깃허브에 new repository 생성. 계정명.github.io 형식으로 만들기

vscode 에서 (ctrl + shift + p) 로 git clone 검색하여 새로 만든 리포지터리를 선택한다.

관리하기 편한 위치에 저장(수업에서는 user 폴더의 git 에 저장함)

open in new window 선택하여 vscode를 새 창으로 열어주고 index.html 파일을 생성한다.

생성 파일 깃허브에 commit&push

깃허브의 settings 에서 pages 로 들어가면 visit site 로 만들어진 페이지 확인 가능

vscode 에서 docs 폴더를 새로 만들어 index.html 파일을 넣어준 뒤 commit&push

terminal 창 열어서 git subtree push --prefix docs origin gh-pages 입력

(docs 안에 있는 파일만 브랜치를 remote main(→origin)에서 gh-pages 란 서브모듈 브랜치로 만든다는 의미)

깃허브 settings 의 pages 에서 branch 설정을 gh-pages root 로 변경하기

이후 vscode 에서 수정작업 후 원할 때 마다 커밋 후 위의 명령어를 입력 하여 배포를 해준다.

(브랜치를 분리하지 않고 main 에서 그대로 사용하면 커밋 할 때 마다 배포되어 너무 많은 사용량을 일으킨다)

 

github 의 repository 는 remote repository 이고, 개인PC 의 repository 는 local repository 이다.

깃허브에 있는 리포지터리를 PC에 다운 받는 것을 clone 이라 함

PC의 local repository 입장에서 branch main → local repository 을 의미하고

                                                              origin → github remote main 을 의미한다.

 

 

  • Servlet / JSP

                         request(요청)

         client   ────────────> server

      (사용자) <──────────── (서버)

                         response(응답)

web 통신 구조

          - Web Server 

              : 사용자에게 HTML페이지나 jpg, png 같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 제공하는 서버로 내부

                의 내용이 이미 만들어져 있는 정적인 요소들을 화면에 보여주는 역할은 함(정적 페이지)

                종류) Apache, Windows IIS, NGINX, node.js

 

          - WAS (Web Application Server)

              : 사용자가 요청한 서비스의 결과를 스크립트 언어 등으로 가공하여 생성한 동적인 페이지를 사용자에게 보여주

                는 역할

                종류) tomcat, Jboss, jeus

 

          - Servlet-Container   (java → class, 수정작업이 있으면 직접 다시 컴파일 해야함)

              : 서블릿의 생명 주기 관리(생성, 초기화, 소멸)

                HttpServletRequest/HttpServletResponse 객체 생성

                요청에 따라 멀티 스레딩 구성

                전송 방식에 따라 동적으로 페이지 구성하는 작업 진행

                정적 로딩 처리

     

          - JSP-Container   (JSP → java → class)

              : JSP 파일을 다시 java 코드로 변경해주고 class 파일로 전환하여 메모리 공간에 로드한 뒤 실행 가능하게 작업

                처리 결과를 HTML 파일로 만들어주는 작업

                동적 로딩 처리

 

   tomcat 다운로드 후 이클립스에서 Dynamic Web Project 생성

이클립스 - Dynamic Web Project 생성 → 초기 서버 설정(target new runtime → apache tomcat 10.0 선택 → 체크박스 체크 → browse 눌러서 아까 설치한 톰캣 선택 → JRE java11선택)
→ next 후 context root : /web01 설정 후 밑에 체크 박스 체크 → 생성완료
만들어진 server 우클릭 해서 add and remove 클릭 → 만든 프로젝트 add → 우클릭 start → localhost:8080 으로
페이지 확인
(시크릿창으로 열기. 일반 브라우저에서는 정적파일(HTML,CSS,JS,이미지)이 브라우저에 캐시 형태로 임시로 저장하여 계속 사용된다. 우리는 정적파일들을 수정해서 반영 결과를 계속 확인할 것이니 시크릿모드로 전환하기)

만든 프로젝트 src-webapp 에 index.html 파일 생성. localhost8080/web01/index.html 으로 확인 
(web01 = 아까 설정한 context root, 나중에 프로젝트를 여러개 만들 때 각 프로젝트마다 context root 바꿔서 사용할 수 있다.)

프로젝트에 java resources-src/main/java 는 아래의 src 폴더 경로와 같은거다. java resources는 자바 파일만 따로 보여주기 위해 있는 것
여기에 클래스 파일(controller패키지,MainController클래스) 만들기. doGet, doPost 메서드 작성

   맵핑 정보 작성법

       1. web.xml 에 기록       

       2. @annotation 사용

       충돌이 생길 수 있어 두 가지 방식 중 한 가지만 정해서 사용해야 한다.

 

     1. web.xml (=배포 서술자)

           : 배포 서술자(Deployment Descriptor) 는 애플리케이션에 대한 전체 설정 정보를 가지고 있는 파일이다.

             애플리케이션 폴더의 WEB-INF 폴더에 web.xml 파일을 가리킨다.

             설정 정보) Servlet 정의, Servlet 초기화 파라미터

                               Session 설정 파라미터, Servlet/JSP 매핑, MIME type 매핑, 보안설정

                               Welcome file list 설정, 에러페이지 리스트, 리소스, 환경 변수

<web-app> 루트 속성, 문법 식별자 및 버전 정보를 속성 값으로 설정
<context-param> 웹 애플리케이션에서 공유하기 위한 파라미터 설정
<mime-mapping> 특정 파일 다운로드 시 파일이 깨지는 현상 방지
<servlet>~<servlet-class>/<servlet-mapping> 서블릿 매핑
<servlet>~<servlet-class> 컨테이너에 서블릿 설정
<welcome-file-list> 시작 페이지 설정
<filter> 필터 정보 등록
<error-page> 에러 발생 시 안내 페이지 설정
<session-config> session 기간 설정
<listener> 이벤트 처리 설정 (6가지)
<servlet>
     <servlet-name>임의의이름작성</servlet-name>
     <servlet-class>패키지명.클래스파일명</servlet-class>
 </servlet>
 <servlet-mapping>
     <servlet-name>임의의이름작성(위와동일)</servlet-name>
     <url-pattern>요청URL</url-pattern>
 </servlet-mapping>

  web.xml 파일을 정의한 후에는 서버를 껐다가 다시 켜야 한다. 만약 요청URL을 /home 이라 정했다면

  localhost:8080/web01/home 이란 주소가 입력(Get) 되면 같은 서블릿네임을 찾아 맵핑된 그 안의 클래스파일

  (MainController)이 요청 된다.

 

     2. @annotation : 내용 추가 필

 

 

 

          - 서블릿 라이프 사이클

            : 첫 번째 요청일 경우 객체를 생성하며 init()메소드를 호출함(초기화). 이 후 작업이 실행될 때 마다

              service()메소드가 요청한 HTTP Type에 따른 doGet(), doPost() 가 호출된다. 최종적으로 서블릿이 서비스

              되지 않았을 때 destroy()가 호출된다(소멸)

              (destroy()는 보통 서버가 종료되거나 서블릿 내용이 변경되어 재 컴파일 될 때 호출됨)

서블릿 구동 방식

 

          - 사용자 데이터 전송 방식

               1. get 방식 : url 창에 "?" 뒤에 데이터를 입력하는 방법(쿼리스트링). 데이터가 여러 개인 경우 & 로 묶음

                                    데이터 검색에 많이 사용하고 데이터 크기에 한계(4kb)가 있으며 보안에 취약하다.

               2. post 방식 : http body에 내용을 보내는 방식으로 데이터 크기에 제한이 없고 보안이 뛰어나다.

 

             → 요청 form method 가 get 인지 post 인지에 따라 나뉜다. 사용자가 입력하고 그 데이터를 처리하게 보내는 것은 

                  거의 post 방식이다. 그 외는 대부분 get 임(a 링크 클릭도 get 에 속함)

                  데이터 전송 방식은 개발자가 정하는 것이기 때문에 어떤 메서드(doGet,doPost)를 써야할지 알 수 있다.

 

   

 

         - 서블릿 매개변수 객체

HttpServletRequest
getParameter(String) client 가 보내준 값이 저장된 명칭이 매개변수와 같은 명칭에 저장된 값을 불러오는 메서드
getParameterNames() client 가 보내준 값을 저장한 명칭을 불러오는 메서드
getParameterValues(String) client 가 보내준 값이 여러개일 경우 그 값을 배열로 불러오는 메서드
getParameterMap() client 가 보내준 값 전체를 Map 방식으로 불러오는 메서드
setAttribute(String, object) request 객체에 전달하고 싶은 값을 String 으로 Object 에 저장하는 메서드
getAttribute(String) 매개변수와 동일한 객체 속성값을 불러오는 메서드
removeAttribute(String) request 객체에 저장되어 매개변수와 동일한 속성값을 삭제하는 메서드
setCharacterEncoding(String) 전송 받은 request 객체의 값들의 CharacterSet을 설정하는 메서드
getRequestDispatcher(String) 컨테이너 내에서 request, response 객체를 전송하여 처리할 컨포넌트(jsp파일 등)를 불러오는 메서드. forward() 메서드와 같이 사용
HttpServletResponse
setContentType(String) 응답으로 작성하는 페이지의 MIME type을 정하는 메서드
setCharacterEncoding(String) 응답하는 데이터의 CharacterSet을 지정해주는 메서드
getWriter() 문자를 페이지에 전송하기 위한 Stream을 가져오는 메서드
getOutputStream() byte 단위로 전송하기 위한 Stream을 가져오는 메서드
sendRedirect(String) client 가 매개변수의 페이지를 다시 서버에 요청하게 하는
메서드