Dev/Servlet&JSP

Servlet & JSP 기초 알아가기 1

OK-가자 2021. 10. 7. 15:21

Servlet & JSP

일딴 Servlet & JSP 하기 전에 네트웍의 이해가 필요하다. 무작정 따라 하면 그냥 아... 이게 이거구나 하고 넘어 갈수는 있지만 그래도 알고 가자.

필자가 다 알지는 못해도 내가 알고 있는것 기반으로 적을껀데 틀린 것 있으면 피드백 부탁드립니다.

인터넷( 네트웍 통신)의 이해

인터넷 (Internet)

  • TCP/IP 기반의 네트워크가 전세계적으로 확대되어 하나로 연결된 네트워크들의 네트워크 (네트워크의 결합체)

TCP / IP

  • 하드웨어, 운영체계, 접속 매체와 관계없이 동작할 수 있는 개방형 구조
  • OSI 7 계층에서 4계층으로 단순화.

TCP/IP 가 정말 중요한데 잘 모르는게 현실이다. 위의 내용은 너무 사전적이라 외우기도 싫다. 

그래서 최대한 쉽게 정리해보겠다.

일딴 패킷이 뭔지 알아야한다.
DATA 인터넷 망을 타고 데이터를 전송 할 때
작게 짤라서 보내준다.

마치 SF의 영화에 워프(순간이동)할때 사람을 원자나 분자 단위로 눈에 안보이게 작게 만들어서 다른 공간에보내는 것과 비슷하다.

원자단위로 분해된 사람이 목적지에 도달해서 다시 원위치로 가야되는데....다리가 팔위치로 가있고 눈이 입위치에 있거나 손가락이랑 발가락이 바뀌어서 도착하면 안될 것이다. 혹은 다른사람의 원자가 섞여서 얼굴이 서로 바뀌거나 눈이 서로 바뀌면 안된다.

순간이동 완전히 되기 전에 제대로 도착했는지, 출발이랑 똑같은지, 도착하지 않은 부분이 있는지 확인해야한다.

정리하면
분해 --> 도착전 확인 --> 도착

이게 패킷 통신이다.

좀 엉뚱하지만 이해가 되었으면 한다.

오늘날 인터넷 통신의 대부분은 패킷통신을 기본으로 하고있다. TCP/IP는 이러한 패킷 통신을 위한 인터넷의 규약이다.
IP는 데이터의 조각들을 최대한 빨리 목적지로 보내는 역할을 합니다. 조각들의 순서가 뒤바뀌거나 일부가 누락되더라도 크게 상관하지 않고 보내는 데 집중한다. 
TCP는 IP보다 느리지만 꼼꼼한 방식을 사용한다. 도착한 조각을 점검하여 줄을 세우고 망가졌거나 빠진 조각을 다시 요청한다. 두 방식의 조합을 통하여 인터넷 데이터 통신을 하는 것을 묶어 TCP/IP라고 부르는 것이다.

이해하는데 도움이 되었으면 한다.

서비스 (클라이언트 / 서버 통신 )

  • 서버 : 네트워크에서 서비스를 제공하는 컴퓨터
  • 클라이언트 : 네트워크에서 서비스를 제공받는 컴퓨터
  • 하드웨어적 구분은 사실상 없음

HTTP (Hyper Text Transfer Protocol)

  • WWW 서비스를 위한 TCP/IP 응용계층 프로토콜 중 하나
  • 웹 서버 와 클라이언트는 HTTP를 이용한 통신
  • 무 상태 연결 (stateless connection)

위의 그림을 잘 보면

  • 이 정보들이 패킷안에 저장되어 보내진다. 저장되는 방식이 프로토콜(규약)이다.
  • 헤더에는 통신할 준비가 되어있는지, 데이터가 제대로 가는지, 데이터가 변질되지않았는지, 수신자가 얼마나 받고 빠진 부분이 있는지의 데이터 들이 있다.
  • 바디에는
  • 이 것도 마찬가지로 다시 반환될때도 정보들이 패킷안에 저장되어 보내진다.

URL (Uniform Resource Locator)

  • 인터넷 상의 자원의 위치
  • 특정 웹 서버의 특정파일에 접근하기 위한 경로 혹은 주소

