백엔드 - MVC, EL, JSTL

이상해씨·2022년 9월 19일
0

웹 풀스택(JAVA)

목록 보기
47/54

✔ Web Application Architecture

  • JSP로 구성할 수 있는 Web Application Architecture
    • Model1
    • Model2 : MVC(Model-View-Controller)
    • client의 요청에 대한 Logic 처리와 response page에 대한 처리를 모두 하느냐 response page 처리만 하는지가 가장 큰 차이.

1. Model1

◾ Model1

  • view와 logic을 JSP 페이지 하나에서 처리하는 구조.
  • Client 요청 -> JSP 페이지 : Java Beans or Service class -> 결과 출력.

◾ 장단점

장점단점
구조가 단순하며 직관적이기 때문에 배우기 쉬움.출력을 위한 view 코드와 로직 처리를 위한 java 코드가 섞여 JSP 코드 자체가 복잡해짐.
개발 시간이 비교적 짧아 개발 비용 감소JSP 코드에 Back-End(Developer)와 Front-End(Designer)가 혼재되어 분업이 힘들어짐.
project의 규모가 커지게 되면 코드가 복잡해져 유지보수가 어려움.
확장성(신기술의 도입, framework)이 나쁨.

2. Model2(MVC Pattern)

◾ Model2

  • 처리 분업
    • Servlet : Client 요청 처리.
    • Java Class(Service, Dao, ...) : Logic 처리.
    • JSP : Client에게 출력하는 response page
  • MVC(Model-View-Controller) Pattern을 웹 개발에 도입한 구조.
Model2MVC Pattern설명
Service, Dao or
Java Beans
Model- Logic(Business & DB Logic)을 처리하는 모든 것
- controller로 부터 넘어온 data를 이용하여 이를 수행하고
  그에 대한 결과를 다시 controller에 return.
JSPView- 모든 화면 처리 담당. Client의 요청에 대한 결과 뿐 아니라
  controller에 요청을 보내는 화면단도 jsp에서 처리
- Logic 처리를 위한 java code는 사라지고 결과 출력을 위한 code만 존재.
ServletController- Client의 요청을 분석하여 Logic 처리를 위한 Model단 호출
- return 받은 결과 data를 필요에 따라 request, session등에 저장
- redirect 또는 forward 방식으로 jsp(view) page를 이용하여 출력.

◾ MOdel2 구조 : MVC Pattern

◾ 장단점

장점단점
출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리되었기 때문에 JSP는 Model1에 비해 코드가 복잡하지 않음.구조가 복잡하여 초기 진입이 어려움.
화면단과 Logic단이 분리 되었기에 분업 용이.개발 시간의 증가로 개발 비용 증가.
기능에 따라 code가 분리되었기 때문에 유지 보수가 쉬움.
확장성이 뛰어남.

✔ EL(Expression Language)

◾ EL 기본

  • 표현을 위한 언어 : JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 Language.
    • <%= %> 을 대체할 수 있음.
    • 도트 연산자 왼쪽은 반드시 java.util.Map 또는 Java Bean 객체.
    • 도트 연산자 오른쪽은 반드시 맵의 키 또는 Bean 프로퍼티.
  • EL에서 제공하는 기능
    • JSP 네가지 기본 객체가 제공하는 영역의 속성.
    • 자바 클래스 메소드 호출.
    • 표현 언어만의 기본 객체.
    • 수치, 관계, 논리 연산 제공.

◾ EL 문법

  • Map : ${Map.Map의 키}
  • Java Bean : ${JavaBean.Bean프로퍼티}
  • 우선순위 : PageContext > Request > Session > Application > 실행X
  • 표현식 -> EL 변환
    • 표현식 : <%= ((com.ssafy.model.MemberDto) request.getAttribute("userinfo")).getZipDto().getAddress() %>
    • EL : ${userinfo.zipDto.address}
  • []연산자
    • Dot표기법 이외에 []연산자로 객체의 값에 접근 할 수 있음.
    • [] 연산자 안의 값이 문자열인 경우
      • 맵의 키 혹은 자바빈의 프로퍼티
      • 리스트 및 배열의 인덱스 (ex) "1", "100", ...
      • 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경하여 처리.

◾ EL 내장객체

  • JSP 페이지에서 EL 표현식에서 사용할 수 있는 객체.
categoryidentifierTypedescription
JSPpageContextJava Bean현재 페이지의 프로세싱과 상응하는 PAgeContext instance.
범위
(scope)
pageScopeMappage scope에 저장된 객체 추출.
requestScopeMaprequest scope에 저장된 객체 추출.
sessionScopeMapsession scope에 저장된 객체 추출.
applicationScopeMapapplication scope에 저장된 객체 추출.
요청 매개변수paramMapServletRequest.getParameter(String)을 통해 요청 정보 추출.
paramValuesMapServletRequest.getParameterValues(String)을 통해 정보 추출.
요청 헤더headerMapHttpServletRequest.getHead(String)을 통해 헤더 정보 추출.
headerValuesMapHttpServletRequest.getHeaders(String)을 통해 헤더 정보 추출.
쿠키cookieMapHttpServletRequest.getCookies()를 통해 쿠키 정보 추출.
초기화 매개변수initParamMapServletContext.getInitParameter(String)을 통해 초기화 파라미터 추출.

