* 본 글은 [뉴렉처]의 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에서 로드되지 못해 발생하는 에러
- 메모장을 이용해 서블릿을 작성하고 컴파일해서 발생한 문제인지 아직 알 수 없으므로 이클립스에서도 서블릿을 작성해 컴파일해본 후 오류를 수정할 예정
- startup.bat에는 hello Servlet이 출력됨 - Nana.java의 System.out.println(”hello Servlet”);이 실행된 것
- 수정한 web.xml 코드
- /hello로 요청이 오면 na 서블릿을 실행하라 > na 서블릿은 Nana.class 파일을 의미
-
- <servlet-mapping> 태그: 사용자에게 제공되는 URL 정보
- 사용자에게 제공되는 서블릿명을 URL 형식으로 작성
- <servlet> 태그
- <servlet-mapping> 태그의 서블릿명에 매핑되는 서블릿 클래스명을 작성
- <servlet-class>태그
- 실행될 서블릿 클래스 파일 작성
- 패키지명이 있다면 <servlet-class>com.hello.Nana</servlet-class>처럼 작성해줘야 함
- <servlet-mapping> 태그: 사용자에게 제공되는 URL 정보
<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>
'☕ Java 웹 프로그래밍 > Servlet & JSP' 카테고리의 다른 글
[Servlet&JSP] 웹 개발을 위한 이클립스 IDE 설치하기 (0) | 2023.05.23 |
---|---|
[Servlet&JSP] Servlet 문자열 출력 (0) | 2023.05.23 |
[Servlet&JSP] 서블릿 프로그램 만들기 (0) | 2023.05.23 |
[Servlet&JSP] Context 추가하기 (0) | 2023.05.23 |
[Servlet&JSP] 웹 문서 추가하기 (0) | 2023.05.23 |