정적인(static) 웹 페이지 ( 퍼블리싱 )

  1. HTML(Hypertext Markup Language)은 브라우저가 웹 페이지로 변환하는 언어이다.
  2. 정적인 웹 페이지는 파일 형태로 저장되어 있으면서 사용자의 입력에 따라 변하지 않는 HTML 문서이다.
  3. HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버가 통신하는 프로토콜이다.
  4. 웹 브라우저는 HTTP 요청(HTTP request) 메시지를 서버에 전달함으로써 웹 서버의 페이지를 요청한다.
  5. 웹 서버는 HTTP 응답(HTTP response) 메시지를 전달함으로써 HTTP 요청에 응답한다. 정적인 웹 페이지에서는 HTTP 응답이 HTML 문서를 포함한다.

동적인 웹 페이지를 만들어 내는 모든 기술

  • Servlet
  • JSP (Java Server Page)
  1. 동적인 웹 페이지는 웹 어플리케이션에 의해 생성되는 HTML 문서이다. 웹 브라우저가 웹 애플리케이션에 전달한 파라미터 값에 따라 웹 페이지가 변한다.
  2. 웹 서버가 동적인 웹 페이지에 대한 요청을 받으면 서버는 웹 애플리케이션으로 요청을 넘긴다. 그러면 애플리케이션이 HTML 문서를 생성하여 웹 서버로 결과를 전달한다.
  3. 웹 서버는 HTML 문서를 HTTP 응답(HTTP response)으로 감싼 후 브라우저로 결과를 전달한다.
  4. 전달 받은 HTML 문서가 정적인 HTML 파일에서 왔는지 아니면 웹 애플리케이션에 의해 동적으로 생성된 문서인지 브라우저는 알지 못한다. 어느 쪽이든 브라우저는 전달받은 HTML 문서를 화면에 표시한다.

정적 웹페이지 VS 동적 웹페이지

[ 정적 페이지 접근 시 웹 문서 전송 ]

[ 동적 페이지 접근 시 웹 문서 전송 ]

정리하면

대충 위의 사진 느낌인데.... 그림을 못그려서 죄송합니다...

 

++추가 보충

SETTING

서블릿(Servlet)

서블릿(servlet)은 서버에서 동작하는 Java 클래스이다.

서블릿은 HttpServlet 클래스를 상속한다.

HTML 코드를 브라우저로 리턴하기 위해서, 서블릿은 out 객체의 println 메소드를 사용한다. 이것은 HTML 코드를 작성하기 어렵게 만드는 요소이다.

서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지 컴포넌트(JSP, 서블릿)를 조화롭게 사용해야 한다. 웹 페이지를 구성하는 화면(HTML)JSP
표현하고 프로세스에 관련한 부분은
서블릿이 처리하도록 해야한다.

 

Servlet 맵핑

 

 web.xml 에 특정 요청 URL과 서블릿 클래스 를 매핑한다.

<servlet>

     <servlet-name>MyFirstServlet</servlet-name>

   <servlet-class>HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>MyFirstServlet</servlet-name>

  <url-pattern>/hello</url-pattern>

</servlet-mapping>

 

서블릿 작성 방법

서블릿은 HttpServlet 클래스를 상속받는다. HttpServlet 클래스를 사용하기 위해서는  javax.servlet, javax.servlet.http, 그리고 java.io 패키지를 임포트 해야 한다.

HttpServlet 클래스의 doGet 메소드를 재정의(overriding)하고, GET 방식을 사용하는 모든 HTTP 요청을 처리한다.

HttpServlet 클래스의 doPost 메소드를 재정의(overriding)하고, POST 방식을 사용하는 모든 HTTP 요청을 처리한다.

doGetdoPost 메소드는 웹 서버가 전달한 두 개의 객체를 인자로 받는다 : (1)  HttpServletRequest 객체(request 객체), 그리고 (2) HttpServletResponse 객체(response 객체)

response 객체의 setContentType 메소드는 브라우저에 전달되는 응답의 콘텐트 타입(content type)을 설정한다.   

response 객체의 getWriter 메소드는 브라우저에 HTML 코드를 보내는 PrinterWriter 객체를 리턴한다.

getWriter 메소드가 적절한 PrintWriter 객체를 리턴하기 위해서는, 반드시 PrintWriter 객체를 생성하기 전에 콘텐트 타입을 설정해야 한다.

 

 

XXXServlet 클래스 저장 위치

\%TOMCAT_HOME%\webapps\stc\WEB-INF\classes\com\example\servlet

 

일반적인 서블릿 클래스 위치

\%TOMCAT_HOME%\webapps\yourDocumentRoot\WEB-INF\classes\packageName

\%TOMCAT_HOME%\webapps\yourDocumentRoot\WEB-INF\classes\

\%TOMCAT_HOME%\webapps\ROOT\WEB-INF\classes\

\%TOMCAT_HOME%\webapps\ROOT\WEB-INF\classes\packageName