◾ EL 사용

  • pageContext(Java Bean)을 제외한 모든 내장 객체는 Map
    • key-value의 쌍으로 값 저장
    • 기본 문법 : ${expr}

◾ EL 연산자

  • 대부분 java와 동일
description
산술+, -, *, /, %
관계형==, !=, <, >, <=, >=
3항 연산조건 ? 값1 : 값2
논리&&,
타당성 검사empty

✔ JSTL(JSP Standard Tag Library)

◾JSTL 기본

  • 자바서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library)
    • Java EE 기반 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음.
    • XML 데이터 처리, 조건문, 반복문, 국제화와 지역화 같은 일을 처리하기 위한 JSP 태그 라이브러리를 추가하여 JSP 사양 확장.
    • JSP 페이지 내에서 자바 코드를 사용하지 않고 로직을 내장하는 방법 제공.
  • JSTL
    • custom tag : 개발자가 직접 태그를 작성할 수 있는 기능.
      • 많이 사용되는 것들을 모아 JSTL 규약 작성.
    • 논리적인 판단, 반복문의 처리, 데이터베이스 등의 처리.

◾JSTL Tag

  • directive 선언 형식 : <%@ taglib prefix = "prefix" uri="uri" %>
libraryprefixfunctionURI
corec변수 지원, 흐름제어, URL 처리http://java.sum.com/jsp/jstl/core
XMLxXML 코어, 흐름제어, XML변환http://java.sum.com/jsp/jstl/xml
국제화fmt지역, 메시지 형식, 숫자 및 날짜 형식.http://java.sum.com/jsp/jstl/fmt
databasesqlSQLhttp://java.sum.com/jsp/jstl/sql
함수Collection, String 처리http://java.sum.com/jsp/jstl/functions

◾JSTL core tag

functiontagdescription
변수지원setjsp page에서 사용할 변수 설정.
remove설정한 변수 제거
흐름제어if조건에 따른 코드 실행
choose, when, otherwise다중 조건을 처리할 때 사용.(is ~ else if ~ else)
forEacharray나 collection의 각 항목 처리할 때 사용.
forTokens구분자로 분리된 각각의 토큰을 처리할 때 사용(StringTokenizer)
URL처리importURL을 사용해 다른 자원의 결과 삽입
redirect지정한 경로로 redirect
urlURL 작성
기타태크catchException 처리에 사용
outJspWriter에 내용 처리한 후 출력.

◾변수 선언 : <c:set>

  • 변수나 특정 객체의 프로퍼티에 값을 할당할 때 사용.
  • var 속성 : 변수. 범위는 scope 속성으로 설정(default page)
  • value 속성 : 값이나 액션의 Body content로 값 설정.
  • 객체의 프로퍼티에 값 할당할 경우
    • target 속성 : 객체
    • property 속성 : 프로퍼티명
<!-- 변수 할당 -->
<c:set value = "value" var = "varName" [scope="{page|request|session|application}"]/>

<!-- Body Content 활용 -->
<c:set var = "varName">body content</c:set>

<!-- 객체 프로퍼티 값 할당 -->
<c:set value = "value" target="target" property="propertyName"/>

◾예외 : <c:catch>

  • JSP는 기본적으로 오류 페이지를 통해 오류 처리.
  • 오류 페이지로 넘기지 않고 직접 처리할 때 사용.
  • var 속성 : 발생한 예외를 담을 page 생존 범위 변수 지정.
<c:catch var="ex">
code
</c:catch>

<c:if test="${ex != null}">
	예외 처리
</c:if>

◾조건문 : <c:if>, <c:choose>, <c:when>, <c:otherwise>

  • <c:if> : test 속성에 지정된 표현식을 평가하여 true인 경우 Body 컨텐츠 수행.
  • <c:choose>, <c:when>, <c:otherwise>을 통해 if ~ else if ~ else 수행 가능.
<!-- 조건 -->
<c:if test="%{userType eq 'admin'}">
	code
</c:if>

<!-- 다중 조건 -->
<c:choose>
	<c:when test="${condition1}">
    	code1
    </c:when>
    
    <c:when test="${condition2}">
    	code2
    </c:when>
    
    <c:otherwise>
    	code3
    </c:otherwise>
</c:choose>

◾반복문 : <c:forEach>

  • 컬렉션에 있는 항목들에 대하여 액션의 Body 컨텐츠 반복 수행.
    • Array, Collection, Map, 콤마로 분리된 문자열 등.
  • var 속성 : 반복에 대한 현재 항목을 담는 변수 지정.
  • items 속성 : 반복할 항목들을 갖는 컬렉션 지정.
  • varStatus 속성 : 지정한 변수를 통해 현재 반복의 상태 확인 가능.
<c:forEach var = "item" items="${collection_name}" varStatus="step">
	${step.count}. ${item.name}<br/>
</c:forEach>
profile
후라이드 치킨

0개의 댓글