본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] 서블릿 객체 생성과 실행

by 일단연 2023. 5. 23.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 서블릿 객체 생성과 실행 

Tomcat에 의해 서블릿 코드가 실행될 수 있게 코드 배치, 요청

  • 클래스 파일의 위치는 예약되어 있음
    • Tomcat 홈 디렉토리>webapps>ROOT>WEB-INF>classes
  • 서블릿 클래스를 만들 때 패키지가 있었다면 패키지명대로 폴더 깊이를 가져와야 함
    • 예: com.java.nana 패키지라면 com 폴더>java폴더>nana폴더>Nana.java
  • WEB-INF는 사용자(클라이언트)에 의해 요청될 수 있는 디렉토리가 아님
    • 브라우저에서 링크로 WEB-INF 속 파일을 달라고 요청할 수 없음
    • WEB-INF 내부의 모든 자원(컴파일된 파일, web.xml 같은 설정 파일 등)들은 서버에서만 사용 가능

서블릿 코드를 URL과 매핑하기

  • 사용자가 WEB-INF의 파일을 요청할 수 있는 방법
    • 자바 서버 애플리케이션의 내용은 웹서버나 WAS만 알고 있으면 됨 (사용자는 접근 불가능)
    • 사용자는 URL로 파일을 요청
    • WAS는 URL과 매핑된 Servlet 코드를 찾아 실행하고 그 결과를 사용자에게 돌려줌
      • 사용자가 HTTP 메소드로 요청할 때 사용되는 이름을 자바 서ㄱㄱ버 애플리케이션의 클래스 파일과 매핑하는 작업이 필요
      • 사용자는 실제 클래스 파일명과 상관없는 다른 이름으로 요청할 수 있음
  • 사용자는 URL 형식으로 WEB-INF가 아닌 다른 경로를 사용할 수 있음
    • 해당 URL로 요청이 들어오면 그에 맞는 서블릿 클래스가 실행되게 하겠다는 매핑 정보를 Tomcat의 web.xml 파일에 설정 (요청이 들어오면 Tomcat이 그 요청에 맞는 서블릿 클래스를 찾아 실행해주겠다)
  • 서블릿 코드를 URL과 매핑하는 방법
    • 1) Tomcat 홈 디렉토리>webapps>ROOT>WEB-INF에 classes 폴더를 만들고, 컴파일된 파일인 Nana.class를 해당 폴더로 옮김
    • 2) web.xml 파일에서 <web-app>태그 안에 <servlet>태그와 <servlet-mapping>태그 삽입
    • 3) 설정을 변경했기 때문에 톰캣 서버를 재실행(bin>startup.bat 파일 재실행)
    • 4) 브라우저에 localhost:8090/hello를 입력하면 아무것도 출력되지 않는 창이 뜸
      • startup.bat에는 hello Servlet이 출력됨 - Nana.java의 System.out.println(”hello Servlet”);이 실행된 것
        • 서버의 콘솔이 아니라 클라이언트에게 출력될 수 있게 하는 도구(response)가 필요
      • 여기서 java.lang.UnsupportedClassVersionError 오류가 발생
      • 해당 오류는 현재 구동되는 JVM에서 지원되지 않는 Version의 class 파일이 로드될 경우 발생
      • cmd에 java -version 명령어를 입력해 확인하니 java 11 버전을 사용 중
      • JAVA_HOME은 JDK 1.8로 설정해둠
      • Nana.class는 11 환경에서 컴파일되었으니 구동 JVM 1.8에서 로드되지 못해 발생하는 에러
      • 메모장을 이용해 서블릿을 작성하고 컴파일해서 발생한 문제인지 아직 알 수 없으므로 이클립스에서도 서블릿을 작성해 컴파일해본 후 오류를 수정할 예정
    • 수정한 web.xml 코드
      • /hello로 요청이 오면 na 서블릿을 실행하라 > na 서블릿은 Nana.class 파일을 의미
  •  
    • <servlet-mapping> 태그: 사용자에게 제공되는 URL 정보
      • 사용자에게 제공되는 서블릿명을 URL 형식으로 작성
    • <servlet> 태그
      • <servlet-mapping> 태그의 서블릿명에 매핑되는 서블릿 클래스명을 작성
    • <servlet-class>태그
      • 실행될 서블릿 클래스 파일 작성
      • 패키지명이 있다면 <servlet-class>com.hello.Nana</servlet-class>처럼 작성해줘야 함
  • <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> //실행할 서블릿 코드 <servlet> <servlet-name>na</servlet-name> <serlvet-class>Nana</servlet-class> </servlet> //사용자에게 제공하는 URL 정보 <servlet-mapping> <servlet-name>na</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> </web-app>