목차

sun cloud


JSP

: Java Server Page의 약자로 동적인 웹페이지를 위한 자바 기반의 서버 사이드 스크립트 언어입니다.

특징

  • 서블릿과는 다르게 HTML 상에서 자바코드(or jsp tag)를 삽입하는 형태로 개발합니다
  • JSP는 WAS(Web Container)에 의해 java로 생성되고 컴파일되어 실행됩니다 (생성된 java class는 HttpServlet의 자식 클래스입니다)
  • 생성된 자바 파일은 tomcat/work 디렉토리에 저장됩니다

참고)Model2 Architecture MVC에서 Model은 java beans, ViewJSP, Controller는 Servlet이 담당합니다.




JSP 기본 문법

종류 문법 설명
jsp 주석 <%-- --%> 주석. 참고) html 주석: <!-- -->
scriptlet
스크립틀릿
<% %> java code를 작성. service메서드 내에 자바 코드로 삽입.
expression <%= %> out.print() 역할. 화면 출력용
declaration
선언
<%! %> 멤버 변수, 메서드 정의 시 사용
directive
지시자
<%@ %> jsp 문서 정보를 웹 컨테이너에게 전달(한글 처리 방식, 문서 타입, import, errorPage 등)


이클립스에서 jsp 파일을 처음 생성하면 다음과 같이 작성이 되어 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
<%@ 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>

</body>
</html>

최상단부의 <%@ %>태그를 통해 jsp 파일임을 명시합니다. 그래서 이 부분이 제대로 작성되지 않는다면 jsp로 인식되지 않습니다.

그 외의 부분은 html 파일과 동일하며 먼저 설명드렸다시피 jsp는 HTML 상에서 자바코드(or jsp tag)를 삽입해서 작성합니다.




JSP LifeCycle

  • jsp의 생성주기는 서블릿과 동일한 구조를 갖고 입습니다. 차이점은 jsp를 이용해 .java를 생성하고 .class로 컴파일해서 실행하며 tomcat/work 디렉토리에 생성합니다

image




예제 코드 1

간단한 jsp 파일을 작성해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>step1 jsp basic</title>
</head>
<body>
	<%-- jsp 주석 : client 측에 전달되지 않는다 --%>
	jsp 기본
	<br><br>
	<%
	// 아래 코드는 service 메서드내에 삽입된다 	
	for (int i = 0; i < 10; i++) {
	%>
	<font color="green" size="5"><%=i + 1%>.가을전어회</font>
	<br>
	<%}%>
	<br>
	<br>
	<%-- 인스턴스 변수 선언 --%>
	<%!private int count;%>
	<%-- service메서드 내에 out.print(count++) 로 코드가 생성  --%>
	접속수
	<%=count++%>
</body>
</html>

10번 라인을 보시면 html 내에서는 <%– –%>의 주석 코드를 사용하지만, 14번 라인의 코드는 스크립틀릿(<% %>) 내에서 주석을 사용하기에 자바 파일에서 사용하는 //와 같이 주석을 사용합니다.

자바 코드의 사용 역시 동일하며 반복문은 13~19번 라인과 같이 스크립틀릿을 일부분씩 사용하고 내용 부분은 html 내용을 삽입하여 사용할 수 있습니다.

스크립틀릿은 내부 실행 함수인 sevice() 내에서 실행되기에 인스턴스 변수의 선언은 <%! %>태그를 사용해 service() 밖에 선언될 수 있도록 합니다.

실행시켜보면 다음과 같이 작동하는 것을 확인할 수 있습니다.

image


자바 파일에서는 어떻게 작성이 되었는지 직접 확인해보도록 하겠습니다.

image

위와 같이 web-tomcat의 work 디렉토리 하위 경로에 java 파일이 생성되었습니다.

전체 코드를 보면 총 188라인으로 긴 편이어서 저희가 작성한 부분만 확인하도록 하겠습니다.

image

상단부에 패키지와 임포트한 클래스들, 저희가 작성한 step1_jsp클래스 선언부가 보입니다.

19번 라인에는 jsp 파일의 23번 라인에 작성했던 count변수가 선언되어 있습니다.

image

74번 라인부터 _jspInit(), _jspDestroy(), _jspService()메서드가 생성되어 있는 것을 확인할 수 있습니다.

그리고 다음 그림에서 _jspService()메서드 안에 저희가 작성해둔 코드가 있다는 것 확인할 수 있습니다.

image




예제 코드 2

이번에는 main/java/ 경로에 model 폴더를 만들고 FoodVO 파일을 만들겠습니다.

여기서 name, maker, price 변수를 생성한 뒤 생성자와 get, set, toString 메서드를 작성한 뒤 jsp파일에서 여기서 작성한 FoodVO 클래스를 이용하도록 하겠습니다.


코드는 다음과 같이 작성합니다.

carbon

첫번째 라인에서 FoodVO 클래스를 import 했고, 4~6번 라인에서 해당 객체를 생성한 뒤 body 태그에 테이블을 작성했습니다.


생성한 테이블에 객체의 데이터들을 호출해서 출력하는 코드이고, 실행해보면 다음과 같이 출력되는 것을 확인하실 수 있습니다.

image




데이터를 늘려서 리스트를 작성한다면, 반복문을 사용해서 코드를 줄일 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<%@page import="model.FoodVO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
ArrayList<FoodVO> list = new ArrayList<FoodVO>();
list.add(new FoodVO("신라면", "농심", 1500));
list.add(new FoodVO("진라면", "오뚜기", 1300));
list.add(new FoodVO("참이슬", "진로", 1400));
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp list 표현</title>
<link rel="stylesheet" type="text/css" href="css/home.css">
</head>
<body>
	<table>
		<thead>
			<tr>
				<th>순번</th>
				<th>이름</th>
				<th>제조사</th>
				<th>가격</th>
			</tr>
		</thead>
		<tbody>
			<%
			for (int i = 0; i < list.size(); i++) {
			%>
			<tr>
				<td><%=i + 1%></td>
				<td><%=list.get(i).getName()%></td>
				<td><%=list.get(i).getMaker()%></td>
				<td><%=list.get(i).getPrice()%></td>
			</tr>
			<%
			}
			%>
		</tbody>
	</table>
</body>
</html>



실행 결과는 다음과 같습니다.

image




마지막으로 에러 페이지를 작성해보겠습니다.

현재 jsp 페이지에서 error가 발생하면 <%@ %> 태그 안에 지정한 링크를 클라이언트에게 응답하게 하는 설정입니다.

carbon

실행 결과는 다음과 같습니다.

image


에러 페이지를 설정하지 않았다면 사용자에게 불필요한 다양한 정보가 다음과 같이 노출될 수 있습니다.

image


이것으로 오늘 복습은 마치도록 겠습니다.

다음 시간에는 예제를 통해 jsp 문법 연습을 해보도록 하겠습니다.

맨 위로 이동하기

Java Web Programming 카테고리 내 다른 글 보러가기

댓글남기기