11월 23일 - 수업 23일차 (JSP)

수아레스·2022년 11월 23일
post-thumbnail

1. hello.jsp가 컴파일 되는 과정에 대하여 설명하시오.

<http://localhost:8282/jsp_hello/hello.jsp가 실행되는 과정>

-> hello.jsp의 소스코드를 실행시킨다는 것을 의미한다.

  1. 컴퓨터의 IP를 찾아 들어간다. (여기서는 localhost)

  2. Tomcat이(웹 애플리케이션 서버)가 관리하는 프로그램 번호 8282를 찾아가서 jsp_hello패키지의 hello.jsp 파일을 찾음

  3. hello.jsp 파일을 hello_jsp.java 파일로 변환한 후 컴파일하여 hello_jsp.class 파일을 생성한다.

  4. .class 파일을 전달한다.

크롬 개발자 도구에서 실행된 내용을 살펴보면 html 부분만 보이는데 이것은 Servlet 때문이다.

2. Servlet에 대하여 설명하시오.

클라이언트 요청을 처리하고 응답하는 Servlet 클래스의 구현 규칙을 지킨 서버측 자바 프로그래밍 기술

웹 기반의 요청에 대한 동적인 처리가 가능한 하나의 클래스

자바를 사용하여 웹을 만들기 위해 필요한 기술. 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주는 역할을 하는 자바 프로그램

[ Servlet의 특징 ]

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용하여 요청에 응답한다.
  • Java Thread를 이용하여 동작한다.
  • MVC 패턴에서 Controller로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • UDP보다 처리 속도가 느리다.
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

servlet 페이지 작성 방법

project 생성: new → project → Dynamic Web Project

servlet파일 생성: new → servlet → Java Package, Class name, Superclass 작성 후 next

→ url Mapping (edit), next → doPost, doGet 확인 후 finish

파일 내용 작성 후 Run As → Run on Server (alt shift + X, R) → 서버 확인 후 finish


서블릿의 기본적인 동작 과정

  1. Web Server는 HTTP request를 Web Container(Servlet Container)에게 위임한다.
    1) web.xml 설정에서 어떤 URL과 매핑되어 있는지 확인
    2) 클라이언트(browser)의 요청 URL을 보고 적절한 Servlet을 실행
    (https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html 참고)
  2. Web Container는 service() 메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.
    1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.
    2) .class 파일을 메모리에 올려 Servlet 객체를 만든다.
    3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init() 메서드가 실행된다.
  3. Web Container는 Request가 올 때마다 thread를 생성하여 처리한다.
    각 thread는 Servlet의 단일 객체에 대한 service() 메서드를 실행한다.

참고 🍔 Servlet Program에서 Thread의 역할 🍟

Thread란?

운영체제로부터 시스템 자원을 할당받는 작업의 단위

  • Servlet Program에서 thread가 수행할 메서드가 지정/할당되면
    thread는 생성 후 즉시 해당 메서드만 열심히 수행한다.
    해당 메서드가 return하면 thread는 종료되고 제거된다.
    즉, 실제로 thread의 역할: Servlet의 doGet() 또는 doPost()를 호출하는 것이다.
  • Web Container(Servlet Container)는 thread의 생성과 제거를 담당한다.
    하지만 thread의 생성과 제거의 반복은 큰 오버헤드를 만든다.
    이를 위해 Tomcat(WAS)은 “Thread Pool”(미리 thread를 만들어 놓음) 이라는 적절한 메커니즘을 사용하여 오버헤드를 줄인다.
  • 즉, WAS는 Servlet의 life cycle을 담당한다.
    웹 브라우저 클라이언트의 요청이 들어왔을 때 Servlet 객체 생성은 WAS가 알아서 처리한다.
    WAS 위에서 Servlet이 돌아다니고 개발자는 이 Servlet을 만들어야 한다.

참고 링크: https://mangkyu.tistory.com/14

cf. JSP란?

JSP란 JavaServer Pages 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

JSP가 실행되면 자바 서블릿(Servlet)으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고 그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

3. web.xml에 대하여 설명하시오.

  • WAS가 시작될 때 web.xml을 읽어서 메모리에 올라가고 그 설정들을 바탕으로 WAS의 설정을 구성한다.
  • 모든 WAS는 반드시 하나의 web.xml파일을 가져야 하고 WAS 디렉토리마다 하나씩만 존재할 수 있다.
  • WEB-INF 폴더에 존재한다.

4. html이란 무엇인가?

웹페이지를 만들기 위한 언어(웹 문서를 기술하는 언어)로 웹브라우저 위에서 동작하는 언어

  • Hyper Text Markup Language의 약자

  • HT - HyperText 문서와 문서가 링크로 연결되어 있다. M - Markup 태그로 이루어져 있다. (웹문서를 표현하기 위해 태그들로 구성되어 있다.) L - Language 언어

  • html 파일의 확장자명으로 html 혹은 htm을 사용한다.

  • w3c가 html의 국제 표준화 기구이다.

5. get 방식과 post 방식에 대하여 설명하시오. (필수!) ⭐️

GET 방식

데이터를 URL에 포함하여 링크를 통해 값을 전달하는 방식

어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식

method 속성을 생략하면 기본값이 get 방식이다. get 방식은 서버로 전달되는 자료값이 웹브라우저 주소창에 노출되어 보안성이 좋지 않다. (요청 URL에 파라미터를 붙여서 전송한다.) 그리고 서버로 보내는 자료 길이 제한도 있다.

