티스토리 뷰
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}">
</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>
결과
'코딩 > JSP' 카테고리의 다른 글
[쉽게 배우는 JSP 웹 프로그래밍 연습문제] 18장 (0) | 2023.12.27 |
---|---|
[12주 2일차] 웹 MVC : 게시판 만들기 (0) | 2023.12.26 |
[쉽게 배우는 JSP 웹 프로그래밍 연습문제] 16장 (2) | 2023.12.21 |
[11주 4일차] JDBC로 데이터베이스와 JSP 연동 (2) (1) | 2023.12.21 |
웹쇼핑몰 : 상품 관리 테이블 생성 및 상품 등록하기 (0) | 2023.12.21 |
- Total
- Today
- Yesterday