[First Shop] JSP 와 EL / JSTL

Jason·2023년 9월 26일
0

FirstShop

목록 보기
2/5

JSP (Java Server Page)

HTML, XML 에 Java code 를 포함해서 View 에서 동적으로 값을 보여주게 하는
Server side Rendering 기술이다.

장점

태그 중심으로 작성되며, View 에서 Java 문법으로 유연하게 화면을 구성할 수 있다.

  • page 설정 <%@ page ..> : import 예시
<%@ page import = "com.model2.mvc.service.product.vo.*"  %>    
  • Scriptlet(Java code) <% ... > : 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 문이다..

지금 봐도 어떻게 저걸 만들었을까 생각이 든다..

View 는 최대한 순수한 View 로 두는게 가장 좋은 것 같다.



JSTL (Java Server Page Standard Tag Library)

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 을 혼합해서 쓰니 훨씬 보기 깔끔해졌다.



EL (Expression Language)

JSP 태그 문법보다 심플한 표현식으로 Java 코드 없이 객체에 쉽게 접근 가능하다.
(getter method 의 get 도 쓰기 지겨워서 만들었다는 얘기가 있다..)

<%= session.getUserId() > 처럼 구체적인 Java 문법 없이 아래와 같이 표현 가능하다.

${session.userId}
${userId}

두번째 줄 코드 userId 처럼 앞에 Object Scope 를 명시하지 않으면 자동으로 scope 를 감지한다.
감지 순서는 아래와 같다.

  1. pageScope
  2. requestScope
  3. sessionScope
  4. applicationScope



profile
어제보다 매일 1% 성장하고 있습니다.

0개의 댓글