JSP Standard Tag Library
연산이나 조건문, 반복문을 편하게 처리할 수 있으며,
JSP 페이지 내에서 자바코드를 사용하지 않고도
로직을 구현할 수 있는 효과적인 방법을 재공한다.
JSP JSTL
<% if(조건식){ %> <c:if test="조건식">
<p>결과</p> <p>결과</p>
<% } %> </c:if>
archive.apache.org/dist/jakarta/taglibs/standard/binaries/
> jakarta-taglibs-standard-1.1.2.zip 다운로드 > 압축해제
> 사용할 프로젝트에 라이브러리 추가(jakarta-taglibs-standard-1.1.2 > lib > jstl.jar, standard.jar 추가)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//JSTL을 사용하기 위해선, JSTL라이브러리를 추가해야함
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl_test2</title>
</head>
<body>
<h2>JSTL 제어문(조건문)</h2>
<c:set var="num" value="40"/>
<h3>c:if</h3>
<c:if test="${num > 50}">
이 수는 50보다 큽니다!<br>
</c:if>
<c:if test="${num>30}">
이 수는 30보다 큽니다!<br>
</c:if>
<hr>
<h3>c:choose(if ~ else if ~ else 문도 choose로 표현)</h3>
<c:choose>
<%-- 이 영역에는 jsp 주석으로만 주석처리 가능 --%>
<c:when test="${num>50}">
이 수는 50보다 큽니다!<br>
</c:when>
<c:when test="${num>30}">
이 수는 30보다 큽니다!<br>
</c:when>
<c:when test="${num>10}">
이 수는 10보다 큽니다!<br>
</c:when>
<c:otherwise>
이 수는 그 외의 숫자입니다.<br>
</c:otherwise>
</c:choose>
</body>
</html>
JAVA의 switch ~ case문
<c:choose> switch, <c:when>은 case, <c:otherwise>는 default에 해당됨
a.jsp -> b.jsp - > c.jsp
↓↑
DB
각 페이지마다 필요시 자바코드가 작성되며,
DB와 연결하는 코드도 JSP 파일 안에 모두 작성된다.
분리되어 있지 않기 때문에 소규모 프로젝트에는 어울리는 방식이지만
가독성이 떨어지고 분업과 유지보수가 좋지 않으므로 규모가 커지면 불편해진다.
a.jsp -> b.jsp - > c.jsp
↓↑
DAO,DTO
↓↑
DB
b.jsp 에서 DAO의 메소드를 호출함으로써 자바코드가 섞이게 된다.
하지만 선언(구현)은 분리되어 JAVA파일에(class) 구현되어 있으므로
JSP 내의 JAVA 코드의 양이 굉장히 줄어들게 된다.
하지만 페이지가 확장될수록 유지보수가 상대적으로 좋지 않다.
(Controller - Servlet)
a.jsp -> b.java - > c.jsp
↓↑
DAO,DTO
↓↑
DB
a.jsp에서 다음 페이지를 이동하기 전에 필요한 비즈니스 로직을
b.java 서블릿에 완벽히 분리하여 관리한다.
요청시 안맞은 서블릿으로 web.xml에서 참고 후 찾아가고
그 곳에서 처리 완료된 결과를 들고 c.jsp로 이동하여 출력하는 형태이다.
*.do
a.jsp -> web.xml -> Servlet(FrontController) -> c.jsp
↓
if,switch
↓
DB <-> DAO,DTO <-> Controller(Service - ~~~Action)
개발자가 정의한 확장자(.us, .bo, .do, ...)를 페이지 요청 주소에
작성하게 되면 web.xml에 가서 매핑되어 있는 서블릿으로 찾는다.
각 URL들(userjoin, uwerlogin, ...)을 전부 web.xml에
하나씩 매핑해놓게 되면 web.xml의 코드가 길어지기 때문에
*.us 형태로 하나의 서블릿에 매핑을 해놓는다.
(어떤것이든 .us가 붙은 요청은 하나의 경로로 보내주도록 한다.)
이러한 경로를 통해 가게되는 서블릿 파일을 프론트 컨트롤러 라고 한다.
(가장 먼저 요청을 맞이하는 컨트롤러라서 프론트 컨트롤러) 이 프론트 컨트롤러는
.us 앞에 있는 요청명으로(userjoin, userlogin, ...) 어떤 로직을 수행할지
판단하고 분기처리(if문, switch문)를 하게 된다.