본문 바로가기
Java/JSP & Servlet

[JSP & Servlet] 2. JSP, Servlet 기본 파일 위치 - Window Tomcat 및 Eclipse Tomcat 서버 실행/ 확인

by Rosmary 2022. 10. 17.
728x90
반응형

 

 

 

JSP와 Servlet 사용을 위한 환경구성이 완료되었다면, 본격적으로 웹 서버에 우리가 원하는 문구를 JSP와 Servlet으로 출력할 수 있게 된다. 하지만 JSP가 뭔지, 혹은 Servlet이 무엇인지, Tomcat이 이들 파일을 어떻게 실행하는지 알지 못한다면 단순히 서적이나 포스팅 내용을 따라하는 것만으로는 이해의 한계가 너무 명확하기 때문에, 본격적인 실습 진행전에 JSP, Servlet, Tomcat의 동작 방식에 대해 간략하게나마 정리하는 것으로 시작해보려한다.

 

 

1. JSP 파일과 Servlet 파일

 

우리가 현재 인터넷 브라우저(IE 엣지, 크롬 등)를 통해 접하는 페이지를 가장 간단하게 구성할 수 있는 방법은, 웹 서버에 HTML 파일을 올리는 것이다(간단한 예시를 확인하고 싶으신 분들은 여기 의 포스팅을 확인하자. 이들 포스팅은 아파치 웹 서버에 HTML 파일을 올려 웹 브라우저로 HTML 파일을 보는 방법을 예시로 들었다).

 

** 필자가 언급한 HTML은 HyperTextMarkupLanguage로 인터넷에 문서를 작성하는 마크업 언어(프로그래밍 언어는 아니다)의 일종이라고 보면 된다.

 

한 가지 예시를 들어보자. 필자는 아래와 같이 최근의 환율을 나타내는 HTML 파일을 메모장으로 만들어 바탕화면에 저장하고 이 파일을 웹 브라우저로 열어보았다. 

 

<Test.html>

---------------------------------------------------------------------------------------------------

<!DOCTYPE html>
<head>   <!-- HTML 파일의 Head 작성 -->
<title> MY HTML Test Page </title>  <!-- 페이지 제목 작성 -->
</head>

<body>

<p><h3> 2022년 10월 첫 째 주 원-달러 환율 </h3>
<table>
<tr>
<th>Date</th> <th>Won / Dollar</th> <th>Rate</th>
</tr>
<tr>
<td>2022.10.04</td> <td>1428.00</td> <td>-11.00</td>
</tr>
<tr>
<td>2022.10.05</td> <td>1424.00</td> <td>-4.00</td>
</tr>
<tr>
<td>2022.10.06</td> <td>1411.00</td> <td>-13.00</td>
</tr>
<tr>
<td>2022.10.07</td> <td>1429.00</td> <td>+18.00</td>
</tr>
</table>
</p>

<p><h3> 2022년 10월 둘 째 주 원-달러 환율 </h3>
<table>
<tr>
<th>Date</th> <th>Won / Dollar</th> <th>Rate</th>
</tr>
<tr>
<td>2022.10.11</td> <td>1435.50</td> <td>+6.50</td>
</tr>
<tr>
<td>2022.10.12</td> <td>1433.00</td> <td>-2.50</td>
</tr>
<tr>
<td>2022.10.13</td> <td>1439.00</td> <td>+6.00</td>
</tr>
</p>
</body>

---------------------------------------------------------------------------------------------------

 

요즘 환율이 미친거같다. 하루에 20원씩 등락을 거듭하는데 지역화폐인가 싶다

 

 

문제는 일반적인 HTML 파일을 브라우저로 열면, 웹 서버에 저장된 HTML 파일 내용만을 항상 브라우저에 띄우기 때문에 새로운 값을 업데이트하려면 웹 서버의 HTML 파일을 손으로 일일이 수정해야한다는 불편함이 있다. 이렇게 변하지 않는 내용을 제공하는 웹 페이지를 정적 페이지라고한다. 

 

