티스토리 뷰

CHAPTER 17.JSP 표준 태그 라이브러리 회원 가입, 수정, 탈퇴하기

 

 

 

 

1. JSTL의 개요

JSTL은 JSP페이지에서 표현 방식 중 하나로 스크립트 요소(<%%>)로 인한 코드의 복잡함을 해결하기 위한 일종의 사용자 정의 태그의 표준이다.

if, for, while, 데이터베이스 처리 등과 관련된 코드를 JSTL로 대치하여 가독성을 좋게 해 준다.

주의할 점은 모든 태그가 시작 태그와 종료 태그의 쌍으로 이루어져야 한다.

 

 

 

* JSTL과 같은 사용자 정의 태그(커스텀 태그=내 마음대로 만듬) 사용의 이점

 - 한번 작성한 사용자 정의 태그는 언제든 필요한 곳에서 재사용이 가능하다. 또한, 다른 사용자에게 배포하여 재사용할 수 도 있다.

 -  사용자 정의 태그는 프로그램의 가독성을 향상하므로 수백 줄인 프로그램의 이해를 높이는데 중요하다.

 -  사용자 정의 태그는 JSP의 자바 문법에 의존적인 스크립트 요소를 사용하지 않으므로 JSP 페이지의 작성이 보다 쉽다.

 -  디자인 부분인 HTML 태그와 프로그램 부분인 사용자 정의 태그에 대해 각각 디자이너와 프로그래머의 역할로 분담할 수 있으므로 효율적인 작업이 가능하다.

 

 

 

 

 

 

 

2. JSTL이 제공하는 태그의 종류와 사용법

JSTL이 제공하는 태그는 기능에 따라 분류할 수 있다. 분류에 따라 다양한 하위태그도 존재한다.

JSTL에서 제공하는 태그를 사용할 시 <%@ taglib ... %>디렉티브 태그를 사용해야한다.

 

<%@ taglib prefix="태그 식별이름" uri="태그 지원 URL" %>

 

여기서 prefix는 uri 속성에 명시된 값 대신 해당 페이지에서 prefix 속성 값으로 명시된 값을 사용하겠다는 것을 의미한다.

 

 

JSTL이 제공하는 태그의 종류

태그 설명
Core 태그 변수 선언, 삭제 등 변수와 관련된 작업 및 if문, for문과 같은 제어 기능, URL 처리로 페이지 이동 기능을 제공한다.
Formatting 태그 문자열이나 컬렉션을 처리하는 함수 태그로 숫자, 날짜, 시간 등을 형식화하는 기능, 국제화, 다국어 지원 기능을 제공한다.
Sql 태그 데이터베이스와 상호 작용하기 위해 사용하느 태그로 데이터베이스의 데이터 삽입, 수정, 삭제, 조회 기능을 제공한다.
Functions 태그 문자열을 처리하는 함수를 제공한다.

 

 

 

 

 

 

2-1. Core 태그

Core 태그 종류

태그 설명
<c:out> 출력하는데 사용한다.
<c:set> 사용할 변수를 설정하는데 사용한다.
<c:remove> 설정한 변수를 제거하는데 사용한다.
<c:catch> 예외 처리에 사용한다.
<c:if> 조건문을 처리하는데 사용한다.
<c:choose> 다중 조건문을 처리하는데 사용한다.
<c:when> <choose>의 서브 태그로 조건문이 참일 때 수행한다. (if)
<c:otherwise> <choose>의 서브 태그로 조건문이 거짓일 때 수행한다. (else)
<c:import> URL을 사용하여 다른 리소스의 결과를 삽입하는데 사용한다.
<c:forEach> 반복문을 처리하는데 사용한다.
<c:forTokens> 구분자로 분리된 각각의 토큰을 처리하는데 사용한다.
<c:param> URL 관련 태그의 파라미터를 설정하는데 사용한다.
<c:redirect> 설정한 경로로 이동하는데 사용한다.
<c:url> URL을 재작성하는데 사용한다.

 

 

* JSTL Core 태그의 기능별 분류

 - 표현 언어 지원 기능 : <c:catch>, <c:out>, <c:remove>, <c:set>

 - 흐름 제어 기능 : <c:choose>, <c:when>, <c:otherwise>, <c:forEach>, <c:forTokens>, <c:if>

 - URL 관리 기능 : <c:import>, <c:param>, <c:redirect>, <c:url>

 

 

 

 

 

