Java/JSP

7.14 JSTL()

amungstudy 2023. 7. 14. 12:34

JSTL 태그 사용 시 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

이렇게 선언 필수. ex)core태그

 

 

§Functions 태그의 종류

EL 내부에서 사용한다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ 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>jstlFn.jsp</title>

</head>

<body>

<!-- pageContext.setAttribute("test","Hello, Java Server Pages!"); -->

<c:set var="test" value="Hello, Java Server Pages!"/>

EL test : ${test} <br/>

toUpperCase : ${fn:toUpperCase(test)} <br/>

toLowerCase : ${fn:toLowerCase(test)} <br/>

<c:set var="img" value="image/png"/><!-- MIME type -->

<c:if test="${fn:startsWith(img,'image')}">

이미지 파일입니다 <br/>

</c:if>

<c:set var="text" value="read.txt"/>

<c:if test="${!fn:endsWith(text,'.txt')}">

텍스트 파일이 아닙니다. <br/>

</c:if>

<c:choose>

<c:when test="${fn:endsWith(text,'.txt')}">

텍스트 파일입니다. <br/>

</c:when>

<c:otherwise>

텍스트 파일이 아닙니다 <br/>

</c:otherwise>

</c:choose>

<hr/>

<%-- <c:set var="test" value="Hello, Java Server Pages!"/> --%>

contains: ${fn:contains(test,'java')} <br/>

containsIgnoreCase : ${fn:containsIgnoreCase(test,'java')} <br/>

<hr/>

 

indexOf : ${fn:indexOf(test,'java')} <br/>

substringBefore : ${fn:substringBefore(test,"Java")} <br/>

substringAfter : ${fn:substringAfter(test,"Java")} <br/>

<!-- substring(잘라낼문자열, 시작인덱스, 마지막인덱스(-1)) -->

substring : ${fn:substring(test,fn:indexOf(test,'Java'),11)}<br/>

<hr/>

<c:set var="strs" value="${fn:split(test,' ')}"/>

strs 배열의 길이 : ${fn:length(strs)}<br/>

<c:forEach var="str" items="${strs}">

${str} &nbsp;

</c:forEach>

<br/>

<!-- 다시 합치기 -->

${fn:join(strs,'|')}<br/>

 

<hr/>

<div style='border:1px solid red'>안녕하세요!</div>

<c:set var="tag" value="<div style='border:1px solid red'>안녕하세요!</div>"/>

${tag}<hr/><br/>

escapeXml : ${fn:escapeXml(tag)};<br/>

<hr/>

${fn:replace(tag,'<','&lt;')}<br/>

</body>

</html>

 

EL test : Hello, Java Server Pages!
toUpperCase : HELLO, JAVA SERVER PAGES!
toLowerCase : hello, java server pages!
이미지 파일입니다
텍스트 파일입니다.


contains: false
containsIgnoreCase : true


indexOf : -1
substringBefore : Hello,
substringAfter : Server Pages!
substring : Java


strs 배열의 길이 : 4
Hello,   Java   Server   Pages!  
Hello,|Java|Server|Pages!


안녕하세요!
안녕하세요!


escapeXml : <div style='border:1px solid red'>안녕하세요!</div>;


<div style='border:1px solid red'>안녕하세요!</div>

 


§Sql 태그의 종류
 

와일드 카드에 집어 넣는게  param

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlResult.jsp</title>

</head>

<body>

<f:requestEncoding value="UTF-8"/>

${param.id}-${param.pass}-${param.name}<br/>

${param.addr}-${param.gender}-${param.age}-${param.phone}<br/><hr/>

<f:requestEncoding> 사용시 주의점 : 파라미터 값을 하나라도 읽기 전에 먼저 지정해야함.

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlResult.jsp</title>

</head>

<body>

<f:requestEncoding value="UTF-8"/>

${param.id}-${param.pass}-${param.name}<br/>

${param.addr}-${param.gender}-${param.age}-${param.phone}<br/><hr/>

 

 

<c:catch var="e">

<!-- try영역 -->

<s:setDataSource var="conn"

driver="com.mysql.cj.jdbc.Driver"

url="jdbc:mysql://localhost:3306/digital_jsp"

user="digital"

password="12345" />

<h3>${conn}</h3>

<s:update var="result" dataSource="${conn}">

INSERT INTO test_member