하지만 실제 환율은 이슈가 하나 터지면 단 30초 내에 급락과 급등을 할 수 있기 때문에 - 그저께 밤 미국 CPI 발표가 나고 5분도 안되어 환율이 20원 넘게 올랐다. 다시 내려가긴 했지만. - 사람이 일일이 업데이트를 진행할 수 없다. 즉, 웹 서버는 환율 정보를 제공하는 다른 서버로부터 환율 정보를 전달받아 업데이트되는 정보를 자동으로 페이지에 표시될 수 있도록 해야하는데 이를 동적 페이지라고 한다. 

 

** 필자 주: 본 포스팅은 판교 캠퍼스 화재 전 작성 중이던 문서다. 원래 토요일에 업로드하려했으나 다들 아시는 것처럼 불이나는 바람에... 10월 미국 CPI 발표는 10월 13일(목) 저녁이었다.

 

동적 페이지를 만들기 위해서는 HTML, CSS(HTML을 조금 더 예쁘게 꾸며주는 도구라 보면 된다) 외에도 JavaScript, jQuery 등의 프로그래밍 언어를 배워야한다. 이 포스팅의 메인 주제인 JSP, Servlet 역시 Java에서 제공하는 동적 페이지 작성을 위한 언어라고 보면 된다. 

 

JSP는 Java Server Pages의 약자로, HTML을 기반으로 작성되는 파일이다. HTML과 다른 점이라면 파일 내에 Java 코드가 삽입된다는 차이가 있다. 파일의 확장자는 .jsp를 사용한다.

 

 

 

Servlet은 HTML을 기반으로 하는 JSP와 달리, Java 코드를 기반으로 작성되는 파일이다. 아래의 코드를 보면 알겠지만, HTML에 들어가는 태그(<title>, <p> 등등)을 print 계열 함수로 출력하는 것을 확인할 수 있다. Java 기반의 파일이기 때문에 확장자는 .java다.

 

 

 

HTML과 동일하게 JSP와 Servlet 파일을 웹 브라우저에서 열어보자(아이콘을 잡아 브라우저로 이동시켜보자). HTML 파일과 다르게 원하는 모양이 나타나지 않고 파일의 원본 내용이 그대로 출력되는 것을 확인할 수 있다. 웹 서버도 별반 다르지 않은데, 웹 서버의 서비스들은 기본적으로 HTML 파일을 읽어 브라우저에 표시하도록 되어 있기 때문이다. 

 

 

 

이 때문에 JSP와 Servlet으로 작성된 웹 페이지는 웹 서버 기본 서비스 외에도 WAS(Web Application Server)가 설치되어 있어야 한다. JSP, Servlet에 대응하는 WAS는 바로 직전의 포스팅에서 설치했던 Tomcat이다.

 

그럼, Tomcat은 이 JSP와 Servlet 파일을 어떻게 다루길래 화면에 이들 파일의 내용을 HTML 형태로 표시할 수 있게 되는 것일까? 

 

 

 

2. 웹 서비스(Apache)와 WAS 구조

 

아주 간략하게 Tomcat의 구조를 알아보자.

 

리눅스 서버를 예로 들어보자(리눅스로 웹 서버를 만드는 방법을 모르시는 분들이라면 서두 링크의 포스팅을 한 번 읽고 오시는 것을 추천한다). 웹 서비스인 Aphache만 리눅스에 설치되어 있는 상태라면, 웹 브라우저에서 사용자가 이 리눅스 웹 주소를 입력하고 엔터를 치는 순간, 특정 위치에 존재하는 index.html 파일 내용을 첫 페이지로 띄우게 된다. 물론, HTML 파일이 아니라면 파일 이름이 index라고 해도 웹 브라우저에 내용이 표시되지 않는다. 

 

 

 

이제 JSP, Servlet을 사용할 수 있도록 Tomcat을 설치했다고 가정해보자. Tomcat은 Apache 웹 서버가 포함되어 있기 때문에 Tomcat 서비스 구동 시 웹 서비스도 동시 구동된다. 

 

 

 

Tomcat은 웹 컨테이너를 별도로 가지고 있는데, Web 서버에서 사용자에 의한 동적 페이지 처리 요청(Request)이 들어오면 해당 파일을 찾아 웹 컨테이너에서 변환 작업을 진행한다. 만약 사용자가 브라우저에서 jsp 파일을 요청했다면 해당 파일을 servlet 파일로 변환하고, 컴파일된 결과를 웹 서버로 전달하며, 사용자가 브라우저에서 Servlet 파일을 요청했다면 해당 Servlet ㅏ파일을 컴파일한 결과를 웹 서버로 전달한다. 웹 서버는 동적 처리가 완료된 결과를 토대로 사용자의 브라우저 화면에 결과를 표시하게 된다.

 

