본문 바로가기
Java Web Programming/4. JSP

[JSP] JSP 기초 basic - 기본 문법 / JSP LifeCycle / table / form과 연동

by 파프리카_ 2020. 8. 25.
728x90
반응형

[ JSP ] 

: Java Server Page

→ 동적인 웹 페이지 개발을 위한 기술

서블릿과 다르게 HTML 페이지 상에서 자바코드를 합입하는 형태로 개발.

 

Mode 2 Architecture의 MVC 에서는

Model : Java Component (aka. Java Beans)

View : JSP

Controller : Servlet


JSP 기본 문법

1. 주석 : <% --    --%>

 - html 주석 <!--  -->과 달리  페이지 소스보기에서 클라이언트에게 노출이 되지 않아,  html 주석보다 사용이 권장된다.

2. scriptlet : <%   java code   %> 

 - service 계열 메서드(doGet(), doPost()) 내에 코드 삽입

3. directive (지시자) : <%     %>

 - jsp 상단에 위치, 웹페이지의 정보를 컨테이너에게 알려줄 때 사용한다. 

 - (ex. 문서타입, 한글처리, import 등)

4. expression : <%=     %>

 - service 계열 메서드 내에 삽입되고 출력할 때 사용

5. declaration (선언) : <%     %>

 - 멤버 변수 또는 메서드 정의 시 사용

 

사용 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP basic</title>
</head>
<body>
	<!-- html 주석 -->
	<%-- jsp 주석 (클라이언트에게 보이지 않아서 권장함!) --%>
	JSP basic test
	<br>
	<br>
	<%
		for (int i = 0; i < 10; i++) {
	%>
	방가방가.jsp
	<br>
	<%
		}
	%>
	<hr>
	<%
		Date d = new Date();
	%>
	
	<%-- expression  --%>
	현재시간 : <%=d.toString() %>
	<hr>
	
	<%-- declaration : 인스턴스 변수 및 메서드를 선언해본다 --%>
	<%!
		int count; 
		public void test(){
			System.out.println("method test");
		}
	%>
	카운트: <%=count %>
	<% test(); %>
</body>
</html>

JSP Life Cycle 

: Servlet과 동일 (* 차이점은 jsp가 .java로 내부적으로 생성)

 

jsp LifeCycle 코드 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP LifeCycle</title>
</head>
<body>
	<%!
		public void jspInit(){
			System.out.println("jspInit");
		}
		
		public void jspDestroy(){
			System.out.println("jspDestroy");
		}
	%>
	<%
		// 아래 코드는 jspService() 메서드 내에 삽인된다.
		System.out.println("jspService");
	%>
JSP LifeCycle Test
</body>
</html>

 

- console  :

1. jsp를 실행하면, jspInit 이 출력됨

2. browser를 새로고침할 때마다 jspService 가 출력됨

3. server를 중지하면, jspDestroy 가 출력됨


JSP로 table / ArrayList 사용해보기

예제 1.

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list for loop</title>
<link rel="stylesheet" type="text/css" href="css/mystyle.css">
</head>
<body>
<% 
	ArrayList<String> list = new ArrayList<String>();
	list.add("감자튀김");
	list.add("노가리");
	list.add("골뱅이");
%>
<table>
	<tr>
		<td>순번</td>
		<td>메뉴</td>
	</tr>
	
	<% 
		for(int i=0; i<list.size(); i++){
	%>
		<tr>
			<td><%=i+1 %></td>
			<td><%=list.get(i)%></td>
		</tr>
	<%
		}
	%>
	
</table>
</body>
</html>

[ 브라우저 ] 


예제 2.

<%@page import="model.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<link rel="stylesheet" type="text/css" href="css/mystyle.css">
<head>
<meta charset="UTF-8">
<title>JSP test</title>
</head>
<body>
	<%
		Person p = new Person("팔랑이", 22);
	%>
	<table>
		<tr>
			<td>이름</td>
			<td><%=p.getName() %></td>
		</tr>
		
		<tr>
			<td>나이</td>
			<td><%=p.getAge() %></td>
		</tr>
	</table>
</body>
</html>

 

[ 브라우저 ] 


예제 3. thead / tbody 도 활용해보자!

<%@page import="model.Person"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<link rel="stylesheet" type="text/css" href="css/mystyle.css">
<head>
<meta charset="UTF-8">
<title>JSP ArrayList Test</title>
</head>
<body>
<%
	ArrayList<Person> list = new ArrayList<Person>();
	list.add(new Person("박복자", 53));
	list.add(new Person("최미숙", 44));
	list.add(new Person("장덕철", 54));
%>
<table>
	<thead>
		<tr>
			<th>순번</th>
			<th>이름</th>
			<th>나이</th>
		</tr>
	</thead>
	<tbody>
		<% for(int i=0; i<list.size(); i++) { %>
			<tr>
				<th><%=i+1 %></th>
				<th><%=list.get(i).getName() %></th>
				<th><%=list.get(i).getAge() %></th>
			</tr>
		<% } %>
	</tbody>
</table>
</body>
</html>	

 

[ 브라우저 ]


Error page 처리하기

 

에러 발생 시 넘어갈 페이지 설정

<%@ errorPage = "[errorPage path]" %>  추가하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage = "error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Error Test</title>
</head>
<body>
<%
	<%-- 에러가 발생할 코드--%>
	String str = null;
	str.length();
%> 정상 페이지
</body>
</html>

에러 메세지가 아닌 다음과 같은 화면이 뜬다 !


form과 연동

: service 메서드( <% %>) 내에 request와 response가 내장되어 있어 사용할 수 있다 !

 

예제 1.

당신의 아이디는 [  ] 입니다.
입력폼으로(링크)

 

/step8.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 입력화면</title>
</head>
<body>
<%-- 
	당신의 아이디는 [  ] 입니다.
	입력폼으로(링크)
 --%>
<form action="step8-action.jsp">
	아이디<input type="text" name="userId" required="required">
	<input type="submit" value="전송">
</form>
</body>
</html>

 

/step8-action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과 화면</title>
</head>
<body>
	당신의 아이디는
	<%=request.getParameter("userId")%> 입니다.
	<br>
	<a href="step8.jsp">입력폼으로</a>
</body>
</html>

 

[ 브라우저 화면 ] 

 


예제 2.

[  ]에 사는 [  ] 님 등록되었습니다.
등록 화면으로 (a link)

 

/step9.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력화면</title>
</head>
<%--
	[  ]에 사는 [  ] 님 등록되었습니다.
	등록 화면으로 (a link)
 --%>
<body>
<form action = "step9-action.jsp" method="post">
	이름 <input type="text" name="userName" required="required"><br>
	주소 <input type="text" name="userAddress" required="required"><br>
	<input type="submit" value="등록">
</form>

</body>
</html>

 

/step9-action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과화면</title>
</head>
<body>
	<%-- post 방식으로 받아오니까 한글처리 필요 --%>
	<% request.setCharacterEncoding("utf-8"); %>
	<%=request.getParameter("userAddress") %>에 사는
	<%=request.getParameter("userName") %>님 등록되었습니다.
	<br>
	<a href="step9.jsp">등록 화면으로</a>
</body>
</html>

 

[ 브라우저 화면 ] 

728x90
반응형