01 JSTL 의 개요
JSTL(JSP Standard Tag Libray)은 JSP 페이지에서 스크립트 요소로 인한 코드의 복잡함을 해결하기 위한 일종의 사용자 정의 태그의 표준이다. JSP 페이지에 JSP의 스크립트 요소와 HTML 코드를 혼용하면 편리하게 개발할 수 있으나 코드의 복잡성이 증가되는 것이 문제이다. 따라서 JSP 페이지의 로직을 담당하는 부분인 if, for, while 데이터베이스 처리 등과 관련된 코드를 JSTL 로 대치하여 코드를 깔끔하게 하고 가독성을 좋게 하는 것이다. 이렇게 함으로써 JSP 내장 객체에 쉽게 접근할 수 있을 뿐 아니라 파라미터, 헤더, 쿠키 등의 복잡한 코드를 사용하지 않고 쉽게 직관적으로 사용할 수 있다. 또한 객체 간의 비교를 equals() 메소드로 처리하는 대신 == 와 같ㅌ은 간단한 연산자로 구현이 가능하다.
JSTL 작성 시 주의할 점은 모든 태그가 시작 태그와 종료 태그의 쌍으로 이루어져야 한다는 것이다.
NOTE_ JSTL 과 같은 사용자 정의 태그 (크스텀 태그) 사용의 이점
-한 번 작성한 사용자 정의 태그는 언제든 필요한 곳에서 재사용이 가능하며 다른 사용자에게 배포하여 재사용할 수도 있다.
- 사용자 정의 태그는 프로그램의 가독성을 향상하므로 수백 줄인 프로그램의 이해를 높이는 데 중요하다.
- 사용자 정의 태그는 JSP 의 자바 문법에 의존적인 스크립트 요소를 사용하지 않으므로 JSP 페이지의 작성이 보다 쉽다.
- HTML 과 비슷한 태그를 이용함으로써 일반 사용자가 순수 자바 언어를 모르더라도 쉽게 이해할 수 있다.
- 디자인 부분인 HTML 태그와 프로그램 부분인 사용자 정의 태그에 대해 각각 디자이너와 프로그래머의 역할로 분담할 수 있으므로 효율적인 작업이 가능하다.
02 JSTL 이 제공하는 태그의 종류와 사용법
JSTL 이 제공하는 태그는 기능에 따라 다음과 같이 분류할 수 있으며 각각 다양한 하위 태그가 있다. 이 장에서는 회원가입, 수정, 탈퇴 페이지를 작성하는 데 필요한 태그를 중심으로 사용법을 알아보겠다.
JSTL 이 제공하는 태그의 종류
태그 | 설명 |
Core 태그 | 변수 선언, 삭제 등 변수와 관련된 작업 및 if 문 , for 문과 같은 제어 기능 ,URL 처리로 페이지 이동기능을 제공한다. |
Formatting 태그 | 문자열이나 컬렉션을 처리하는 함수 태그로 숫자, 날짜, 시간 등을 형식화하는 기능/ 국제화, 다국어 지원 기능을 제공한다. (앞에 다국어 처리 참고) |
Sql 태그 | 데이터베이스와 상호 작용하기 위해 사용하는 태그로 데이터베이스의 데이터 삽입, 수정, 삭제, 조회 기능을 제공한다. |
Funcions 태그 | 문자열을 처리하는 함수를 제공한다. |
JSTL 이 제공하는 태그를 사용하려면 다음과 같이 JSP 페이지에 <%@ taglib...%> 디렉티브 태그를 사용해야 한다. 또한 JSTL 라이브러리인 jstl.jar 파일이 필요한다. taglib 디렉티브 태그의 prefix 속성은 uri 속성에 명시된 값 대신 해당 페이지에서 prefix 속성 값으로 명시된 값을 사용하겠다는 것을 의미한다.
<%@ taglib prefix="태그 식별이름" uri="태그 지원 URL "%>
2.1 Core 태그
Core 태그는 다음과 같은 태그를 제공한다.
Core 태그의 종류
태그 | 설명 |
<c:out> | 출력하는 데 사용한다. |
<c:set> | 사용할 변수를 설정하는 데 사용한다. |
<c:remove> | 설정한 변수를 제거하는 데 사용한다. |
<c:catch> | 예외 처리에 사용한다. |
<c:if> | 조건문을 처리하는 데 사용한다. |
<c:choose> | 다중 조건문을 처리하는 데 사용한다. |
<c:when> | <choose>의 서브태그로 조건문이 참일 때 수행한다. |
<c:otherwise> | <choose>의 서브 태그로 조건문이 거짓일 떄 수행한다. |
<c:import> | URL 을 사용하여 다른 리소스의 결과를 삽입하는 데 사용한다. |
<c:forEach> | 반복문을 처리하는 데 사용한다. |
<c:forTokens> | 구분자로 분리된 각각의 토큰을 처리하는 데 사용한다. |
<c:param> | URL 관련 태그의 파라미터를 설정하는 데 사용한다. |
<c:redirect> | 설정한 경로로 이동하는 데 사용한다. |
<c:url> | URL을 재작성하는 데 사용한다. |
NOTE_ JSTL Core 태그의 기능별 분류
- 표현 언어 지원 기능 : <c:catch> , <c:out>, <c:remove>, <c:set>
-흐름 제어 기능 : <c:choose>, <c:when> ,<c:forEach> , <c:otherwise> , <c:forTokens> ,<c:if>
-URL 관리 기능 : <c:import>, <c:param>, <c:redirect>, <c:url>
예제 - 웹 브라우저 헤더를 변수에 설정하고 설정한 변수 삭제하기
JSPBook/WebContent/ch17/core01.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- JSP 페이지에 JSTL 의 Core 태그를 사용하도록 taglib 디렉티브 태그를 작성한다. -->
<html>
<head>
<title>JSTL</title>
</head>
<body>
browser 변수 값 설정
<c:set var="browser" value="${header['User-Agent']}"/>
<br>
<c:out value="${browser}" />
<p>browser 변수 값 제거 후
<c:remove var="browser"/>
<c:out value="${browser}"/>
</body>
</html>
예제 - 숫자가 짝수 또는 홀수인지 판단하기
JSPBook/WebContent/ch17/core02.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- JSP 페이지에 JSTL 의 Core 태그를 사용하도록 taglib 디렉티브 태그를 작성한다. -->
<html>
<head>
<title>JSTL</title>
</head>
<body>
<form action="core02_process.jsp" method="post">
<p> Number : <input type="text" name="number">
<p><input type="submit" value="submit">
</form>
</body>
</html>
JSPBook/WebContent/ch17/core02_process.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- JSP 페이지에 JSTL 의 Core 태그를 사용하도록 taglib 디렉티브 태그를 작성한다. -->
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%
String number = request.getParameter("number");
%>
<c:set var="number" value="<%=number %>"/> <!-- number변수에 폼에서 전송된 number 값을 설정하도록 <c:set> 태그를 작성한다. -->
<c:choose><!-- 다중 조건문을 처리하도록 <c:choose>태그를 작성. -->
<c:when test="${number%2==0}">
<c:out value="${number}"/> 은 짝수입니다. <!-- <c:out> 은 출력 -->
</c:when>
<c:when test="${number%2==1 }">
<c:out value="${number }"/> 은 홀수입니다.
</c:when>
<c:otherwise>
숫자가 아닙니다.
</c:otherwise>
</c:choose>
</body>
</html>
예제 - 구구단 출력하기
JSPBook/WebContent/ch17/core03.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- JSP 페이지에 JSTL 의 Core 태그를 사용하도록 taglib 디렉티브 태그를 작성한다. -->
<html>
<head>
<title>JSTL</title>
</head>
<body>
<h3>구구단</h3>
<table>
<c:forEach var="i" begin="1" end="9">
<tr>
<c:forEach var="j" begin="1" end="9">
<td width=100>${ i }*${ j } = ${ i * j }</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
2.2 Sql 태그
Sql 태그는 다음과 같은 태그를 제공한다.
Sql 태그의 종류
태그 | 설명 |
<sql:setDataSource> | DataSource를 설정하는 데 사용한다. |
<sql:query> | 조회 쿼리문을 실행하는 데 사용한다. |
<sql:update> | 삽입 , 수정, 삭제 쿼리문을 실행하는 데 사용한다. |
<sql:dateParam> | 쿼리문에 문자열 형식의 파라미터를 설정하는 데 사용한다. |
<sql:param> | 쿼리문에 날짜 형식의 파라미터를 설정하는 데 사용한다. |
<sql:transaction> | 트랜잭션을 구현하는 데 사용한다. |
예제 - <sql:query> 태그로 SELECT 쿼리문 실행하기
JSPBook/WebContent/ch17/member.sql
drop table member;
CREATE TABLE IF NOT EXISTS member(
id VARCHAR(20) NOT NULL,
passwd VARCHAR(20),
name VARCHAR(30),
PRIMARY KEY(id)
);
INSERT INTO member VALUES('1','1234','홍길순');
INSERT INTO member VALUES('2','1235','홍길동');
select * from member;
JSPBook/WebContent/ch17/sql01.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<!-- 데이터베이스를 연결하기 위한 기본설정 -->
<sql:setDataSource var="dataSource"
url="jdbc:mysql://localhost:3306/JSPBookDB"
driver="com.mysql.jdbc.Driver" user="root" password="177100"/>
<!-- member 테이블의 모든 필드 값을 가져오기위해 작성. -->
<sql:query var="resultSet" dataSource="${dataSource }">
select * from member
</sql:query>
<table border="1">
<tr>
<!-- SELECT 문으로 가져온 필드 이름이 있을 떄까지 반복하도록 <c:forEach> 태그를 작성하고, <c:out> 태그로 필드 이름을 출력한다. -->
<c:forEach var="columnName" items="${resultSet.columnNames }">
<th width="100"><c:out value="${columnName }" /></th>
</c:forEach>
</tr>
<c:forEach var="row" items="${resultSet.rowsByIndex}">
<tr>
<c:forEach var="column" items="${row}" varStatus="i">
<td><!-- SELECT 문으로 가져온 레코드가 있을 떄까지 id, passwd, name 필드 값을 가져와 출력하도록 <c:forEach> 태그로 반복하여 실행한다. -->
<c:if test="${column != null }">
<c:out value="${column }"/>
</c:if>
<c:if test="${column == null }">
</c:if>
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
예제 - <sql:update> 태그로 INSERT 쿼리문 실행하기
JSPBook/WebContent/ch17/sql02.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<form action="sql02_process.jsp" method="post">
<p>ID : <input type="text" name="id">
<p> PASSWD : <input type="password" name="passwd">
<p> NAME : <input type="text" name="name">
<p><input type="submit" value="submit">
</form>
</body>
</html>
JSPBook/WebContent/ch17/sql02_process.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
%>
<!-- 데이터베이스를 연결하기 위한 기본설정 -->
<sql:setDataSource var="dataSource"
url="jdbc:mysql://localhost:3306/JSPBookDB"
driver="com.mysql.jdbc.Driver" user="root" password="177100"/>
<!-- member 테이블의 새로운 필드 값을 삽입하도록 insert 문을 작성-->
<sql:update var="resultSet" dataSource="${dataSource }">
INSERT INTO member(id, name, passwd) VALUES (?,?,?)
<!-- 폼페이지에서 전송된 아이디, 이름 ,비밀번호를 위 행의 물음표에 설정하도록 <sql:param> 태그를 작성-->
<sql:param value="<%=id %>"/>
<sql:param value="<%=name %>"/>
<sql:param value="<%=passwd %>"/>
</sql:update>
<c:import url="sql01.jsp"/>
${url}
</body>
</html>
예제 - <sql:update> 태그로 UPDATE 쿼리문 실행하기
JSPBook/WebContent/ch17/sql03.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<form action="sql03_process.jsp" method="post">
<p>ID : <input type="text" name="id">
<p> PASSWD : <input type="password" name="passwd">
<p> NAME : <input type="text" name="name">
<p><input type="submit" value="submit">
</form>
</body>
</html>
JSPBook/WebContent/ch17/sql03_process.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
%>
<!-- 데이터베이스를 연결하기 위한 기본설정 -->
<sql:setDataSource var="dataSource"
url="jdbc:mysql://localhost:3306/JSPBookDB"
driver="com.mysql.jdbc.Driver" user="root" password="177100"/>
<!-- member 테이블에 id, passwd 필드 값과 일치하는 값이 있으면 해당 레코드를 수정하도록
<sql:update> 태그로 UPDATE 문을 작성.-->
<sql:update var="resultSet" dataSource="${dataSource }">
UPDATE member SET name =? where id =? and passwd =?
<sql:param value="<%=name %>"/>
<sql:param value="<%=id %>"/>
<sql:param value="<%=passwd %>"/>
</sql:update>
<c:import url="sql01.jsp"/>
${url}
</body>
</html>
예제 - <sql:update> 태그로 DELETE 쿼리문 실행하기
JSPBook/WebContent/ch17/sql04.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<form action="sql04_process.jsp" method="post">
<p>ID : <input type="text" name="id">
<p> PASSWD : <input type="password" name="passwd">
<p><input type="submit" value="submit">
</form>
</body>
</html>
JSPBook/WebContent/ch17/sql04_process.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
%>
<!-- 데이터베이스를 연결하기 위한 기본설정 -->
<sql:setDataSource var="dataSource"
url="jdbc:mysql://localhost:3306/JSPBookDB"
driver="com.mysql.jdbc.Driver" user="root" password="177100"/>
<sql:update var="resultSet" dataSource="${dataSource }">
DELETE FROM member where id =? and passwd =?
<sql:param value="<%=id %>"/>
<sql:param value="<%=passwd %>"/>
</sql:update>
<c:import url="sql01.jsp"/>
${url}
</body>
</html>
'JSP, Servlet, MySQL > JSP - webmarket' 카테고리의 다른 글
JSP Servlet 웹 MVC : 게시판 만들기 (1) | 2024.03.12 |
---|---|
JSP Servlet JSP 표준 태그 라이브러리 : 회원가입, 수정, 탈퇴하기 2 (0) | 2024.03.11 |
JSP Servlet JDBC로 데이터베이스와 JSP 연동 : 상품 조회, 등록, 수정, 삭제하기 5 (0) | 2024.03.07 |
JSP Servlet JDBC로 데이터베이스와 JSP 연동 : 상품 조회, 등록, 수정, 삭제하기 4 (0) | 2024.03.07 |
JSP Servlet JDBC로 데이터베이스와 JSP 연동 : 상품 조회, 등록, 수정, 삭제하기 3 (1) | 2024.03.01 |