JSP에 대해 알아보자.
JSP(JavaServer Pages)는 Java 기반의 웹 개발 기술로, 동적인 웹 페이지를 생성하기 위해 사용된다. JSP는 HTML 문서 내에 Java 코드를 삽입하여 동적으로 페이지를 생성하고, 서버 측에서 실행된다. 클라이언트의 요청에 따라 JSP는 서버에서 실행되고 결과를 HTML 형태로 반환하여 클라이언트에게 전달한다.
<% %>
<%= %>
<%! %>
<%@ page %>
<%@ include %>
<%@ taglib %>
${ }
<!-- -->
)<%-- --%>
<!-- -->
JSP에서 자주 사용되는 메서드를 알아보자.
out.print()
: 출력 스트림에 내용을 출력request.getParameter()
: HTTP 요청으로부터 전달된 파라미터 값을 가져옴session.getAttribute()
: 현재 세션에서 지정된 속성의 값을 가져옴.response.sendRedirect()
: 지정된 URL로 리다이렉트request.getRequestDispatcher().forward()
: 다른 서블릿이나 JSP로 요청을 전달out
은 JSP의 내장 객체 중 하나인 JspWriter 객체를 사용한다.
request.getParameter()
는 HttpServletRequest 객체를 사용한다.
이 외에도 JSP는 자바 코드를 사용할 수 있으므로, 자바에서 사용되는 다양한 메서드와 라이브러리를 활용할 수 있다.
우선 Eclipse에서 웹 프로젝트를 하나 생성해보자.
만드는 방법을 모르다면 Dynamic Web Project 만들기 클릭 !
index.jsp
파일을 생성하고 아래의 코드를 실행해보자.
설명을 위해 중간중간 코드를 끊으며 설명하지만, 합치면 하나의 파일이 된다.
<%@ page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
앞서 설명했던 태그 중 디렉티브 태그에 해당한다. 페이지의 인코딩 방식 등을 설정하였고, import 문을 통해 자바에서 지원하는 java.util.Data
클래스를 사용할 수 있게 하였다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
String color = "grey";
%>
<body bgcolor=<%=color%>>
<!-- 컬러를 표현 식으로 넣기, 표현 식을 사용하는 이유: 변수를 받을 수 있어서-->
위와 같이 <body>
문에 bgcolor를 표현식으로 부여하여 동적으로 배경 색상을 변경할 수 있다.
만약 아래와 같이 bgcolor를 문자열로 부여하면 고정값이 되기 때문에, 표현식의 변수를 활용하여 동적으로 할당하는 것이 좋다.
<body bgcolor="green">
<!-- 컬러를 고정값으로 넣기 -->
<!-- 스크립트 릿 -->
<h1>Hello World</h1>
<!-- 함수 -->
<%!void f1() {
System.out.println("test");
// out.println() // out 객체를 몰라서 사용할 수 없음
}
위와 같이 <%! %>
을 활용하여 함수를 작성할 수 있다.
JSP 페이지에서 출력을 하려면 스크립트릿(<% %>)이나 표현식(<%= %>)을 사용한다.
그러나 선언 영역(<%! %>)에서는 out 객체를 직접 사용할 수 없다.
void f2(javax.servlet.jsp.JspWriter out) {
try {
out.println("sample");
} catch (Exception e) {
}
// out 객체를 인수로 전달받음
}
이러한 경우에는 위와 같이 JspWriter 객체를 인수로 전달하면, 선언 영역(<%! %>)에서도 out 객체를 사용할 수 있다.
int f3() {
return 1000;
}%>
<%
int num = 10;
String str = "호랑이";
out.println(num);
out.println(str);
f1();
f2(out);
%>
위의 예시처럼 스크립트 태그 안에서 Java 코드를 작성하여 변수를 선언하거나, 출력하고, 함수를 호출 할 수 있다.
<!-- 표현식 -->
<%=num%><br />
<%=str%><br />
<%=f3()%><br /> num
<%
int count = 0;
java.util.Date date1 = new java.util.Date(); // Date 객체를 불러와서 생성
Date date2 = new Date(); // import를 통해 생성 : page import="java.util.Date"
%>
<%=date1%><br />
<hr />
<!-- 테이블 -->
<table border="1" width="200">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
</table>
<br />
<!-- 테이블 안에서 표현식 사용 -->
<table border="1" width="200">
<tr>
<td><%=10%></td>
<td><%="호랑이1"%></td>
</tr>
<tr>
<td><%=20%></td>
<td><%="호랑이2"%></td>
</tr>
<tr>
<td><%=30%></td>
<td><%="호랑이3"%></td>
</tr>
</table>
<br />
<!-- 반복문을 활용하여 배열안의 값 테이블에 넣기 -->
<%
String[] name = { "호랑이1", "호랑이2", "호랑이3" };
%>
<table border="1" width="200">
<%
for (int i = 0; i < 3; i++) { // for문 시작
%>
<tr>
<td><%=i * 10 + 10%></td>
<td><%=name[i]%></td>
</tr>
<%
} // for문 끝
%>
</table>
<!-- 표현식 안에 들어갈 수 있는 것들 : 숫자, 문자열, 변수, 배열, 삼항연산 -->
<h3>구구단</h3>
<table border="1">
<%
for (int i = 0; i < 10; i++) {
out.print("<tr>");
for (int j = 2; j < 10; j++) {
out.print("<td>");
out.print(j + " X " + i + " = " + (j * i));
out.print("</td>");
}
out.print("</tr>");
}
%>
</table>
</body>
</html>
위의 코드를 실행한 결과는 아래와 같다.
위의 과정 중 2번의 실행 결과를 직접 확인할 수 있다.
위에서 생성한 웹 프로젝트의 저장 경로로 들어가보자.
아마도 eclipse-workspace 폴더 하위에 있을 것이다.
아래와 같은 폴더로 접근하자.
/Users/{사용자 계정}/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/Web03/org/apache/jsp
에 들어가면
index_jsp.java
파일을 확인할 수 있다.
맥북의 경우, /Users/{사용자 계정}/eclipse-workspace/
위치를 맥북 파인더로 접근한 후 shift +command + .
을 입력하면 숨겨진 파일 및 폴더(.metadata
)를 확인할 수 있다.
index_jsp.java
파일은 Jsp를 Servlet으로 변환한 것으로, 위에서 작성한 jsp와 유사하지만 다른 형태를 보인다.
for (int i = 0; i < 3; i++) { // for문 시작
out.write("\n");
out.write(" <tr>\n");
out.write(" <td>");
out.print(i * 10 + 10);
out.write("</td>\n");
out.write(" <td>");
out.print(name[i]);
out.write("</td>\n");
out.write(" </tr>\n");
out.write(" ");
} // for문 끝