위 내용을 토대로 기본 Tomcat 서버에서 동적 페이지의 동작을 확인해보자.

 

 

 

 

3. Window Tomcat에서 동적 파일(페이지) 동작 확인하기

 

window 검색창에서 서비스를 입력하여 나타나는 아이콘을 클릭하고, 서비스 목록 중 Apche Tomcat으로 시작하는 이름의 서비스를 시작해보자.

 

 

 

 

서비스가 정상적으로 실행되었다면 웹 브라우저에서 http://127.0.0.1:8080 혹은 http://localhost:8080을 입력하면 Tomcat 캐릭터가 포함된 페이지가 하나 나타난다(만약 위 주소로 나타나지 않는 분들은 윈도우 방화벽에서 웹 서버로의 접근을 막고 있거나 웹 서버 접근 포트 번호(8080)가 다르게 설정되어 있을 것이다)

 

 

 

 

이제 Apache 프로그램이 설치된 폴더를 열어보자. 별다른 설정을 하지 않았다면 C:\Program Files\Apache Software Foundation\Tomcat 10.0 폴더에 서버 구동에 필요한 파일이 저장되어 있다.

 

 

 

 

여러 폴더가 보일텐데 여기서 webapps라는 폴더를 들어가보자. 필자의 바로 이전 포스팅과 동일한 설정으로 설치를 진행했다면 5개의 폴더가 나타날 것이다.

 

 

 

이제 앞서 브라우저에서 입력한 주소 뒤에 폴더 이름 하나를 추가해보자. 필자는 docs를 선정했고, 주소는 아래와 같이 입력했다.

 

 

 

ROOT를 제외한 나머지 폴더들은 모두 주소 뒤에 폴더명 입력 시 페이지가 변경되는 것이 확인될 것이다.

 

즉, Tomcat 서버의 최상위 폴더에 존재하는 webapps는 웹 브라우저에 표시할 페이지가 저장된다고 보면 되며, 주소 뒤에 폴더명을 지정해줌으로써 해당 폴더 내에 존재하는 페이지가 웹 브라우저에 표시된다. ROOT는 예외인데, ROOT는 127.0.0.1:8080 주소를 입력했을 때 뜨는 대문 페이지에 대한 내용이 들어있다.

 

이제 docs 폴더 내부의 파일들을 살펴보자. docs의 경우 단순히 Tomcat의 사용법을 작성한 문서이기 때문에 변경되는 내용이 많지 않아 정적인 페이지로도 제공이 가능하다. 따라서 필자가 다루고자하는 jsp나 java 확장자를 가지는 파일이 보이지 않는다. 

 

다른 폴더는 어떨까? manager 폴더로 들어가보자. 여기에는 index.jsp라는 JSP 파일이 하나 보인다. 웹 브라우저에서 /manager 주소로 들어가면 ID와 비밀번호를 입력하라는 문구가 표시된다. 이 계정은 Tomcat 설치 시 등록한 계정 정보를 입력하면 된다. 입력하고 들어가보자.

 

 

 

이제 다른 종류의 브라우저를 열어 /manager 주소로 들어간 뒤, manager 페이지를 새로고침 해보자. 리스트의 경로 중 /manager의 세션이 1에서 2로 변경된 것을 확인할 수 있을 것이다.

 

 

 

분명 필자가 수동으로 JSP 파일을 수정하지 않았음에도 불구하고 manager 페이지에 연결된 세션의 수가 자동으로 증가하여 출력되는 것을 확인할 수 있다. 

 

그럼 JSP로부터 변환된 servlet java 파일과 class 파일은 어디에 위치하고 있을까? Tomcat의 최상위 폴더에 위치한 work 폴더 내부로 계속 들어가보자. 어느정도 들어가면 webapps와 동일한 구조의 파일트리가 나타나는데 여기서 manager를 선택해 들어가보면 기존의 webapps 폴더에서 확인할 수 없었던 .java와 .class 파일이 존재함을 확인할 수 있다.

 

 

 

