JSP와 Servlet 기초 정리 - 입사 전 리마인드

2025. 2. 13. 23:20·🗄️ Backend/JSP

이번 포스팅에서는 실무에서 JSP와 Servlet을 바로 사용해야 하는 상황을 대비해, JSP/Servlet의 기본적인 사용법과 핵심 개념을 정리해보려 합니다. 

JSP

JSP 특징

  • 동적 웹 어플리케이션 컴포넌트로, 자바 코드를 사용 가능
  • 파일 확장자는 .jsp
  • 클라이언트의 요청에 따라 동적으로 작동 후, 최종 응답은 HTML 코드로 전달
  • JSP는 웹서버(WAS)에서 자동으로 Servlet으로 변환되어 동작
  • MVC 패턴에서 View 역할로 주로 사용

JSP 태그의 개념 이해

  • Servlet은 java 언어를 이용하여 문서를 작성하고, PrintWriter 객체를 통해 HTML 코드를 삽입
  • JSP는 이와 반대로 HTML 코드 안에 java 코드를 삽입하여 동적 문서를 작성
  • HTML 코드 안에 자바 코드를 삽입하기 위해서는 JSP 태그를 사용

JSP 태그의 종류

  1. 스크립트릿(Scriptlet): <% %>
    • JSP 페이지에서 Java 코드를 삽입하기 위한 가장 기본적인 태그
    • 우리가 알고 있는 대부분의 Java 코드를 사용할 수 있음
    • 예시:
      <% 
        int num = 10;
        if (num > 5) {
            out.println("num은 5보다 큽니다.");
        }
      %>
      
  2. 선언자(Declaration): <%! %>
    • JSP 페이지 내에서 멤버 변수나 메서드를 선언할 때 사용
    • 여기서 선언된 변수와 메서드는 JSP 전체(클래스 전체)에서 사용 가능 (전역 변수, 멤버 메서드)
    • 예시:
      <%! 
        private String globalVar = "전역 변수입니다.";
        
        public String getGlobalVar() {
            return globalVar;
        }
      %>
      
  3. 표현식(Expression): <%= %>
    • JSP 페이지 내에서 변수의 값 또는 메서드 호출 결과를 화면에 바로 출력할 때 사용
    • 표현식의 결과 데이터 타입은 String으로 처리되며, 세미콜론(;)을 사용하지 않음
    • out.println()을 대체하는 기능을 함
    • 예시:
      <%= "이 문장은 표현식으로 출력됩니다." %>
      <%= getGlobalVar() %>
      
  4. 주석(Comments): <%-- --%>
    • 프로그램 실행에 영향을 주지 않고, 코드 설명이나 메모 용도로 사용
    • HTML 주석: <!-- -->
      • 브라우저 소스보기 시 주석이 그대로 노출
    • JSP 주석: <%-- --%>
      • 브라우저 소스보기 시 노출되지 않음
    • 자바 주석: //, /* ... */
      • 혼용해서 사용할 수 있음
  5. 지시자(Directive): <%@ %>
    • JSP 페이지의 전체적인 속성을 지정할 때 사용
    • 종류:
      1. page 지시자: JSP 페이지에 대한 정보 지정 (문서 타입, import, 에러 페이지 등)
        <%@ page language="java" 
                 contentType="text/html; charset=UTF-8" 
                 pageEncoding="UTF-8" %>
        
        • language: JSP가 사용할 언어 (java 고정)
        • import: 자바 패키지 import
        • errorPage: 에러 발생 시 보여줄 페이지 설정
        • contentType: 결과 문서 유형 (주로 text/html)
        • pageEncoding: 출력 문자 인코딩 (UTF-8 권장)
      2. include 지시자: JSP 페이지의 특정 영역에 다른 문서를 포함
        <%@ include file="header.jsp" %>
        
      3. taglib 지시자: JSP에서 사용할 태그 라이브러리를 지정
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
        
  6. 액션 태그(Action Tag): <jsp:*>
    • 다른 JSP 페이지를 포함하거나(JavaBean 사용, forward, include 등) 할 때 사용
    • 예시:
      <jsp:include page="header.jsp" />
      <jsp:useBean id="beanName" class="com.example.BeanClass" />
      

JSP 태그 종류 정리 표

태그 태그 이름 설명 사용 예시