서블릿 저장 및 컴파일

서블릿 소스 코드(.java file)는 어떤 디렉터리에 위치하더라도, 컴파일 된 클래스(.class file)\WEB-INF\classes 의 하위에 위치해야 한다.

서블릿 소스 코드와 컴파일 된 클래스 파일을 동일한 위치에 둘 수는 있지만, 일반적으로 소스와 컴파일 된 클래스 파일은 별도의 위치에 저장한다.

 

서블릿 호출 문법

http://host:port/ContextPath/ServletName

 

서블릿 호출 URL에 파라미터 추가

EmailServlet?firstName=John&lastName=Smith

EmailServlet?firstName=John&lastName=Smith&emailAddress=jsmith@hotmail.com

 

서블릿 호출 Form 태그 문장

<form action=“/EmailServlet" method="get">

<form action=“/EmailServlet“ method="post">

 

서블릿 호출

HTML form을 사용하지 않고 서블릿을 요청하기 위해서는 브라우저 주소창에 서블릿
URL을 직접 적는다. 

파라미터를 추가하려면, URL 뒷부분에 물음표(‘?’)를 시작으로 파라미터를 이어 적는다.

각 파라미터는 이름, 등호(‘=’), 값으로 이루어지고, 여러 개의 파라미터를 사용하려면
파라미터들을
앰퍼샌드(‘&’) 로 구분한다. 

GET 방식을 사용하는 HTML form으로 서블릿을 요청하면 URL과 파라미터 값들이
브라우저 주소창에 나타난다
.

POST 방식을 사용하는 HTML form으로 서블릿을 요청하면 파라미터 값들은 브라우저
주소창에 나타나지 않는다
.

 

서블릿 라이프 사이클

서버는 init 메소드를 통해서 서블릿을 구동하고 초기화 한다.

service 메소드를 호출해서 서블릿이 브라우저의 요청을 처리하도록 한다. 
service
메소드는 특정 HTTP 요청(GET, POST )을 처리하는 다른 메소드
(doGet, doPost )를 호출한다.

서버는 destroy 메소드를 통해서 서블릿을 제거한다.  이러한 경우는 서버가
중단되거나 특정 시간 동안 대기상태로 유지되는 경우에 발생한다
.  

 

web.xml 개요

web.xml 파일은 애플리케이션의 WEB-INF 디렉터리에 위치하고, 서블릿 엔진이 구동하면서 web.xml 을 읽어 들인다.

XML 태그를 사용하여 XML 요소(element)를 정의한다. XML 요소(element)는 여러 개의
자식 요소
(child element)을 가질 수 있다. 

web.xml 파일에서 특정 부분을 주석으로 정의하려면 XML 주석 태그를 사용하면 된다.
XML
주석 태그는 HTML 주석 태그와 동일한 형식이다.   <!-- 주석 문장 -->

web.xml에서 요소들의 순서가 틀리면 web.xml 파일을 읽어 들일 때 톰캣이 에러 메시지를
표시한다
.

web.xml 파일을 수정하고 나면 톰캣을 재구동 해야만 변경된 내용이 반영된다.

 

초기화 파라미터를 위한 XML 요소

초기화 파라미터 설정

모든 서블릿에서 사용 가능한 초기화 파라미터(컨텍스트 초기화 파라미터, context initialization parameter)를 만들기 위해서는 <context-param> 요소 내에 <param-name>,<param-value>
요소를 작성해야 한다.

특정 서블릿에서 사용 가능한 초기화 파라미터(서블릿 초기화 파라미터, servlet initialization parameter)를 만들기 위해서는 <init-param> 요소 내에 <param-name>,<param-value> 요소를 작성해야 한다.

<servlet>, <servlet-name>, <servlet-class> 요소를 통해서 서블릿을 정의한 후에 서블릿
초기화 파라미터를 작성해야 한다
.

 

에러 처리를 위한 XML 요소

커스텀 에러 처리

웹 애플리케이션에서 (1) 에러(uncaught exception),  (2) 특정 HTTP 상태 코드가 발생했을 때 <error-page> 요소를 사용해서 특정 페이지가 출력되도록 할 수 있다.

<error-page> 요소는 <servlet><servlet-mapping> 요소 다음에 위치해야 한다.

'Dev > Servlet&JSP' 카테고리의 다른 글

Servlet & JSP 기초 알아가기 2  (0) 2021.10.12
Servlet & JSP 기초 와 실습(MVC 2)  (0) 2021.10.08
Servlet & JSP 기초 와 실습(MVC 1)  (0) 2021.10.08