JSP

JSP 웹 프로그래밍 - JSP 표준 태그 라이브러리 (JSTL의 개요, JSTL이 제공하는 태그의 종류와 사용법)

록's 2023. 3. 9. 12:16
728x90
반응형

1. JSTL의 개요

 

JSTL( JSP Standard Tag Library)

  • JSP 페이지에서 스크립트 요소로 인한 코드의 복잡함을 해결하기 위한 일종의 사용자 정의 태그의 표준
  • JSP 페이지의 로직을 담당하는 부분인 if, for, while, 데이터베이스 처리 등과 관련 된 코드를 JSTL로 대치하여 코드를 깔끔하게 하고 가독성을 좋게 하는 것
  • JSP 내장 객체에 쉽게 접근할 수 있을 뿐 아니라 파라미터, 헤더, 쿠키 등의 복잡한 코드를 사용하지 않고 쉽게 직관적으로 사용
  • 객체 간의 비교를 equals( ) 메소드로 처리하는 대신 ==와 같은 간단한 연산자로 구현이 가능

 

 

 

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

 

JSTL이 제공하는 태그의 종류

 

 

 

 

JSTL이 제공하는 태그 사용

  • JSP 페이지에 <%@ taglib…%> 디렉티브 태그를 사용

  • prefix 속성은 uri 속성에 명시된 값 대신 해당 페이지에서 prefix 속성 값으로 명시된 값을 사용하겠다는 것을 의미
  • JSTL 라이브러리인 jstl.jar 파일이 필요

 

 

 

 

 

Core 태그

  • Core 태그의 종류

 

 

 

 

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

 

// 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>

 

 

 

 

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

// core02.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="core02_process.jsp" method="post">
		<p>숫자 : <input type="text" name="number">
		<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>JSTL</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>

 

 

 

 

 

구구단 출력하기

// 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>

 

 

 

 

Sql 태그

  • Sql 태그의 종류

 

 

 

 

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

// 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', '1234', '홍길동');

select * from member;

 

// sql02.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://192.168.111.40: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>

 

 

 

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

// sql02.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 method="post" action="sql02_process.jsp">
		<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://192.168.111.40: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>

 

 

 

 

 

 

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

// 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 method="post" action="sql03_process.jsp">
		<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://192.168.111.40: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 쿼리문 실행하기

// 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 method="post" action="sql04_process.jsp">
		<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");
		String name = request.getParameter("name");
	%>
	<sql:setDataSource var="dataSource"
		url="jdbc:mysql://192.168.111.40: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>

 

 

 

 

 

 

 

Functions 태그

  • Functions 태그의 종류

 

 

 

 

 

 

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

// finctions01.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 Server Pages!", "java")}
	<p>hello, java server page! => ${fn:containsIgnoreCase("hello, java server pages!", "java")}
</body>
</html>

 

 

 

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

// function02.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>JSTL</title>
</head>
<body>
	<c:set var="texts" value="${fn:split('Hello, Java Server Page!',' ')}" />
	<c:forEach var="i" begin="0" end="${fn:length(texts)-1}">
		<p>text[${i}] =${texts[i]}
	</c:forEach>
	<p><c:out value="${fn:join(texts, '-')}" />
</body>
</html>

 

728x90
반응형