즉, 필자는 단순하게 jsp 파일만을 호출하는 폴더를 주소에 명시했으나, Tomcat 서버는 이 jsp 파일을 servlet 변환 뒤 컴파일 한 결과를 바탕으로 웹 브라우저에 출력하게 되는 것이다. 정적인 파일만 존재하는 docs의 경우 아무런 파일이 존재하지 않는 것과 비교해보자.

 

 

 

웹 서버에서 jsp, servlet 파일이 표시되도록 하기 위해 이 파일들을 어느 경로에 위치시켜야 할까?

 

 

 

 

4. Window Tomcat의 webapps 폴더 구성 및 JSP, Servlet 파일 위치

 

대충 눈치챘겠지만 webapps의 하위에 존재하는 폴더는 웹 브라우저에서 호출 시 브라우저에 표시될 파일들(동적, 정적 페이지 뿐만 아니라 이미지나 음원 파일 등등)을 저장한다. 그런데 Tomcat 서버에서 이 폴더들을 보면 공통적으로 보는 폴더가 존재한다.

 

폴더: WEB-INF

 

정적 페이지만 존재하는 /docs와 /examples 또한 이 폴더를 가지고 있다.

 

WEB-INF는 Web Information이며, 주소 뒤에 해당 폴더를 호출하는 요청이 들어오는 경우 어떻게 처리할 것인지를 정의한 web.xml 파일이 위치하고 있다. 이 파일의 기본 작성값은 tomcat 최상위 폴더에 위치한 config 폴더에 존재한다. 우선 이러한 파일이 있다는 것만, 그리고 이 파일을 복사하여 webapp을 만드는데 사용한다고 알아두고 있자. 

 

JSP 파일과 Servlet 파일은 각 폴더 내에서도 위치해야하는 경로가 각각 다르다. JSP는 보통 폴더 바로 아래에 위치하는 경우가 일반적이다(필자가 일반적이라고 말한 이유는 예외적인 경우도 있기 때문이다. 가령 manager 폴더의 WEB-INF 내부 jsp 폴더에는 로그인 실패 시 화면에 띄울 jsp 파일이 위치하고 있다. manager의 WEB-INF/web.xml의 마지막 부분을 확인해보자.).

 

반면 Servlet의 경우, 별도 위치가 지정되지 않는데, Tomcat은 어차피 이 파일이 컴파일된 .class 파일만 참조하기 때문이다. 즉, window의 Tomcat 폴더에서는 servlet을 컴파일한 클래스 파일의 위치가 매우 중요한데, 이 파일은 WEB-INF 폴더 내 classes라는 폴더에 반드시 존재해야한다.

 

JSP와 Servlet 클래스 파일의 기본 위치를 그림으로 나타내면 아래와 같다.

 

webapps 폴더 내에 myApp과 Test는 필자가 Test 용도로 만든 것이다. 기본 설치된 상황이라면 없는 것이 정상이다.

 

 

위와 같은 구조일 때 필자가 주소를 어떻게 치느냐에 따라 jsp 파일이 호출될 수도 있고, servlet 클래스 파일이 호출될 수도 있다.

 

* https://127.0.0.1:8080/myApp  혹은  https://127.0.0.1:8080/myApp/index.jsp   =>  index.jsp 파일 내용 호출

* https://127.0.0.1:8080/myApp/ServletTest                                                         => Servlet.class 파일 내용 호출

 

 

 

포스팅 초반에 예시로 보인 JSP, Servlet&nbsp; 파일 내용이 표시된 것이다. 코드와 비교해보자.

 

 

 

4. Eclipse Tomcat의 폴더 구성 및 JSP, Servlet 파일 위치

 

Eclipse Enterprise Edition은 Window의 Tomcat과 별개로 동작한다. Eclipse에서 Tomcat을 사용하기 위해서는 먼저 Eclipse에 Tomcat 서버를 생성해야 한다. 참고로 Eclipse에서 Tomcat 서버를 동작시키고자 한다면 Window의 Tomcat 서버는 구동이 중지된 상태여야 한다.

 

 

(1) 서버 생성

 

좌측 상단의 메뉴바에서 File -> New -> Other를 클릭한 뒤, 리스트에서 Server를 선택하고 Next를 누른다. 

 

 

 

