7.14 JSTL()
JSTL 태그 사용 시
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
이렇게 선언 필수. ex)core태그
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}
</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,'<','<')}<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>

와일드 카드에 집어 넣는게 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