
1. 디렉티브
2. 표현 언어
3. 기본 객체
4. 표준 액션 태그
5. 커스텀 태그와 표준 태그 라이브러리(JSTL)
JSP 페이지에 대한 설정 정보를 지정할 때 사용
<%@ 디렉티브이름 속성1="값1" 속성2="값2" ... %>
page디렉티브는 JSP페이지에 대한 정보를 입력하기 위해서 사용된다. page 디렉티브를 사용하면 JSP 페이지가 어떤 문서를 생성하는지, 어떤 자바 클래스를 사용하는지, 세션(session)에 참여하는지, 출력버퍼의 존재 여부와 같이 JSP페이지를 실행하는데 필요한 정보를 입력할 수 있다.
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PageImport</title>
</head>
<body>
<%
Calendar cal = Calendar.getInstance();
%>
오늘은
<%=cal.get(Calendar.YEAR) %>년
<%=cal.get(Calendar.MONTH) + 1 %>월
<%=cal.get(Calendar.DATE) %>일
입니다.
</body>
</html>
✅ <%@page import="java.util.Calendar"%> : Calendar 클래스를 import한다. (java.util.*을 사용하면 해당 패키지에 속해 있는 모든 타입을 import 할 수 있다.)
✅ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
contentType 속성 : JSP가 생성할 문서의 MIME타입과 캐릭터 인코딩 지정pageEncoding 속성 : JSP 페이지 소스 코드의 캐릭터 인코딩 지정
위 렌더링 화면에서
f12를 눌러 개발자 환경으로 들어가서 소스코드를 확인해보자

소스코드 위쪽에 살짝 공백이 있는 것을 확인할 수 있다. 이 공백을 제거하기 위해
trimDirectiveWhitespaces속성을 이용한다.
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PageImport</title>
</head>
<body>
<%
Calendar cal = Calendar.getInstance();
%>
오늘은
<%=cal.get(Calendar.YEAR) %>년
<%=cal.get(Calendar.MONTH) + 1 %>월
<%=cal.get(Calendar.DATE) %>일
입니다.
</body>
</html>
✅ <%@ page trimDirectiveWhitespaces="true" %> 추가

공백이 사라진 것을 확인할 수 있다!
JSP에서 문서의 내용을 동적으로 생성하기 위해 사용되는 것
<%
자바코드1;
자바코드2;
...
%>
<%= 값 %>
<%!
public 리턴타입 메서드이름(파라미터){
자바코드1;
자바코드2;
...
return 값;
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex</title>
</head>
<body>
<%!
public int add(int a, int b){
return a+b;
}
%>
<%
int a = 1;
int b = 2;
%>
<%= add(a,b) %>
<%= add(10, 20) %>
</body>
</html>

웹 브라우저의 요청과 관련이 있다. 웹 브라우저에 웹 사이트의 주소를 입력하면, 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데, 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request</title>
</head>
<body>
<ul>
<li>클라이언트 IP : <%=request.getRemoteAddr() %></li>
<li>요청정보 길이 : <%=request.getContentLength()%></li>
<li>요청정보 인코딩: <%=request.getCharacterEncoding() %></li>
<li>요청정보 컨텐츠타입 : <%=request.getContentType() %></li>
<li>요청정보 프로토콜 : <%= request.getProtocol() %></li>
<li>요청정보 전송방식 : <%= request.getMethod() %></li>
<li>요청 URI : <%=request.getRequestURI() %></li>
<li>컨텍스트경로 : <%=request.getContextPath() %></li>
<li>서버이름 : <%=request.getServerName() %></li>
<li>서버포트 : <%=request.getServerPort() %></li>
</ul>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterMain</title>
</head>
<body>
<%
String name = "홍길동";
int age = 20;
%>
<form action="RequestParameterResult.jsp" method="post">
이름 : <input type="text" name="name" value="<%=name %>"> <br />
나이 : <input type="number" name="age" value="<%=age %>" > <br />
취미 :
<input type="checkbox" name="hobby" value="game"> 게임
<input type="checkbox" name="hobby" value="movie"> 영화
<input type="checkbox" name="hobby" value="travel"> 여행<br />
<button type="submit">전송</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterResult</title>
</head>
<body>
<%
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String[] hobby = request.getParameterValues("hobby");
%>
<%=name %>님의 나이는 <%=age %>살이며 취미는
<%
for(String hobbys : hobby){
out.print(hobbys + " ");
}
%>
입니다.
</body>
</html>


request.getParameter로 한글이 깨질 경우, 그 전에
request.setCharacterEncoding("utf-8"); 를 먼저 추가

<%@page import="java.util.Map"%>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterResult</title>
</head>
<body>
<%
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String[] hobby = request.getParameterValues("hobby");
%>
<%=name %>님의 나이는 <%=age %>살이며 취미는
<%
for(String hobbys : hobby){
out.print(hobbys + " ");
}
%>
입니다.
<hr>
<!-- 웹 브라우저가 전송한 파라미터의 이름 목록을 구한다 -->
<%
Enumeration<String> paramEnum = request.getParameterNames();
while(paramEnum.hasMoreElements()){
String names = (String) paramEnum.nextElement();%>
<%= names %>
<% }
%>
<hr>
<!-- 웹 브라우저가 전송한 파라미터의 맵(<파라미터 이름, 값>을 구한다 -->
<%
Map<String, String[]> paraMap = request.getParameterMap();
String[] paraValues = paraMap.get("hobby");
if(paraValues!=null){
for(int i=0; i<paraValues.length; i++){ %>
<%= paraValues[i]%>
<%}
}%>
</body>
</html>


response 기본 객체는 request와 반대의 기능을 수행한다. request가 요청 정보를 담고 있다면 response 기본 객체는 웹브라우저에 보내는 응답 정보를 담는다.
<%
int a = Integer.parseInt(request.getParameter("a"));
int b = Integer.parseInt(request.getParameter("b"));
%>
a * b = <%= a * b %>
위 처럼 복잡한 자바 코드를 표현언어로 간단하게 나타낼 수 있다!
a * b = ${param.a * param.b}
✅ 표현 언어는 ${와 }사이에 정해진 문법을 따르는 식을 입력한다.
액션 태그는 <jsp : 액션태그이름>의 형태를 띠며 액션 태그 종류에 따라서 서로 다른 속성과 값을 갖는다.
커스텀 태그는 JSP를 확장시켜주는 기능으로서, 액션 태그와 마찬가지로 태그 형태로 기능을 제공하며, 액션 태그와는 다르게 개발자가 직접 개발해주어야 한다.
일반적으로 중복되는 것을 모듈화하거나 스크립트 코드를 사용할 때 발생하는 소스 코드의 복잡함을 없애기 위해 커스텀 태그를 사용한다.
커스텀 태그 중에서 자주 사용하는 것들을 별도로 표준화한 태그 라이브러리가 있는데 이것이 바로 JSTL(JavaServer Pages Standard Tag Library)이다.
JSTL은 if-else 조건문, for구문과 같은 반복 처리를 커스텀 태그를 이용해서 구현할 수 있도록 해준다.
✅ requst.getParameter로 받아올 때 한글깨짐 현상
✅ 앞으로 찬찬히 더 공부해보자!!