웹 브라우저 헤더를 변수에 설정하고 설정한 변수 삭제하기

예제 17-1

 

core01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<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>

 

 

 

 

 

 

 

 

숫자가 짝수 또는 홀수인지 판단하기

예제 17-2

 

core02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
	<form action=sql02_process.jsp method="post">
		<p>아이디 : <input type="text" name="id">
		<p>비밀번호 : <input type="password" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>

 

 

core02_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String number = request.getParameter("number");
	%>
	<c:set var="number" value="<%=number %>" />
	<c:choose>
		<c:when test="${number%2==0 }">
			<c:out value="${number }"/>은 짝수입니다.
		</c:when>
		<c:when test="${number%2==1 }">
			<c:out value="${number }"/>은 홀수입니다.
		</c:when>
		<c:otherwise>
			숫자가 아닙니다.
		</c:otherwise>	
	</c:choose>		
</body>
</html>

 

 

 

 

 

 

구구단 출력하기

예제 17-3

 

core03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<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 태그는 이전에 배웠던 PrepareStatement 로 대체할 수 있다.

 

Sql 태그 종류

태그 설명
<sql:setDataSource> DataSource를 설정하는데 사용한다.
<sql:query> 조회 쿼리문을 실행하는데 사용한다.
<sql:update> 삽입, 수정, 삭제 쿼리문을 실행하는데 사용한다.
<sql:dataParam> 쿼리문에 날짜 형식의 파라미터를 설정하는데 사용한다.
<sql:param> 쿼리문에 문자열 형식의 파라미터를 설정하는데 사용한다.
<sql:transaction> 트랜잭션을 구현하는데 사용한다.

 

 

 

 

 

<sql:query> 태그로 select 쿼리문 실행하기

예제 17-4

 

member.sql

use jspbookdb;
create table if not exists member(
	id varchar(20) not null,
    passwd varchar(20),
    name varchar(30),
    primary key (id)
);

delete from member;

insert into member values('1','1234','홍길순');
insert into member values('2','1235','홍길동');
select * from member;

 

 

sql01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>      
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<sql:setDataSource var="dataSource" url="jdbc:mysql://localhost:3306/jspbookdb" driver="com.mysql.jdbc.Driver" user="root" password="1234"/>
	
	<sql:query var="resultSet" dataSource="${dataSource}">
		select*from member
	</sql:query>
	
	<table border="1">
		<tr>
			<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>
					<c:if test="${column !=null }">
						<c:out value="${column }" />
					</c:if>
					<c:if test="${column ==null}">
						&nbsp;
					</c:if>
				</td>
				</c:forEach>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

 

 

workbench에서 데이터베이스 확인

 

테이블 추가

 

 

 

 

 

 

<sql:update> 태그로 insert 쿼리문 실행하기

예제 17-5

 

sql02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
	<form action=sql02_process.jsp method="post">
		<p>아이디 : <input type="text" name="id">
		<p>비밀번호 : <input type="password" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>

 

sql02_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>        
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<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="1234"/>
	
	<sql:update dataSource="${dataSource }" var="resultSet">insert into member(id,name,passwd) values(?,?,?)
		<sql:param value="<%=id %>"/>
		<sql:param value="<%=name %>"/>
		<sql:param value="<%=passwd %>"/>
	</sql:update>
	<c:import var="url" url="sql01.jsp"/>
	${url}
</body>
</html>

 

 

insert할 값을 폼에 입력한다.

 

입력한 후 테이블에 추가되어 출력된다.

 

 

 

 

 

 

 

<sql:update> 태그로 update 쿼리문 실행하기

예제 17-6

 

sql03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<form action=sql03_process.jsp method="post">
		<p>아이디 : <input type="text" name="id">
		<p>비밀번호 : <input type="password" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>

 

sql03_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>     
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<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="1234"/>
	
	<sql:update dataSource="${dataSource}" var="resultSet">
		update member set name=? where id=? and passwd=?
		<sql:param value="<%=name %>"/>
		<sql:param value="<%=id %>"/>
		<sql:param value="<%=passwd %>"/>
	</sql:update>
	<c:import var="url" url="sql01.jsp" />
	${url}
</body>
</html>

 

 

업데이트할 값 입력한다.

 

 

