재밌고 어려운 IT를 이해해보자~!

JSTL, Custom tag 본문

코리아IT핀테크과정

JSTL, Custom tag

언제나즐거운IT 2024. 1. 17. 18:46
JSP 커스텀 태그란? 
개발자가 개발한 액션 태그
JSP에서 커스텀태그란 개발자가 특정 기능을 수행하는 액션태그를 직접 만든것
JSP에는 액션태그 라는것이 있는데, 액션태그는 JSP의 스크립트릿 안에서 자주 반복되는 Java 코드를 심플한 태그로 정의하여 둔 것을 말한다.

대표적인 액션태그에는 <jsp:useBean>, <jsp:include>, <jsp:forward>가 있습니다. 이러한 액션태그는 상당수의 Java 코드를 줄여주고 마크업 형태를 띄고 있기 때문에 JSP 페이지 내에서의 다른 HTML 마크업과 친화적이고 가독성을 좋게 해준다.

추가적으로 JSTL(JSP Standard Tag Library)이라는 것이 있는데, 이는 세계적으로 많은 개발자들이 중복으로 개발하는 커스텀태그들이 있다는것을 알게되어 공통적으로 자주 사용되는 커스텀태그들을 묶어 라이브러리 형태로 만들어 배포하는 태그 라이브러리

커스텀 태그의 장점-
여러페이지에서 출력되는내용을  커스텀 태그로 관리하면
결합도도 낮출수있고 -> 변경사항이 발생했을때 여기만 바꾸면됨 
응집도 높일수있음 ->기능별로 페이지 구성할수있음
유지보수가 용이함!
커스텀태그는 jsp를기반으로 만들어져서 값을 받아올 수 있다.
커스텀 태그 attribute.tag
상단의 attribute지시어로 외부에서 설장한 값에 대해서 이런 값을 주겠다고 EL식을 사용해서 설정할 수있다.
태그를 호출할때 attribute 값을 줄 수 있다.
EL, 커스텀 태그, SJTL을 사용하면 VIEW인 jsp 에 자바 언어가 하나도 없을 수 있다!
누군가 만든건 uri로 사용하고 prefix(별칭)도 C로 정해져있다.

 

커스텀태그 사용예제~

 

attributeTag.tag

<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ attribute name="border" %>
<%@ attribute name="bgColor" %>

<h1><jsp:doBody /></h1>
<h2>커스텀 태그의 외부에서 설정한 태그바디값을 가져오는 태그</h2>
<table border="${border}" bgColor="${bgColor}">
	<tr>
		<td>번호</td><td>이름</td>
	</tr>
	<tr>
		<td>101</td><td>작은 티모</td>
	</tr>
</table>

         

printMsg.tag

<%@ tag language="java" pageEncoding="UTF-8"%>

커스텀 태그에서 출력하는 메세지입니다! :D
	여러 페이지에서 출력되는 내용을
	커스텀 태그로 관리하면,
	결합도도 낮출수있고, -> 변경사항이 발생했을때 여기만 바꾸면됨
	응집도도 높일수있음 -> 기능별로 페이지를 구성할수있음
	유지보수가 용이해짐!

 

---------------------------------------------------------------------------------------------------

게시글과 유저가 나오는 메인화면에 적용

 

memberInfoBox.tag

<%@ tag language="java" pageEncoding="UTF-8"%>

<%
	String member=(String)session.getAttribute("member");
	if(member != null){ // 로그인 상태
%>
		<a href="logout.do">로그아웃</a> | <a href="testPage.do">마이페이지</a>
<%
	}
	else{ // 로그아웃 상태
%>
		<a href="loginPage.do">로그인</a> | <a href="joinPage.do">회원가입</a>
<%
	}
%>

 

memberInfoBox2

<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ attribute name="member" %>