VALUES(null,?,?,?,?,?,?,?);

<s:param>${param.id}</s:param>

<s:param>${param.pass}</s:param>

<s:param>${param.name}</s:param>

<s:param>${param.addr}</s:param>

<s:param>${param.phone}</s:param>

<s:param>${param.gender}</s:param>

<s:param>${param.age}</s:param>

</s:update>

<c:if test="${result > 0 }">

<h3>회원가입 완료</h3>

</c:if>

<c:if test="${result == 0 }">

<h3>회원가입 실패</h3>

</c:if>

 

<%--

<%

String s = null;

s.toString();

//throw new SQLException("그냥 확인"); -> 처리안됨

%>

--%>

</c:catch>

<c:if test="${!empty e}">

<!-- 에러가 발생한 경우 -->

<!-- get method로 접근함 -->

에러메세지 : <c:out value="${e.message}"/>

</c:if>

</body>

</html>

${e.message} <- get method로 접근해서 가져옴

 

검색 쿼리 실행해보자

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlQuery.jsp</title>

</head>

<body>

<c:catch var="e">

<!-- scope 지정 가능 -->

<s:query var="r" dataSource="java/MySqlDB" sql="SELECT * FROM test_member ORDER BY num DESC" />

<!--

r.rowCount == 검색이 된 행의 개수

r.rows == 검색된 결과의 행 정보

-->

<c:choose>

<c:when test= "${r.rowCount > 0 }">

<h2>검색된 회원정보가 존재함 -${r.rowCount}</h2>

<c:forEach var="m" items="${r.rows}">

${m.num} -

${m.id} -

${m.pass} -

${m.name} -

${m.addr} -

${m.phone} -

${m.gender} -

${m.age} -

<a href="sqlUpdate.jsp?num=${m.num}">수정</a> |

<a href="sqlDelete.jsp?num=${m.num}">삭제</a>

<br/>

</c:forEach>

</c:when>

<c:otherwise>

<h2>검색된 정보가 없습니다.</h2>

</c:otherwise>

</c:choose>

</c:catch>

<c:if test="${!empty e}">

<h3>검색 실패 = ${e}</h3>

</c:if>

</body>

</html>

 

r.rowCount == 검색이 된 행의 개수 
r.rows == 검색된 결과의 행 정보

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlUpdateSubmit.jsp</title>

</head>

<body>

<c:catch var="e">

<s:update var="result" dataSource="java/MySqlDB">

UPDATE test_member SET pass = ? WHERE num = ? AND pass = ?

<s:param>${param.rePass}</s:param>

<s:param>${param.num}</s:param>

<s:param>${param.pass}</s:param>

</s:update>

 

<c:choose>

<c:when test="${result == 1}">

<c:redirect url="sqlMember.jsp?num=${param.num}"/>

</c:when>

<c:otherwise>

<script>

alert('잘못된 정보입니다. 확인 후 요청해주세요.');

location.href='sqlQuery.jsp';

</script>

</c:otherwise>

</c:choose>

 

</c:catch>

<c:if test="${!empty e}">

<script>

alert('회원정보 수정 실패!');

history.go(-1);

</script>

</c:if>

</body>

</html>

정보 수정 쿼리

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlMember.jsp</title>

</head>

<body>

<s:query var="rs" dataSource="java/MySqlDB">

SELECT * FROM test_member WHERE num = ?

<s:param>${param.num}</s:param>

</s:query>

<c:if test="${rs.rowCount > 0}">

<c:set var="m" value="${rs.rows[0]}"/>

${m}

</c:if>

</body>

</html>

검색결과 배열이니까 ${rs.row[0]}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="s" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>sqlDelete.jsp</title>

</head>

<body>

 

<s:transaction dataSource="java/MySqlDB">

<!-- 태그 내에서 하나라도 오류나면 rollback됨. 쿼리문마다 dataSource지정할 필요 x -->

<s:update var="result">

DELETE FROM test_member WHERE num = ${param.num}

</s:update>

</s:transaction>

<c:if test="${result == 1}">

<script>

alert('정상적으로 처리가 완료되었습니다.');

location.href='sqlQuery.jsp';

</script>

</c:if>

 

</body>

</html>

s:transaction 태그 내에서 하나라도 오류나면 rollback됨. 쿼리문마다 dataSource지정할 필요 x