본문 바로가기
TIL

2024.05.09 55일차 WEB Servlet, JSP, EL·JSTL

by Song.dev 2024. 5. 9.

 

Servlet 서블릿

  • 동적 웹어플리케이션 컴포넌트 
  • 클라이언트의 요청에 동적으로 작동하고 응답은 HTML을 이용
  • java 확장자, java thread를 이용하여 동작
  • MVC 패턴에서 Controller로 이용됨

 

서블릿 맵핑

  • 지정된 url을 통해 맵핑 처리를 진행
  • 맵핑한 url로 요청이 들어왔을 때, 특정 서블릿 객체를 생성해서 컴파일을 진행하고
  • 요청에 대한 응답을 보내주는 방식을 사용
  • 또한 서버 내부 경로가 노출되어 보안에 위험이 생기는 것을 방지

 

서블릿 애플리케이션 작성법

  1. extends HttpServlet
  2. @WebServlet(”/쿼리스트링”) : 어노테이션, 클래스 선언부 바로 위에 작성
  3. service 메서드 오버라이딩
  4. req, resp 로 요청 처리
  5. PrintWriter, w.write으로 html 코드 직접 작성해서 응답 메시지 작성

 

 

 

HTTP Request 방식의 종류

  • HTTP(request)는 다양한 방식(Method)을 지원
  • HTTP request 방식은 GET, POST, PUT, DELETE, PATCH 등이 있음

 

  • GET 방식

    - 서버에 데이터를 요청하는 용도

    - 전송하는 데이터가 URL에 노출됨

    - 전송했던 데이터는 브라우저의 히스토리에 접속했던 주소와 함께 남아있어 보안성에 취약함

    - 서버의 정보를 가져올 필요성이 있을 때 사용

    - 전송 최대 크기는 브라우저별로 다르지만 정해져 있음 (IE=2048byte)

    - HTML form 태그가 반드시 필요하지는 않음

 

  • POST 방식

    - 서버에 데이터를 전송하는 용도

    - 전송되는 데이터는 전송 객체의 메시지 바디를 통해 전달됨

    - 브라우저에 전달되는 데이터가 남지 않기 때문에 보안성에 강함

    - 비밀번호나 주민번호 등 private한 데이터를 전송할 때 사용

    - 반드시 TML form 태그가 필요

    - 데이터 양의 제한이 없기 때문에 대량의 데이터를 전송할 수 있음

    ** 영문이나 숫자는 괜찮지만 한글이나 타 언어를 전송할 때는 인코딩 과정이 필요

 

 


JSP Java Server Pages

  • 동적 웹어플리케이션 컴포넌트
  • 클라이언트의 요청에 동적으로 작동하고 응답은 HTML을 이용
  • jsp 확장자, 웹서버와 통신 시 자동으로 Servlet으로 변환됨
  • MVC 패턴에서 View로 이용됨

 

JSP 파일을 실행했을 때 처리 순서

  1. JSP 파일을 실행하면 웹 서버에서 일단 JSP 파일을 Java 코드로 변환
  2. 변환 과정에서 작성한 JSP 태그에 따라 코드를 배치 
  3. HTML과 텍스트 등도 전부 자바 코드화
  4. 그 후 파일을 컴파일 하고 HTML로 응답

 


EL  (표현 언어, Expression Language)

  • JSP(JavaServer Pages)에서 사용되는 스크립트 언어로,
    변수나 속성에 접근하고 값을 표현하기 위한 간단한 표현 언어
  • ${} 형식의 표현식을 사용하여 변수나 속성에 접근하고 값을 표현
<!-- EL을 사용한 예시 -->
<h1>${user.name}님의 정보</h1>
<p>나이: ${user.age}</p>
<p>이메일: ${user.email}</p>

 

JSTL  (JSP Standard Tag Library)

  •  JSTL은 JSP 페이지에서 자주 사용되는 로직을 태그 형태로 제공하여 
    JSP 개발을 편리하게 해주는 라이브러리
  • JSP 페이지에서 자바 코드를 대체하고 비즈니스 로직과 표현 로직을 분리하여 
    유지보수성을 향상시킬 수 있는 강력한 기능을 제공
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="출력값">
<c:set var="변수명" value="설정값" scope="범위">
<c:if test="조건식" var="조건 처리 변수명">
<c:forEach items="객체명" begin="시작값" end="끝 값" step="증감식" var="변수명">