<% %> 스크립트릿(scriptlet) 모든 Java 코드를 삽입할 수 있는 부분 <% if (condition) { %> ... <% } %>
<%= %> 표현식(expression) 결과(값)를 출력하는 부분 <%= variable %>, <%= methodCall() %>
<%-- --%> 주석(comments) 주석 처리 <%-- This is a comment --%>
<%! %> 선언자(declaration) 클래스 멤버(필드, 메서드) 선언 <%! private String name; %>
<%@ %> 지시자(directive) 페이지 속성 설정, 다른 파일 포함 지시 등 <%@ page language="java" %>, <%@ include file="header.jsp" %>
<jsp:*> 액션(action) 다른 JSP 페이지 포함, JavaBean 사용 등 <jsp:include page="header.jsp" />, <jsp:useBean id="beanName" ...

JSP 아키텍쳐

  1. jsp 파일을 WAS(웹 서버)에서 실행(요청)하면, 먼저 JSP 파일을 자바 코드(서블릿)로 변환
  2. 변환된 자바 코드를 컴파일하여 실행
  3. 최종 결과를 HTML로 응답

서버 사이드 렌더링 vs 클라이언트 사이드 렌더링

  • 서버 사이드 렌더링: JSP(서블릿)
    • 서버에서 HTML을 미리 렌더링하여 클라이언트에 전송
    • 클라이언트 측에서는 완성된 HTML만 받아서 표시
  • 클라이언트 사이드 렌더링: React, Vue, Angular
    • 서버에서 JSON 등의 데이터를 받고, 브라우저(클라이언트)에서 동적으로 렌더링

Servlet

Servlet 특징

  • 동적 웹 어플리케이션 컴포넌트 (순수 자바 코드로 작성)
  • .java 확장자
  • 클라이언트의 요청에 따라 동적으로 동작 후, HTML로 응답
  • Java Thread를 이용하여 동작
  • MVC 패턴에서 Controller 역할로 많이 사용

JSP와 Servlet 비교

  • JSP(HTML + JAVA)
    • HTML 문서 안에 Java 코드를 직접 삽입할 수 있음
    • 주로 사용자 인터페이스(View)를 생성하는 데 사용
  • Servlet(Only JAVA)
    • 순수 자바 코드 (.java 확장자)로 웹 페이지 처리를 담당
    • 주로 비즈니스 로직을 처리하거나, 컨트롤러 역할 수행
    • 비즈니스 로직, 데이터베이스 연동, 공통 로직 등을 처리

JSP를 Servlet으로 변환하는 경우

  • JSP 파일 내에 자바 로직이 지나치게 많고, HTML은 거의 없는 경우
  • 유지보수성, 확장성, 테스트 용이성, 재사용성, 응답 속도 측면에서 Servlet이 유리할 수 있음

서블릿 매핑과 web.xml 설정

1) URL-Mapping

  • URL 매핑을 통해, 사용자가 특정 URL로 접근했을 때 어떤 서블릿이 동작할지 지정
  • URL 매핑을 하지 않으면, 클래스 전체 경로가 주소에 노출되어 보안 문제와 가독성 문제 발생
  • 어노테이션 이용 방법 (@WebServlet):
  • @WebServlet("/HelloWorld") // URL 매핑 public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("hello world"); // 브라우저로 출력 resp.setContentType("text/html; charset=UTF-8"); PrintWriter out = resp.getWriter(); out.println("헬로 월드"); } }

2) web.xml 설정파일 수정

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>kr.co.park.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

JSP 내장 객체 - request, response, out 등

  • JSP 내장 객체란, JSP 페이지에서 별도의 생성 코드 없이도 바로 사용할 수 있는 객체
  • JSP가 서블릿으로 변환될 때, 컨테이너가 자동으로 객체들을 생성해주므로 개발자는 손쉽게 사용 가능

내장 객체 해당 클래스 설명

request javax.servlet.http.HttpServletRequest HTTP 요청 정보 객체
response javax.servlet.http.HttpServletResponse HTTP 응답 정보 객체
out javax.servlet.jsp.JspWriter JSP 페이지의 출력 스트림 객체
session javax.servlet.http.HttpSession 세션 관리를 위한 객체
application javax.servlet.ServletContext 어플리케이션 전역에서 공유되는 정보 관리 객체
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 컨텍스트 정보 제공
page javax.servlet.jsp.HttpJspPage 현재 JSP 페이지 자체를 나타내는 객체
config javax.servlet.ServletConfig JSP 페이지의 초기화 파라미터 읽어오는 객체
exception java.lang.Throwable 에러 페이지에서 에러 정보를 담는 객체

HttpRequest 방식 - GET, POST

GET 방식

  • 서버에 데이터를 요청할 때 주로 사용
  • 전송하는 데이터가 주소(URL)에 노출됨
  • 보안성이 낮음 (주소에 데이터가 보이기 때문)
  • 전송 데이터 용량 제한이 있음
  • 검색, 게시판 글 조회 등의 경우 사용
  • HTML form 태그가 반드시 필요하지는 않음
  • 쿼리스트링 형식: ?name=value&name2=value2

