[ 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>
[ 브라우저 화면 ]
'Java Web Programming > 4. JSP' 카테고리의 다른 글
[JSP/Model2] Model 2 Architecture ( Singleton Pattern 싱글톤 패턴) (0) | 2020.08.27 |
---|---|
[JSP/Model2] Model 2 Architecture ( MVC Pattern ) / Model 1 설계방식과 차이점 ? (0) | 2020.08.27 |
[JSP] Model 1 Architecture (설계방식) (0) | 2020.08.27 |
[JSP] JSP와 DB 연동 - basic (0) | 2020.08.26 |
[JSP] JSP 기초 2 - Form 연동 (link, radio, select(onchange), checkbox, js) (0) | 2020.08.26 |