<%@ page import="" session="" errorPage="" isErrorPage="" contentType="" pageEncoding=""%>
3번 ex)
- String 타입 리턴
public void setName(String name);
public String getName();
- boolean 타입 리턴
public void setFemale(boolean female);
public boolean isFemale();
자바 Beans를 JSP 페이지에서 좀 더 쉽게 사용할 수 있도록 제공된 태그
<jsp:useBean>
, <jsp:setProperty>
, <jsp:getProperty>
, <jsp:include>
, <jsp:forward>
, <jsp:param>
-> HTML 에서는 <html:div>
와 같은 형식이 생략되어 <div>
로 활용하고 있음
1. <jsp:useBean>
<jsp:useBean id="emp"
class="com.varxyz.jv300.domain.Manager"
scope="request"
type="com.varxyz.jv300.domain.Employee"/>
[page(default) | request | session | application]
2. <jsp:setProperty>
<jsp:setProperty name="user" property="userId"/>
name : 자바 Bean 이름(<jsp:useBean>
의 id 속성과 동일)
property : Bean의 setProperty 명
활용 방식
1번 방식
<jsp:useBean id="user"
class="com.varxyz.jv300.domain.User"
scope="request"/>
<jsp:setProperty name="user" property="userId"/>
2번 방식 : 신규로 생성될 때만 몸체 처리
<jsp:useBean id="user"
class="com.varxyz.jv300.domain.User"
scope="request"/>
<jsp:setProperty name="user" property="userId"/>
</jsp:useBean>
<%
user.setUserId(request.getParameter("userId"));
%>
= ( 같은 의미 )
<jsp:setProperty name="user" property="userId" value="<%= request.getParameter("userId") %>"/>
<jsp:setProperty name="user" property="userId" param="userId"/>
<jsp:setProperty name="user" property="*"/>
3. <jsp:getProperty>
<jsp:getProperty name="user" property="userId"/>
4. <jsp:include>
현재 JSP 페이지 내에 지정된 페이지를 포함시킬 때 사용
서블릿에서는 잘 사용하지 않음
<jsp:include page="/incl/banner.jsp"/>
1. 실행 시점에 페이지에 포함
2. 수정 시 자동 업데이트 제공
3. 정적 컨텐츠, JSP, CGI 포함 가능
4. 표현식을 통해 page 속성 지정 가능
5. 매개변수 추가 가능
≒ (같으나 세부 내용이 다름)
<%@ include file="..." %>
1. 변환 시점에 페이지에 포함
2. 수정 시 자동 업데이트 불가
3. 정적 컨텐츠, JSP만 가능
4. 표현식을 통한 page 속성 지정 불가능
5. <jsp:forward>
JSP 페이지끼리 데이터를 전달할 때 사용
JSP 에서는 잘 사용하지 않음
6. <jsp:param>
forward 및 include 태그에 데이터 전달을 목적으로 사용되는 태그
단독 사용 불가, <jsp:include>
혹은 <jsp:forward>
의 자식 태그로 추가 가능
다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param
액션 태그를 사용
mypage1.jsp
<jsp:include page="header.jsp">
<jsp:param name="subtitle" value="Welcome to varxyz"/>
</jsp:include>
<img src="">${param.subtitle}
URLEncoder
를 통해 한글 인코딩 가능
webapp에서 각각 다른 폴더에 jsp 파일 생성
<%@page import="java.net.URLEncoder"%>
<%@ 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>
<div id="wrapper">
<div id="header">
<jsp:include page="/incl/banner.jsp">
<jsp:param value="mod007 : Java Beans and include 한글 테스트" name="subtitle2" />
<jsp:param value="<%=URLEncoder.encode(\"mod007 : Java Beans and include 한글 테스트\", \"UTF-8\")%>" name="subtitle" />
</jsp:include>
</div>
<div id="content-wrapper">
<h3>회원가입</h3>
<form action="add_user.do" method="post">
<p>
회원 아이디 :
<input type="text" name="userId">
</p>
<p>
비밀번호 :
<input type="password" name="passwd">
</p>
<p>
이름 :
<input type="text" name="userName">
</p>
<p>
주민번호 :
<input type="text" name="ssn" maxlength="6" placeholder="앞 6자리">
</p>
<p>
이메일1 :
<input type="text" name="email1" placeholder="아이디">
</p>
<p>
이메일2 :
<input type="text" name="email2" placeholder="메일도메인 ex) naver.com">
</p>
<p>
주소1 :
<input type="text" name="addr1" placeholder="도로명주소">
</p>
<p>
주소2 :
<input type="text" name="addr2" placeholder="세부주소">
</p>
<p>
<input type="submit" value="확인">
<input type="reset" value="리셋">
</p>
</form>
</div>
<div id="footer">
<%@ include file="/incl/footer.jsp"%>
</div>
</div>
</body>
</html>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div id="banner">
<h4><%=request.getParameter("subtitle2")%></h4>
<h4><%=URLDecoder.decode(request.getParameter("subtitle"), "UTF-8") %></h4>
</div>
Since JSP 2.0 스펙에서 EL 추가
<% %>
형태의 자바 코드 대신에 사용 가능한 표현식
크게 두가지 형태로 사용
Syntax : ${addr.city}
, ${user.userID} 등
-> JSP 액션 태그에서
<jsp:include page="/user/${user.id}/details.jsp"/>
=> /user/java/details.jsp
-> HTML 출력 시
<h3>Welcome! ${user.userName} 님 </h3>
=> <h3> Welcome 유비님 </h3>
-> 커스텀 태그 속성 값으로
<c:set var="name" value="${user.userName}"/>
${left.right}
${user.userId}
= ${user["userId"]}
${requestScope.user.userId}
// requestScope 는 EL 내장Map의 경우
${nationMap.kr}
= ${nationMap["kr"]}
${header.host}
= ${header["host"]}
-> Servlet
Map<String, String> teachers = new HashMap<String, String>();
teachers.put("java", "유비");
request.setAttribute("teachers", teachers);
-> JSP
Your Java teacher is ${teachers["java"]}
배열의 경우
${nations[0]}
= ${nations["0"]}
List의 경우
-> Servlet
List<String> hobbies = new ArrayList<String>();
hobbies.add("travel");
hobbies.add("dirve");
request.setAttribute("hobbies", hobbies);
-> JSP
Your first hobby is ${hobbies[0]}
pageScope / requestScope / sessionScope / applicationScope
param ex) ${param.userName}
paramValues ex) ```${paramValues.fruit[0}
header / headerValues ex) ${}
cookie ex) ${cookie.userName.value}
=>
if(cookie[i].getName().equals("userName")){
out.println(cookie[i].getValue());
}
initParam
pageContext ex) ${pageContext.request.method}
= ${requestScope.method}
${ 1 + 2 * 4 } = 9
${ "1" + 10 } = 11
${ null + 1 } = 1
${ 3 div(= '/') 4 } = 0.75
${ 32 % 10 } = 2
==, eq <-> !=, ne
${empty someVar}
someVar
가 빈 객체인지 여부를 검사true
: null, "", 길이 0 등 외에는 false
${x.메소드()}
=> JSP 2.1 이전 버전에서는 컴파일 에러
잘 사용하지는 않음
<%
Calculator calc = new Calculator();
request.setAttribute("calc", calc);
%>
${calc.setAdd(1, 3)}
${calc.getAdd()}
JSTL은 표준 태그 라이브러리(Standard Tag Library)로써, 커스텀 태그 중에서 많이 사용하는 것들을 모아 JSTL 규약을 만듬
JSTL을 사용함으로써, 스크립트 코드를 사용할 때보다 더 간결하고 이해하기 쉬운 JSP 코드를 작성할 수 있음
커스텀 태그는 사용자가 직접 개발한 사용자 정의 태그로써, 특정 업무나 기능을 가진 태그를 개발자가 직접 커스터마이징 할 수 있음
코어 라이브러리 : 변수 지원, 흐름 제어, URL 처리 (접두어 : c)
XML 라이브러리 : XML 제어, 변환 (접두어 : x)
국제화 라이브러리 : 지역, 메세지, 숫자, 날짜 형식 (접두어 : fmt)
데이터베이스 라이브러리 : SQL (접두어 : sql)
함수 라이브러리 : 컬렉션, String 처리 (접두어 : fn)
set 태그
<c:set var="pageTitle">회원가입</c:set>
<html>
<head><title>${pageTitle}</title></head>
...
</html>
if 태그
<c:if test="조건식"> 조건인 참일 경우 실행코드 </c:if>
<c:if test="${not empty errorMsgs}"> 에러 처리를 여기서 </c:if>
forEach 태그
<c:forEach var="message" items="${errorMsgs}">
<li>${message}</li>
</c:forEach>
<c:forEach var="num" begin="1" end="10">
${num} // 1부터 10까지 값 출력
</c:forEach>
url 태그
컨텍스트(Context) 경로를 포함한 URL을 생성
컨텍스트 경로는 웹프로그래밍을 위한 물리적인 디렉토리 구조(찾아가기 위한 경로 Context root)
value 속성은 절대 경로/상대 경로 모두 가능
<form action='<c:url value="add_user.do">' method="post">
<form action='/add_user.do' method="post">
out 태그
데이터를 출력할 때 사용되는 태그로써, 특수 문자를 변경할 수 있는 기능을 제공
escapeXml=true
값이 기본값으로 설정되어 있어, 태그가 화면에 출력됨
<c:out value="${param.email}" default="no email provided" />
<c:out ...> 출력 내용 </c:out>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Servlet엔 리스트 객체가 생성되어 있음
JSP
<c:forEach var="message" items="${errorMsgs}">
<li><c:out value="${message}" /></li>
</c:forEach>
보충
<c:if test="${not empty errorMsgs}">
<ul>
<c:forEach var="message" items="${errorMsgs}">
<li><c:out value="${message}" /></li>
</c:forEach>
<c:when test="">
<c:choose></c:choose>
<c:otherwise></c:otherwise>
</c:when>
</ul>
</c:if>