
| 장점 | 단점 |
|---|---|
| 구조가 단순하며 직관적이기 때문에 배우기 쉬움. | 출력을 위한 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>