본문 바로가기

JSP, Servlet, MySQL/JSP - webmarket

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

728x90
반응형

 

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 }">
						&nbsp;
					</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>

 

 

 

728x90
반응형