[230830 DAY08] JSP_JSTL, MVC2, FRONT-CONTROLLER

jngyoon·2023년 8월 30일

6. JSP

목록 보기
8/8
post-thumbnail

JSTL

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 추가)

jstl_test2.jsp

<%@ 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>

<c:if> 속성

  • test : '조건식' (필수 속성)
  • var : 조건 결과를 저장할 변수 지정
  • scope : 조건 결과를 저장할 변수의 저장 scope를 지정

<c:choose> <c:when> <c:otherwise> 사용 방법

JAVA의 switch ~ case문

<c:choose> switch, <c:when>은 case, <c:otherwise>는 default에 해당됨

MVC2

[JSP 방식]

	a.jsp -> b.jsp - > c.jsp
		 ↓↑
		  DB
	
	각 페이지마다 필요시 자바코드가 작성되며, 
    DB와 연결하는 코드도 JSP 파일 안에 모두 작성된다. 
    분리되어 있지 않기 때문에 소규모 프로젝트에는 어울리는 방식이지만 
    가독성이 떨어지고 분업과 유지보수가 좋지 않으므로 규모가 커지면 불편해진다.

[MVC Model 1 방식]

	a.jsp -> b.jsp - > c.jsp
			  ↓↑
			DAO,DTO
			  ↓↑
		  	  DB

	b.jsp 에서 DAO의 메소드를 호출함으로써 자바코드가 섞이게 된다.
	하지만 선언(구현)은 분리되어 JAVA파일에(class) 구현되어 있으므로	
	JSP 내의 JAVA 코드의 양이 굉장히 줄어들게 된다.
	하지만 페이지가 확장될수록 유지보수가 상대적으로 좋지 않다.

[ MVC Model 2 방식]

	(Controller - Servlet)
	a.jsp -> b.java - > c.jsp
			   ↓↑
			DAO,DTO
			   ↓↑
		 	   DB

a.jsp에서 다음 페이지를 이동하기 전에 필요한 비즈니스 로직을
b.java 서블릿에 완벽히 분리하여 관리한다.
요청시 안맞은 서블릿으로 web.xml에서 참고 후 찾아가고 
그 곳에서 처리 완료된 결과를 들고 c.jsp로 이동하여 출력하는 형태이다.

Front-Controller 패턴

		  *.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문)를 하게 된다.

0개의 댓글