[ GET방식의 특징]

  • URL에 변수(데이터)를 포함시켜 요청한다.
  • 데이터를 Header(헤더)에 포함하여 전송한다.
  • URL에 데이터가 노출되어 보안에 취약하다.
  • 캐싱할 수 있다. (한번 접근한 후 또 요청할시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것)
  • URL의 경로 뒤에 물음표('?')와 함께 파라미터를 붙여 전송하는데, 이를 쿼리 문자열(query string)이라고 한다.
  • URL의 쿼리 문자열로 전송되기 때문에, 폼을 사용하지 않아도 파라미터를 전송할 수 있다.

POST 방식

HTML의 form 태그 내에 포함되어 있는 input 태그에 입력한 내용을 전송하기 위한 방법

데이터를 서버로 제출(post)하여 추가 또는 수정하기 위해서 사용하는 방식

헤더필드 중 Body의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떠한 데이터 타입인지를 명시해주어야 한다. 데이터를 Body에 포함시키는 이점 때문에 메세지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time Out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재한다. POST 방식은 URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱이 불가능하지만 쿼리스트링(문자열) 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송이 가능하다.

[ POST방식의 특징 ]

  • URL에 변수(데이터)를 노출하지 않고 요청한다.
  • 데이터를 Body(바디)에 포함시킨다.
  • URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.
  • 캐싱할 수 없다.
  • 전송할 수 있는 데이터에 한계가 없다. (20MB 정도로 설정 되어있어 GET방식 대비)
  • 전송하는 내용이 URL에 노출되지 않기 때문에 GET방식에 비해서 보안에 유리하다.
  • 한글, 공백에 URLEncoding 처리가 필요 없다.

참고: https://mangkyu.tistory.com/17

6. 컨텍스트 패스(Context Path)란 무엇인가?

WAS(Web Application Server)에서 웹 어플리케이션을 구분하기 위한 path

  • 이클립스에서 프로젝트를 생성하면, 자동으로 서버 폴더에 있는 server.xml에 추가된다. (톰캣이 컨택스트로 관리) 그리고 서버를 중단시키면 내용이 사라진다. 서버가 돌아가고 있기 때문에 server.xml에서 아래의 내용이 확인 가능 (서버 폴더는 함부로 건들지 말자!)

이클립스에서 프로젝트를 여러개 생성해도 톰캣(WAS)은 하나밖에 없기 때문에 실행할때 프로젝트들을 구분해 줄 필요성이 있다. 그럴때를 대비해서 서로간의 프로젝트를 구분시켜 주는 Path를 톰캣(WAS)쪽에 설정해 놓는다.

7. 아래의 객체에 대하여 설명하시오.

HttpServletRequest request, HttpServletResponse response

두 파라미터는 서버가 실행되면 반드시 객체가 생성되어 넘어온다.
객체는 WAS(Tomcat)가 생성한다.

  • 클라이언트(웹브라우저)가 요청을 하면 응답을 받기 위해서는 서버는 클라이언트의 주소를 알고 있어야한다. 그러기 위해 웹 브라우저는 http protocol에 맞게 수많은 정보를 서버에 전송한다.
  • 서버는 그 정보를 받아서 가지고 있고(Request 객체) 응답을 보내기 위해서 객체로 만들어 저장한다.
  • 응답을 보내는 내용을 Response 객체에 담는다.
  • 이렇게 만들어진 객체를 프로그래머에게 넘겨 줌 (함수 사용)

공통점

  • javax.servlet.http 패키지의 인터페이스이다.
  • ServletRequest 및 ServletResponse 인터페이스에서 파생된다.
  • 생성되어 컨테이너별로 Servlet의 service () 메서드에 암시적으로 전달된다.

HttpServletRequest

  • HttpServletRequest 의 역할은 사용자 이름 및 암호와 같이 웹 클라이언트가 보낸 데이터 를 수신하는 것 → request 정보를 서블릿에게 전달하기 위한 목적으로 사용

  • 클라이언트가 서버에 데이터를 요청할 때, 요청에 대한 기능과 속성을 가지고 있는 객체

  • 클라이언트의 IP 주소, 사용 된 프로토콜 클라이언트 등과 같은 다른 클라이언트 정보를 검색 하는 많은 getXXX () 메서드 가 제공되며 브라우저의 이름, 버전 등과 같은 클라이언트의 브라우저에 대해 알 수있는 메서드도 포함된다.

  • HTTP 헤더와 HTTP 바디로 구성되어 있다.

  • Header정보, parameter, cookie, url, uri 등의 정보를 읽어들이는 메소드를 가진 클래스

  • bodydml steam을 읽어들이는 메소드를 가짐

  • 메소드 정보

HttpServletResponse

  • HttpServletResponse 의 역할은 웹 클라이언트에 데이터를 보내는 것

  • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달 → 서블릿은 HttpServletResponse에 content type, 응답 코드, 응답 메세지 등을 담아서 전송함

  • 서블릿에 속성을 설정 하는 많은 setXXX () 메서드가 제공됨

  • ServletResponse interface (javax.servlet.ServletResponse)

  • HttpServletResponse interface (javax.servlet.http.HttpServletResponse)

profile
띵호와

2개의 댓글

comment-user-thumbnail
2022년 11월 23일

썸네일만으로 사람을 찾아버린 이모씨 왔다 갑니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 왠지... 당신일 것 같았어....

1개의 답글