HTML, XML 에 Java code 를 포함해서 View 에서 동적으로 값을 보여주게 하는
Server side Rendering
기술이다.
태그 중심으로 작성되며, View 에서 Java 문법으로 유연하게 화면을 구성할 수 있다.
import
예시<%@ page import = "com.model2.mvc.service.product.vo.*" %>
objectScope.getAttribute()
예시<% ProductVO vo = (ProductVO)request.getAttribute("vo"); %>
표현식
예시td align="left"><%= vo.getPrice() %></td>
java declaration
예시<%!
// 이 부분에 Java 코드를 선언할 수 있습니다.
int number1 = 10;
int number2 = 20;
// 메서드도 선언할 수 있습니다.
public int addNumbers(int a, int b) {
return a + b;
}
%>
<br/>
자바에서 할 수 있는 모든 것을 할 수 있지만, 반대로 화면이 지저분해 지고, View 담당자는 알기 힘든 코드가 섞여서 문제 발생 여지가 있다.
태그 기반의 코딩 자체가 오타의 여지도 많고 간단한 if-else 문 하나 만들기도 매우 복잡하다.
<td align="left">
<%String getUpdate = "getProduct"; %>
<% if(menu.equals("search")){ %>
<a href="<%= "/"%><%=getUpdate%><%=".do?prodNo=" %><%=vo.getProdNo() %>&menu=<%=menu %>"><%= vo.getProdName() %></a>
<% } else if (menu.equals("manage")){ %>
<% getUpdate = "updateProductView";%>
<a href="<%= "/"%><%=getUpdate%><%=".do?prodNo=" %><%=vo.getProdNo() %>&menu=<%=menu %>"><%= vo.getProdName() %></a>
<% } %>
</td>
위는 상품을 클릭한 사람이 관리자면, getProduct.do 를 하고, 아니면 updateProduct.do 를 하라는 단순한 if-else 문이다..
JSP 에서 사용할 수 있는 그나마 쓸만한 태그 기반 기술이다.
<% ... > 기존의 이런 지저분한 코드를 쓰지 않고 태그 기반으로 작성되어 비교적 그나마 View 가 깔끔해진다.
<td align="left">
<c:set var="getUpdate" value="/getProduct"/>
<c:if test="${param.menu eq 'manage' }">
<c:set var="getUpdate" value="/updateProductView"/>
</c:if>
<a href="${getUpdate}.do?prodNo=${product.prodNo}&menu=${param.menu}">${product.prodName}</a>
</td>
JSP 의
단점
코드와 동일한 코드인데EL/JSTL
을 혼합해서 쓰니 훨씬 보기 깔끔해졌다.
JSP 태그 문법보다 심플한 표현식으로 Java 코드 없이 객체에 쉽게 접근 가능하다.
(getter method 의 get 도 쓰기 지겨워서 만들었다는 얘기가 있다..)
<%= session.getUserId() >
처럼 구체적인 Java 문법 없이 아래와 같이 표현 가능하다.
${session.userId}
${userId}
두번째 줄 코드 userId
처럼 앞에 Object Scope 를 명시하지 않으면 자동으로 scope 를 감지한다.
감지 순서는 아래와 같다.