구동할 서버의 종류를 선택하는 화면이 나타나는데, 필자는 Tomcat 10.0 버전이 설치되어 있기 때문에 Apache Tomcat v10.0을 선택한다. 서버 종류가 선택되었다면 Finish 버튼을 클릭한다.

 

 

 

좌측 프로젝트 창에 Server가 생성된 것을 확인하자. 확인된다면 콘솔 창에 Server라는 탭이 하나 존재할텐데, 여기에 방금 생성한 서버가 Stopped 상태로 존재함을 확인할 수 있다. 이 서버를 선택하고 우측의 Run 버튼을 눌러 서버를 구동해보자. 

 

 

 

서버 상태가 Started로 변환된 것을 확인하자.

 

 

현재 서버는 구동중이나 서버가 참조할 수 있는 파일이 하나도 존재하지 않기 때문에 웹 브라우저로 접속하더라도 아래와 같이 404 에러가 발생함을 확인할 수 있다.

 

 

 

이제 새 프로젝트를 생성하여 서버에서 참조할 수 있는 페이지를 만들어보자.

 

 

 

 

 

 

(2) 동적 웹 페이지 프로젝트 생성

다시 Eclipse의 좌측 상단 메뉴바에서 File -> New -> Dynamic Web Project를 클릭하여 새 동적 웹 페이지 프로젝트를 생성을 시작하자. 창이 하나 뜰 텐데, 창 상단의 Project name을 원하는 것을 입력하고 하단의 Next 버튼을 클릭하자.

 

 

 

여기서 작성하는 Project name은, windows Tomcat의 webapps 내부에 존재하는 폴더와 동일한 역할을 한다. 즉, 필자가 만든 myWeb은 Eclipse Tomcat 서버의 주소 뒤에 /myWeb을 입력하면 이 프로젝트 내에 존재하는 동적 페이지, 이미지 등이 웹 브라우저에 표시된다.

 

 

 

다음으로 Java 설정을 진행한다. Java 설정은 동적 웹 페이지 파일인 Servlet 소스 파일의 저장 위치와 컴파일 후 생성되는 Class 파일의 저장 위치를 지정한다. 필자는 우선 기본값으로 설정을 유지하고 Next 버튼을 눌러 다음으로 넘어간다.

 

 

 

다음 설정을 보면 Content directory를 설정하는 부분이 나온다. 이 디렉토리는 앞서 보았던 WEB-INF 폴더와 META-INF라는 폴더를 생성할 위치를 지정한다. 즉, JSP 동적 페이지 파일을 저장할 위치를 지정한다고 보면 된다. 이전과 마찬가지로 필자는 기본값으로 유지하고 Finish 버튼을 눌러 프로젝트를 생성하려한다.

 

좌측 프로젝트 리스트에 프로젝트가 생성된 것을 확인하자.

 

 

 

혹시라도 필자처럼 프로젝트 아이콘 옆에 빨간 엑스박스로 오류가 발생한 것이 확인된다면 해당 프로젝트를 우클릭한 뒤, Properties 항목을 클릭하자. 

 

 

 

항목을 클릭하면 창이 열리는데 좌측의 리스트에서 Project Facet을 클릭해보자. 그럼 현재 프로젝트에서 사용하는 컴파일러 버전 설정 창이 나타나는데 필자가 동일하게 설치를 진행했다면 18버전으로 설정이 되어 있을 것이다. 문제는, 현재 설치한 Eclipse의 Java Compiler는 17버전까지만 사용이 가능하기 때문에 Project Facet의 18 버전을 사용할 수 없다. 따라서 Java 항목의 버전을 18 미만으로 수정해준 뒤 Apply and Close 버튼을 클릭하면 오류가 해결된다.

 

참고로 좌측 리스트에서 Java Compiler를 클릭하면 현재 사용하는 Compiler 버전을 확인할 수 있다.

 

 

여기까지 완료되었다면, 추가된 동적 웹(Dynamic Web) 프로젝트의 구조를 전부 펼쳐보자.

 

 

 

구조를 보면 src/main/java는 별도로 폴더가 생성되어 있긴 하지만 상단에 패키지 형태로 하나가 존재하고 있는 것이 확인된다. 이 폴더는 Servlet 코드의 기본 패키지 폴더로 동작한다. 그리고 실제 폴더의 구조에서 main/webapp 폴더에 WEB-INF 파일이 존재함을 확인할 수 있다. 즉, JSP 파일은 WEB-INF 폴더와 와 동일한 위치에 저장, Servlet 파일은 src/main/java 패키지 내에 저장하면 된다. 먼저 간단한 JSP 부터 알아보자.

 

