JSP 실습
지난 금요일에 톰캣 서버와 이클립스 IDE를 연결해 간단한 jsp 파일로 웹 페이지를 만들어 보았다.
프로젝트 구조

Tomcat v9.0 Server at localhost-config: 프로젝트에서 사용될 톰캣 서버- 폴더 내 파일 건들지 않기!
servletEx,webEx: 생성한 프로젝트src/main/java: 자바 서블릿 소스 파일webapp: JSP 파일 (클라이언트에서 파일 이름으로 접근할 수 있음. META-INF, WEB-INF 빼고)lib: 확장 라이브러리web.xml: 배포서술자- 웹 애플리케이션의 환경설정 정보를 담은 파일
- WAS가 처음 구동될 때 이 파일을 읽어 설정 내용을 톰캣에 적용하게 됨
절대 src 밑에 main 밑에 java 폴더는 건드리지 말기! (수정해도 반영 안 됨)
위에 있는 src/main/java 폴더에서 코드 작성하기.
JSP 페이지 예외처리
404: 요청한 JSP 페이지가 없을 때 발생하는 오류
500: 컨테이너에서 JSP 페이지 처리 중에 오류가 발생할 때 표시되는 오류
web.xml에서 에러 코드에 대한 예외 처리 페이지 설정이 가능하다.
webapp안에err폴더 만들고error_404.jsp,error_500.jsp파일을 만든다.- jsp 코드를 작성한다. (title, h1 태그만 건드리면 됨)
<!-- error_404.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>404 예외 처리 페이지</title>
</head>
<body>
<h1>요청한 페이지는 존재하지 않습니다.</h1>
</body>
</html>
<!-- error_500.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>500 예외 처리 페이지</title>
</head>
<body>
<h1>죄송합니다. 서비스 실행 중 오류가 발생했습니다.</h1>
<h1>잠시 후 다시 시도해 보세요.</h1>
</body>
</html>
web.xml에 예외 처리 페이지 설정 (아래 코드 추가)
<error-page>
<error-code>404</error-code>
<location>/err/error_404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/err/error_500.jsp</location>
</error-page>
JSP welcome 파일 지정
web.xml에 welcome 파일을 등록해 두면 브라우저에서는 컨텍스트 이름만으로 요청할 수 있다.
<welcome-file>mmain.jsp</welcome-file>
을 추가하면 http://localhost:8080/webEx만 입력해도 main.jsp가 요청된다.
컨텍스트
컨텍스트(Context): server.xml에 등록하는 웹 애플리케이션. 톰캣이 인지하는 하나의 애플리케이션.
지금 컨텍스트는 webEx이다.
웹 애플리케이션과 컨텍스트 이름이 꼭 같을 필요는 없지만 웬만하면 통일을 시킨다.
브라우저에서 요청 시 컨텍스트(webEx)를 생략하는 방법
Servers 더블 클릭 -> modules -> Edit -> Path에서 webEx 지워주면 http://localhost:8080만 해도 main.jsp 요청된다.

Servlet 기초
서블릿(Servlet): 서버 쪽에서 실행되면서 클라이언트 요청에 따라 동적으로 서비스를 제공하는 자바클래스.
독립적으로 실행되지 못하고 톰캣과 같은 JSP/servlet 컨테이너에서 실행된다.
- 서버 쪽에서 실행되면서 웹 브라우저 요청 시 기능을 수행
- 기존 정적 웹 프로그램의 문제점을 보완하여 동적인 기능을 제공
- 모든 메소드는 스레드 방식으로 실행
- 자바로 만들어져 자바의 특징(객체지향)을 가짐
- 컨테이너에서 실행. 컨테이너 종류에 상관없이 실행 – 플랫폼 독립적
- javax.servlet.http 패키지의 HttpServlet 클래스를 상속받음
서블릿 생명주기
클라이언트가 서블릿에 요청을 하면 서블릿은 자바 클래스이기 때문에 초기화, 서비스 수행, 소멸 과정을 거친다.
각 과정에서 서블릿 생명주기 메서드가 호출되어 기능을 수행한다.
- 요청 시 서블릿 객체 생성
- 서버는
init()메서드 호출하여 서블릿 초기화 service()메서드(doGet(),doPost()등) 호출하여 서블릿이 브라우저의 요청을 처리- 서버는
destroy()메서드 호출하여 서블릿 제거 (톰캣 서버 종료시키면 호출됨)
첫번째 서블릿 만들기
New -> Dynamic web Project 생성하고,
서블릿을 만들거기 때문에 Build Path를 설정해준다. -> Add External JARs해서 tomcat 폴더 안에 있는 servlet-api.jar 파일을 열어서 적용해준다.
그리고 src/main/java 안에 FirstServlet.java 파일을 만든다.

package ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
public void init() throws ServletException {
System.out.println("init 메소드 호출");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 호출");
}
public void destory() {
System.out.println("destory 메소드 호출");
}
}
그리고 web.xml 파일에서 위의 서블릿을 매핑한다.
<!-- welcome-file-list 태그 이후 아래에 추가 -->
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>ex01.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
그리고 브라우저에서 localhost:8080/ServletEx/first 으로 서블릿 요청하면 init 메서드, doGet 메서드가 호출되어 콘솔에 출력된다.

서블릿 기능 수행 과정
클라이언트로부터 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 다시 클라이언트에게 돌려준다.
요청, 응답과 관련된 API는 모두 javax.servlet.http 패키지에 있다.

서블릿에서 클라이언트 요청 받기
로그인을 요청했을 때 아이디와 비밀번호가 콘솔에 출력되는 실습을 해보자.
우선 webapp 폴더 밑에 login.html 파일을 생성한다.
<form> 태그로 서블릿을 요청한다.
action 속성에 데이터를 전송할 서블릿이나 jsp를 지정한다.
❕느낀점
TIL을 작성하면서 다시 오늘 배운 내용을 복습해보니 어려웠던 내용이 조금씩 이해되고 있다.
서블릿을 실습해보며 느낀점은 너무 비효율적이라는 것이다. ㅋㅋㅋ 서블릿, JSP가 현재 쓰이지 않는 이유를 직접 체감하며 깨달았다.
그래도 이 부분이 확실히 이해가 되어야 스프링, 타임리프도 잘 습득할 수 있기 때문에 열심히 배워야겠다.
파이팅~~
'Backend > Java' 카테고리의 다른 글
| [TIL-260311] Servlet & JSP 입문: 커넥션 풀, JSP 정의, JSP 스크립트 (1) | 2026.03.12 |
|---|---|
| [TIL-260310] Servlet & JSP 입문: 서블릿의 응답 처리, DB 연동 (0) | 2026.03.10 |
| [TIL-260306] Servlet & JSP 입문: 자바와 웹, 웹 애플리케이션, HTTP (0) | 2026.03.08 |
| [TIL-260212] 자바 기초: 내부 클래스, 스레드, 람다, 스트림 (0) | 2026.02.17 |
| [TIL-260211] 자바 기초: 예외처리와 제네릭, 컬렉션 프레임워크 (0) | 2026.02.17 |