<%
	if(member != null && !member.equals("")){ // 로그인 상태
%>
		<a href="logout.do">로그아웃</a> | <a href="testPage.do">마이페이지</a>
<%
	}
	else{ // 로그아웃 상태
%>
		<a href="loginPage.do">로그인</a> | <a href="joinPage.do">회원가입</a>
<%
	}
%>

 

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="model.dto.*,java.util.ArrayList" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="kim" %> //설정한 태그들을 kim으로 가져온다!
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> //각종 함수들 쓸수있음!
//자바 말고 스크립트 언어로~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지</title>
<style type="text/css">
	.info {
		width: 250px;
	}
</style>
</head>
<body>

<kim:memberInfoBox2 member='${member}' /> //kim의 memberInfoBox2 불러오기!!!

<hr>

<c:set var="msg" value="안녕하세요! :D" />
${msg}

<hr>

<ul>
	<c:if test="${fn:length(rdatas) <= 0}">
		출력할 댓글이 없습니다!
	</c:if>
	<c:if test="${fn:length(rdatas) > 0}">
		<c:forEach var="data" items="${rdatas}">
			<li><a href="replySelectOne.do?rid=${data.rid}">${data.rid}번 댓글 ${data.writer}님이 작성</a></li>
		</c:forEach>
	</c:if>
</ul>

<hr>

		<form action="replyInsert.do" method="POST">
			<input type="hidden" name="writer" value="${member}" >
			<c:if test="${member!=null}">
				<input type="text" name="content" required placeholder="댓글 작성"> <input type="submit" value="댓글추가">
			</c:if>
			<c:if test="${member==null}"> <!-- 로그아웃 상태라면 -->
				<input class="info" type="text" name="content" disabled value="댓글을 작성하시려면 로그인하세요."> <br>
			</c:if>		
		</form>

<hr>

<ul>
	<c:if test="${fn:length(mdatas) <= 0}">
		출력할 회원이 없습니다!
	</c:if>
	<c:if test="${fn:length(mdatas) > 0}">
		<c:forEach var="data" items="${mdatas}">
			<li>${data.name}님</li>
		</c:forEach>
	</c:if>
</ul>

</body>
</html>

 

누군가 만든건 uri로 사용하고 prefix(별칭)도 C로 정해져있다.
자바의기능을 뷰에서사용할수있게 기능들이 저장되어있다
mgs를 변수로 만들면 EL로 ${smg}를 가져올 수 있다.
자바없이 변수를 선언해서 사용가능 ..>!!!!
for 문을 JSTL for each로 사용해보자.
<c:forEach var="data" items="${rdatas}"></c:forEach>
이렇게 바뀐거다 !! data.getrid() ---> ${data.rid}
 c태그에 else는 없으니 if를 계속 사용하자
unction practice도있다..? 
${fn:length(radaas)
rdatas를 선언을 안해도 쓸수있는 이유는 컨트롤러에서 주고있기 때문에 다음페이지에서 EL로 사용이 가능하다
request.setAttribute로 주는중 ...fo는사용하지말기...

 

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:if test="${not empty member}">
   <a href="logout.do">로그아웃</a> | <a href="testPage.do">마이페이지</a>
</c:if>
<c:if test="${empty member}">
   <a href="loginPage.do">로그인</a> | <a href="joinPage.do">회원가입</a>
</c:if>
.tag 파일도 궁극적으로는 위와같이 JSTL 을 사용하셔서 JAVA를 없애는게 좋다..!

 

하핳 재밌다 ~ 배움엔 끝이없다~~~

 

 

 

*참조

https://dololak.tistory.com/749

'코리아IT핀테크과정' 카테고리의 다른 글

HandlerMapper, Factory pattern  (2) 2024.01.19
서블릿 Filter, Listner, XML  (0) 2024.01.18
Jquery practice  (0) 2024.01.16
비동기(asynchronous) 처리 , ajax, jquery  (0) 2024.01.15
API 조사 [TEAM PROJECT]  (2) 2024.01.14
Comments