값을 변경하여 입력하니 홍길순의 이름이 관리자로 바뀐것을 확인할 수 있다.

 

 

 

 

 

<sql:update> 태그로 delete 쿼리문 실행하기

예제 17-7

 

sql04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<form action=sql04_process.jsp method="post">
		<p>아이디 : <input type="text" name="id">
		<p>비밀번호 : <input type="password" name="passwd">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>

 

 

sql04_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>      
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
	
		String id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
	%>
	<sql:setDataSource var="dataSource" url="jdbc:mysql://localhost:3306/jspbookdb" driver="com.mysql.jdbc.Driver" user="root" password="1234"/>
	
	<sql:update dataSource="${dataSource}" var="resultSet">
		delete from member where id=? and passwd=?
		<sql:param value="<%=id %>"/>
		<sql:param value="<%=passwd %>"/>
	</sql:update>
	<c:import var="url" url="sql01.jsp" />
	${url}
</body>
</html>

 

 

삭제할 아이디와 비밀번호를 입력한다.

입력 후 출력된 테이블에서 해당 아이디의 값이 삭제된 것을 볼 수 있다.

 

 

 

 

 

 

2-3. Functions 태그

Functions 태그의 종류

태그 설명
contains() 검색 대상 문자열의 포함 여부를 확인한다.
containsIgnoreCase() 대 소문자에 관계 없이 검색 대상 문자열의 포함 여부를 호가인한다.
startsWith() 특정 문자열로 시작하는지 여부를 확인한다.
endsWith() 특정 문자열로 끝나는지 여부를 확인한다.
excapeXml() 문자열에 포함된 특수문자를 특정  코드로 변환한다.
indexOf() 검색 대상 문자열의 첫 위치 값을 반환한다.
split() 문자열을 설정한 구분자로 분리하여 배열 형태로 반환한다.
join() 배열 형태의 문자열을 설정한 구분자로 연결하여 반환한다.
lenght() 문자열의 길이를 반환한다.
substring() 특정 위치의 문자열을 반환한다.
substringAfter() 설정한 문자열 이후의 부분에 있는 문자열을 반환한다.
substrginBefore() 설정한 문자열 이전의 부분에 있는 문자열을 반환한다.
replcae() 검색 대상 문자열을 설정한 문자열로 변경하여 반환한다.
toLowerCase() 모두 소문자로 변환한다.
toUpperCase() 모두 대문자로 변환한다.
trim() 문자열 앞뒤의 공백을 제거하여 반환한다.

 

 

 

 

<fn:contains>와 <fn:containsIgnoreCase> 태그로 문자열 검색하기

예제 17-8

 

functions01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<p>java 문자열 검색
	<p>Hello, Java Server Pages! => ${fn:contains("Hello, Java Srver Pages!", "java")}
    <p>Hello, Java Server Pages! => ${fn:containsIgnoreCase("Hello, Java Srver Pages!", "java")}
</body>
</html>

 

 

자바로 변경

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<p>java 문자열 검색
	<br>
	<%
		String a="Hello, Java Server Pages!";
		boolean contains=a.toLowerCase().contains("java");
		out.println("Hello, Java Server Pages! => " + contains);
	
	%>
</body>
</html>

 

결과

 

 

 

 

 

<fn:split>와 <fn:join> 태그로 문자열 분리하고 연결하기

예제 17-9

 

functions02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>    
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:set var"texts" value="$fn:split('Hello, Java Server Pages!',' ')}"/>
    
    <c:forEach var="i" begin="0" end="${fn:length(texts)}"/>
    	<p>text[${i}]=${text[i]}
    </c:forEach>
    <p><c:out value="${fn:join(texts,'-')}"/>
	
</body>
</html>

 

 

 

자바로 변경

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		String text = "Hello, Java Server Pages!";
		String textx[] = text.split(" ");
		String a="";
		String b="";
		
		for(int i=0; i<textx.length; i++){
			a=textx[i];
			out.println("text["+i+"] : "+a+"<br>");
		}
		%>
		<br>
		<%
		for (String word : textx){
			b += word;
			
		}
		
		System.out.println(b);
		
		String sum = String.join("-",textx);
		out.println(sum);
		
		/* for(int i=0; i<textx.length; i++){
			a = a+textx[i].toString();
		}  문자열 다 더해줌*/
		/* System.out.println(a); */
	%>
</body>
</html>

 

결과

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday