FrontController
- 요청 접수
- 컨트롤러 실행
- 내부이동
Java 클래스
- 요청처리
- 업무로직 메소드 호출
- JSP에서 표현할 데이터 저장
- 뷰페이지 반환
JSP
- 데이터 표현
- 데이터는 Java 클래스의 request.setAttribute~ 일 때 HttpServeletReqeust에 속성으로 저장된다.
- HttpServletRequest에서 그 데이터를 전달 받아 표현한다.
* 표현 법 ${~~~}
- "~~~"이라는 속성명을 저장된 속성값을 표현한다.
HttpSession
- 세션객체는 클라이언트별로 생성된다.
- 세션객체는 로그아웃 전까지 유지된다.
- 세션객체에 저장되는 속성은 클라이언트의 고유한 개인정보(로그인한 사용자정보)다.
ServletContext
- 로그인한 상태에서는 모두 사용가능하다.
- 애플리케이션객체는 서버가 실행될 때 생성되고, 종료될 때 폐기된다.
- 애플리케이션객체에 저장되는 속성은 모든 서블릿, 모든 JSP, 모든 필터, 모든 사용자에게 공유된다.
home.jsp
<div class="row mb-3">
<div class="col-12">
<p>${requestScope.message }</p>
<p>${message }</p>
</div>
</div>
실행결과
- 형식은 다르지만 똑같이 사용된다.
1. core 태그
2. fmt(formating) 태그
1. <c:out> 태그
package com.sample.controller;
import com.sample.model2.Controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class CoreController implements Controller{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setAttribute("content1", "안녕하세요");
request.setAttribute("content2", "<button>버튼</button>");
return "core.jsp";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" >
<title>웹 애플리케이션</title>
</head>
<body>
<div class="container">
<div class="row mb-3">
<div class="col-12">
<h1>Core 태그 라이브러리</h1>
</div>
</div>
<div class="row mb-3">
<div class="col-12">
<h3>out 태그</h3>
<p>EL 표현식으로 값 표현: ${content1 }</p>
<p>EL 표현식으로 값 표현: ${content2 }</p>
<p>out 태그로 값 표현: <c:out value="${content1 }" /></p>
<p>out 태그로 값 표현: <c:out value="${content2 }" /></p>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
</body>
</html>
실행결과
- out표현식은 <>를 태그로 인식하지 않기 때문에 button 태그가 활성화 되지 못한다.
그래서,
<p>out 태그로 값 표현: <c:out value="${content2 }" escapeXml="false" /></p>
를 추가해야 한다.
실행 결과
2. <c:if> 태그
if문과 동일한 역할을 수행한다.
else에 해당하는 태그는 없다.
사용법
<c:if test="${표현식}">
HTML 컨텐츠
</c:if>
주요 속성
test
검사조건을 정의한다.
결과값이 boolean 타입이어야 한다.
생략할 수 없다.
request.setAttribute("score", 65);
<div class="row mb-3">
<div class="col-12">
<h3>if 태그</h3>
<c:if test="${score >= 60 }">
<p>합격입니다.</p>
</c:if>
</div>
</div>
실행결과
request.setAttribute("score", 45);
실행결과
3. <c:choose> <c:when> <c:otherwise> 태그
if ~ else if ~ else if ~ else 와 동일한 역할을 수행한다.
사용법
<c:choose>
<c:when test="${조건식1}">
HTML 컨텐츠
<!-- test에서 제시한 조건식1이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:when test="${조건식2}">
HTML 컨텐츠
<!-- test에서 제시한 조건식2이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:when test="${조건식3}">
HTML 컨텐츠
<!-- test에서 제시한 조건식3이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:otherwise>
HTML 컨텐츠
<!-- test에서 제시한 조건식1, 조건식2, 조건식3이 전부 false면 HTML 컨텐츠가 화면에 출력된다. --->
</c:otherwise>
</c:choose>
<c:when>과 <c:otherwise>는 반드시 <c:choose>안에 위치해야 한다.
<c:when>은 조건식을 다르게 해서 여러 번 정의할 수 있다.
<c:otherwise>는 생략할 수 있고, 맨 마지작 <c:when> 다음에 정의해야 한다.
<c:when>으로 제시한 조건식이 true가 되면 남아있는 <c:when>은 검사하지 않는다.
<c:otherwise>는 <c:when>으로 제시한 조건이 모두 false로 판정될 때만 실행된다.