장점 | 단점 |
---|---|
구조가 단순하며 직관적이기 때문에 배우기 쉬움. | 출력을 위한 view 코드와 로직 처리를 위한 java 코드가 섞여 JSP 코드 자체가 복잡해짐. |
개발 시간이 비교적 짧아 개발 비용 감소 | JSP 코드에 Back-End(Developer)와 Front-End(Designer)가 혼재되어 분업이 힘들어짐. |
project의 규모가 커지게 되면 코드가 복잡해져 유지보수가 어려움. | |
확장성(신기술의 도입, framework)이 나쁨. |
Model2 | MVC Pattern | 설명 |
---|---|---|
Service, Dao or Java Beans | Model | - Logic(Business & DB Logic)을 처리하는 모든 것 - controller로 부터 넘어온 data를 이용하여 이를 수행하고 그에 대한 결과를 다시 controller에 return. |
JSP | View | - 모든 화면 처리 담당. Client의 요청에 대한 결과 뿐 아니라 controller에 요청을 보내는 화면단도 jsp에서 처리 - Logic 처리를 위한 java code는 사라지고 결과 출력을 위한 code만 존재. |
Servlet | Controller | - Client의 요청을 분석하여 Logic 처리를 위한 Model단 호출 - return 받은 결과 data를 필요에 따라 request, session등에 저장 - redirect 또는 forward 방식으로 jsp(view) page를 이용하여 출력. |
장점 | 단점 |
---|---|
출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리되었기 때문에 JSP는 Model1에 비해 코드가 복잡하지 않음. | 구조가 복잡하여 초기 진입이 어려움. |
화면단과 Logic단이 분리 되었기에 분업 용이. | 개발 시간의 증가로 개발 비용 증가. |
기능에 따라 code가 분리되었기 때문에 유지 보수가 쉬움. | |
확장성이 뛰어남. |
<%= ((com.ssafy.model.MemberDto) request.getAttribute("userinfo")).getZipDto().getAddress() %>
${userinfo.zipDto.address}
category | identifier | Type | description |
---|---|---|---|
JSP | pageContext | Java Bean | 현재 페이지의 프로세싱과 상응하는 PAgeContext instance. |
범위 (scope) | pageScope | Map | page scope에 저장된 객체 추출. |
requestScope | Map | request scope에 저장된 객체 추출. | |
sessionScope | Map | session scope에 저장된 객체 추출. | |
applicationScope | Map | application scope에 저장된 객체 추출. | |
요청 매개변수 | param | Map | ServletRequest.getParameter(String)을 통해 요청 정보 추출. |
paramValues | Map | ServletRequest.getParameterValues(String)을 통해 정보 추출. | |
요청 헤더 | header | Map | HttpServletRequest.getHead(String)을 통해 헤더 정보 추출. |
headerValues | Map | HttpServletRequest.getHeaders(String)을 통해 헤더 정보 추출. | |
쿠키 | cookie | Map | HttpServletRequest.getCookies()를 통해 쿠키 정보 추출. |
초기화 매개변수 | initParam | Map | ServletContext.getInitParameter(String)을 통해 초기화 파라미터 추출. |
${expr}
description | |
---|---|
산술 | +, -, *, /, % |
관계형 | ==, !=, <, >, <=, >= |
3항 연산 | 조건 ? 값1 : 값2 |
논리 | &&, |
타당성 검사 | empty |
library | prefix | function | URI |
---|---|---|---|
core | c | 변수 지원, 흐름제어, URL 처리 | http://java.sum.com/jsp/jstl/core |
XML | x | XML 코어, 흐름제어, XML변환 | http://java.sum.com/jsp/jstl/xml |
국제화 | fmt | 지역, 메시지 형식, 숫자 및 날짜 형식. | http://java.sum.com/jsp/jstl/fmt |
database | sql | SQL | http://java.sum.com/jsp/jstl/sql |
함수 | Collection, String 처리 | http://java.sum.com/jsp/jstl/functions |
function | tag | description |
---|---|---|
변수지원 | set | jsp page에서 사용할 변수 설정. |
remove | 설정한 변수 제거 | |
흐름제어 | if | 조건에 따른 코드 실행 |
choose, when, otherwise | 다중 조건을 처리할 때 사용.(is ~ else if ~ else) | |
forEach | array나 collection의 각 항목 처리할 때 사용. | |
forTokens | 구분자로 분리된 각각의 토큰을 처리할 때 사용(StringTokenizer) | |
URL처리 | import | URL을 사용해 다른 자원의 결과 삽입 |
redirect | 지정한 경로로 redirect | |
url | URL 작성 | |
기타태크 | catch | Exception 처리에 사용 |
out | JspWriter에 내용 처리한 후 출력. |
var 속성
: 변수. 범위는 scope 속성으로 설정(default page)value 속성
: 값이나 액션의 Body content로 값 설정.<!-- 변수 할당 -->
<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"/>
var 속성
: 발생한 예외를 담을 page 생존 범위 변수 지정.<c:catch var="ex">
code
</c:catch>
<c:if test="${ex != null}">
예외 처리
</c:if>
test 속성
에 지정된 표현식을 평가하여 true인 경우 Body 컨텐츠 수행.<!-- 조건 -->
<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>
var 속성
: 반복에 대한 현재 항목을 담는 변수 지정.items 속성
: 반복할 항목들을 갖는 컬렉션 지정.varStatus 속성
: 지정한 변수를 통해 현재 반복의 상태 확인 가능.<c:forEach var = "item" items="${collection_name}" varStatus="step">
${step.count}. ${item.name}<br/>
</c:forEach>