POST 방식

  • 서버에 데이터를 전송할 때 주로 사용
  • 전송 데이터가 메시지 바디에 포함되어 노출되지 않음
  • 보안성이 높음
  • 데이터 용량 제한이 사실상 없음(브라우저별 차이는 있을 수 있으나, GET보다는 훨씬 많은 양 전송 가능)
  • HTML form 태그 필수
  • 주로 회원가입, 로그인, 비밀번호 전송 등의 경우 사용

브라우저 한글처리

  • 톰캣 서버의 기본 문자 인코딩은 ISO-8859-1
  • 별도의 인코딩 설정 없이 한글을 전송하면 깨짐 현상 발생

1) GET 방식

  • server.xml 파일의 <Connector> 태그에 URIEncoding="UTF-8" 속성 추가
  • <!-- server.xml 예시 --> <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" connectionTimeout="20000" redirectPort="8443" />

2) POST 방식

  • 서블릿이나 JSP에서 request 객체를 사용하기 직전에 인코딩 지정
    request.setCharacterEncoding("UTF-8");
    

request 객체

  • 웹 브라우저가 서버에 무엇을 요청할 때, 그 요청 정보가 담기는 객체
  • 기능:
    • 클라이언트(브라우저) 관련 정보 읽기
    • 서버 관련 정보 읽기
    • 클라이언트가 전송한 요청 파라미터 읽기
    • 클라이언트가 전송한 쿠키 읽기

자주 사용하는 메서드

  • getContextPath() : 현재 웹 어플리케이션의 컨텍스트 루트 경로 반환
  • getMethod() : 요청 방식을 반환 (GET, POST 등)
  • getServerName() : 서버 이름(도메인) 반환
  • getServerPort() : 서버 포트 번호 반환
  • getRequestURL() : 요청 URL 전체 반환
  • getRequestURI() : 요청 URI 반환
  • getRemoteAddr() : 클라이언트 IP주소 반환
  • getProtocol() : 현재 요청 프로토콜 반환 (HTTP/1.1 등)
  • getParameter(name) : 단일 파라미터 값 반환 (없으면 null)
  • getParameterValues(name) : 같은 이름으로 여러 값을 가진 파라미터를 배열로 반환 (없으면 null)

예시:

String userName = request.getParameter("userName"); 
String[] hobbies = request.getParameterValues("hobby"); 

response 객체

  • 서버가 웹 브라우저에 응답할 때, 그 응답 정보를 담는 객체

자주 사용하는 메서드

  • getCharacterEncoding() : 응답 시 사용되는 문자 인코딩 형태 반환
  • addCookie(Cookie c) : 쿠키를 지정하여 전송
  • sendRedirect(String URL) : 지정한 URL로 리다이렉트(재요청)
    • 예: response.sendRedirect("/loginSuccess.jsp");

 

위 내용들은 JSP와 Servlet의 기본적인 사용법과 아키텍처, 태그의 종류, 내장 객체 등에 관한 핵심 개념을 정리한 것입니다.

  • 실무에서 JSP를 사용할 때는 서버 사이드 렌더링에 익숙해져야 하며,
  • Servlet을 통해 로직 처리(Controller)를 담당하는 구조(MVC)를 이해해야 합니다.
  • 또한 요청/응답 과정에서 인코딩, 세션/쿠키, request/response의 활용이 매우 중요합니다.

'🗄️ Backend > JSP' 카테고리의 다른 글

JSP Cookie , Session , Error page , Action Tag - 입사 전 리마인드  (1) 2025.02.14
JSP와 MyBatis  (4) 2024.10.18
JSP와 MVC2 패턴  (1) 2024.10.18
JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL  (1) 2024.10.18
쿠키(Cookie)와 세션(Session) 완벽 가이드  (0) 2024.10.18
'🗄️ Backend/JSP' 카테고리의 다른 글
  • JSP Cookie , Session , Error page , Action Tag - 입사 전 리마인드
  • JSP와 MyBatis
  • JSP와 MVC2 패턴
  • JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    자바
    스프링부트
    스프링
    백준
    정보처리기사
    ADsP
    정처기
    백엔드
    데이터베이스
    AWS
    Spring
    springboot
    GCP
    쿼리
    SQL
    DML
    java
    java기초
    jsp
    http
  • 최근 댓글

  • 최근 글

hjwjo
JSP와 Servlet 기초 정리 - 입사 전 리마인드
상단으로

티스토리툴바