webapp 폴더를 우클릭하고 new -> JSP File을 클릭하여 새 파일을 만들자. 파일명은 필자는 index.jsp로 지정했다.

 

 

Finish 버튼을 클릭하면 코드 창에 JSP 파일의 기본 포맷이 자동으로 나타난다.

 

 

 

필자는 테스트를 위해 아래와 같이 코드를 추가했다.

 

 

 

이제 이 파일을 구동중인 Tomcat 서버 위에서 실행해보자. 좌측 프로젝트 폴더에서 작성한 JSP 파일이 선택되었는지 확인하고 메뉴바의 Run 버튼 -> Run on Server를 선택하거나, 코드 바탕 우클릭 후 Run -> Run on Server 를 클릭하면 JSP 파일의 실행 설정을 진행하는 창이 나타난다.

 

 

 

 

설정 창을 내용은 "이 파일을 어떤 서버에서 돌리겠습니까?"라고 묻는 것이 전부다.  이전에 Tomcat 서버 하나를 만들어놓았기 때문에 생성한 서버를 사용할 것이다. 서버를 선택하고 Finish를 클릭하자.

 

 

 

 

서버를 재실행할 것인지 묻는데, 재실형을 선택하고 계속 진행하자. 그럼, 서버가 재실행되면서 웹 브라우저가 Tomcat 서버의 주소와 포트(127.0.0.1:8080/myWeb)로 실행된다.

 

필자가 현재 시간 앞에 <br> 코드를 누락했는데, 해당 태그는 HTML에서 개행을 의미한다.

 

 

index.jsp 파일이 저장된 위치에 다른 이름으로 JSP 파일을 복사하고, 내용을 변경하여 저장해보자. 그리고 Eclipse Tomcat 서버를 재구동한 뒤, 웹 브라우저에서 /myWeb 경로로 접속해보자. 계속 index.jsp 파일의 내용만 출력될 것이다.

 

 

 

이는 Tomcat 서버가 index라는 이름을 가지는 JSP를 기본 페이지로 표시하도록 설정되어 있기 때문이다. 따라서 추가로 생성한 JSP 파일을 웹 브라우저에 확인하기 위해서는 해당 파일을 주소창에 반드시 명시해주어야 한다.

 

혹시라도 에러 페이지가 발생한다면 추가한 JSP 파일을 Run On Server로 적용한 뒤 확인해보자.

 

 

다음으로 Servlet 파일을 보자. Tomcat에서는 Servlet의 컴파일 파일만 제대로 위치시키더라도 구동에 큰 문제가 없다. 하지만 Eclipse에서는 Servlet 파일을 컴파일한 결과를 build/classes에 직접 올리는 과정이 필요하며, Servlet 파일로 테스트하는 경우 소스 파일을 직접 Run 하기 때문에 소스 파일도 지정된 경로에 위치시켜야 제대로 된 결과를 확인할 수 있다. 윈도우에서는 Servlet 파일 위치가 별도로 지정되지 않아도 큰 문제가 없었던것과 차이가 있다.

 

Servlet 소스 파일은 프로젝트 생성 시 지정한 기본 패키지 내에 저장한다. 패키지 아이콘 우클릭 후, Servlet File을 선택하면, JSP와 동일하게 Servlet의 기본 포맷을 설정하는 창이 나타난다.

 

 

Servlet 파일이 위치할 프로젝트, 생성할 Servlet 파일의 저장 위치 등등이 기본값으로 나타난다. 추가로 작성해야 할 부분은 Java Project와 Class Name인데, Java Package는 Servlet 파일이 저장될 패키지를 지정하는 부분이고, Class Name은 생성할 Servlet 파일의 이름이다. Java Package를 공백으로 두면 Servlet 파일은 기본 패키지 폴더에 저장된다. 필자는 기본 패키지에 파일을 저장하되, Servlet 파일 명은 Index.java가 되도록 Class 명을 Index로 지정했다.

 

Finish를 클릭하면 /src/main/java 폴더 혹은 패키지에 Index.java 가 생성되면서 해당 파일의 기본 포맷이 코드 창에 나타난다.

 

 

 

필자는 모든 코드를 삭제하고 아래의 코드를 Index.java에 저장하였다. 

 

-------------------------------------------------------------------------------------------------------------------------------------

import java.io.*;
import jakarta.servlet.http.*;
import jakarta.servlet.*;

import java.time.LocalDateTime;

 

public class Index extends HttpServlet
{
  @Override
  public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();
    LocalDateTime ldt = LocalDateTime.now();

    String timeAccess = String.format("접속 시간: %s\n", ldt.toString());


    out.println("<html>");
    out.println("<head>");
    out.println("<title>localhost:8080/myWeb/Index</title>");
    out.println("</head>");

    out.println("<body>");
    out.println("<p>안녕하세요. 현재 호출한 파일명은 build/Index.class 입니다.<br>");

    out.println(timeAccess);

    out.print("<br>현재 시간: ");

    out.println(LocalDateTime.now().toString());

    out.println("<br></p>");    
    out.println("</body>");
    out.println("</html>");
  }
}

-------------------------------------------------------------------------------------------------------------------------------------

 

 

 

이 파일은 class 파일이 반드시 생성되어야하기 때문에 파일 자체를 Run으로 진행해야한다. Run on Server로 해당 Servlet 파일을 서버 위에서 구동해보자. 

 

 

 

JSP와 마찬가지로, Index 외의 이름을 가지는 Servlet 파일은 클래스로 변환된 파일의 "이름"을 주소에 명시해주어야 한다. 이 부분은 각자 테스트해보자.

 

 

 

5. JSP, Servlet 파일 내부 수행 코드의 실행 차이

 

현재 필자가 작성한 코드는 JSP와 Servlet 모두 접속 시간과 현재 시간을 표시하게 되어 있다. 그런데 JSP 파일을 호출한 브라우저와 Servlet 파일을 호출한 브라우저에서 새로고침을 진행하면 두 결과가 동일하게 나타나지 않음을 확인할 수 있다. 먼저 JSP 부터 보자.

 

 

JSP는 접속 시간은 그대로 유지되는 반면 현재 시간은 새로고침을 진행하면 계속 갱신되는 것이 확인된다. 이는 작성한 코드의 태그 때문인데, 이 부분은 추후 포스팅에서 알아보자. 이제 Servlet 파일의 결과를 보자.

 

 

 

 

Servlet 은 새로고침에도 불구하고 접속 시간과 현재 시간의 차이가 발생하지 않는다. 이를 통해 알 수 있는 것은 Servlet 파일로 작성된 동적 페이지의 경우 해당 파일이 호출되면 컴파일 된 클래스 파일의 내용을 처음부터 다시 실행하도록 설계되어 있다는 것이다. 반면 JSP는 태그에 따라 (<%! %>, <% %>) 호출 시에만 실행되는 코드가 있고 그렇지 않은 코드도 존재한다는 것이다(Servlet도 제어자를 사용하면 동일한 결과를 나타내도록 만들 수 있을 것 같다는 생각은 드는데, 테스트해봐야한다).

 

 

 


 

다음 포스팅에서는 JSP의 기본 문법에 대해 알아보려한다.

 

 

* PS: 주말에 있었던 서버실 화재 때문에 포스팅이 조금 늦어졌다. 사고로 인해 블로그 내용을 전부 날려버리지는 않을까 노심초사했으나 단순 화재로 전원만 내려간 것이라 작성한 글 전부를 잃어버리는 불상사는 발생하지 않았다. 하지만 이번  사건으로 필자 역시 필자가 작성한 포스팅에 대한 자체적인 데이터 백업을 진행해야겠다는 생각이 들어, 당분간은 포스팅이 지금처럼 빠른 주기로 올라오지는 못할 듯 하다(어디로 백업을 해야할지, 복구는 어떤 방식으로 할지, 최악의 경우 타 블로그 업체를 사용하면서 내용을 이중으로 업로드하던가 자체 블로그 사이트를 만드는 것도 고려중이지만 아직 결정된 것은 없다...).

 

현재 블로그 스킨이 날아간 상태이며, 블로그 글 업로드 시 이미지가 출력되지 않는 현상이 있는데, 아직까지도 복구는 안되었나보다(2022-10-17 13:31)

 

 

Fin.

반응형

댓글