JSP(Java Server Page)
- 선 마이크로 시스템사가 개발한 인터넷 서버 프로그래밍 기술
- HTML 코드내에 직접 비지니스 로직을 삽입 할 수 있는 개발 기술
→ JSP 웹 어플리케이션 서버에서 사용자에게 서비스가 되래는 서블릭으로 변경되어 서비스됨 - 태그를 사용해 자바객체 사용
- JavaBeans(자바빈즈) 컴포넌트를 사용해 비지니스 로직과 프리젠테이션 로직을 완전히 분리해 응용 프로그램 구현 가능
- 플랫폼과 웹 서버에 독립적임
JSP 엔진(컨테이너)
- JSP엔진(컨테이너) : jsp소스에서 서블릿 소스 및 서블릿 클래스생성을 처리하는 서버모듈
jsp파일에서 생성되는 서블릿 파일의 이름은 시스템 마다 다를 수 있음
예시)
hello.jsp인 jsp 프로그램은 hellp.jsp소스에서 hello_jsp.java의 서블릿 프로그램이 생성된 후
이 서블릿 소스가 컴파일되어 hello_jsp.class클래스 생성
→ 클라이언트가 hello.jsp를 요청하면 서버에 대응하는 jsp 서블릿 클래스인 hellp.jsp.class를 실행해 클라이언트에 응답 - 웹 서버와 분리되어 독자적으로 설처가능, jsp엔진이 포함된 웹 서버 이용가능
- jsp 엔진 종류 : tomcat, resin(레진), JRun 등
JSP 기본 문법
- 스크립트 지향태그와 주석태그 XML기반의 액션태그, 커스텀 태그로 구성
스크립트 태그 종류 | 형식 | 의미 |
Directives(지시어) | <%@ %> | JSP 페이지 속성 지정 |
Declaration(선언) | <%! %> | 소속 변수 선언 메소드정의 |
Expresstion(표현식) | <%= %> | 변수, 계산식, 함수 호출 결과를 문자열 형태로 출력 |
Scriptlet(스크립트릿) | <% %> | 자바 코드 기술 |
Comments(주석) | <%-- --%> | 주석, JSP페이지의 설명 기술 |
- JSP실행
1. 클라이언트가 JSP 프로그램을 요청하면 JSP 소스를 해당 JSP 서블릿으로 변환해 시작
2. 이미 클래스가 있다면 메모리에 로드되어 있는지 검사
이미 메모리에 로드되어 있다면 5번 실행
3. JSP서블릿 코드를 컴파일하여 서블릿 코드 생성
4. JSP서블릿 클래스를 메모리에 로드
5. 메모리에 로드된 JSP서블릿 실행
6. JSP 서블릿의 응답을 생성해 클라이언트에 응답 - JSP 라이프 사이클(순환하면서 반복함)
메소드 | 기능 |
_jspInit() | 요구되는 자원의 연결 등의 초기화 작업 수행 - 메모리에 로드되지 않은 서블릿 요청 시 |
_jspService() | 실제 클라이언트에 요청에 대한 직접 처리수행으로 클라이언트 요청때마다 반복 수행 - 메모리에 로드된 서블릿 요청시 |
_jspDestroy() | 웹 서버 또는 어플리케이션 종료 되는 경우에 메모리에서 언로드 한 경우, JSP서블릿 종료를 위한 작업 수행 - 애플리케이션이 종료되어 서블릿 메모리에서 언로드 |
<예시_1>
<%@ page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test Date</title>
</head>
<body>
<%
Date today = new Date();
%>
<%
out.print("현재 시간: [" + today + "]");
%>
</body>
</html>
↓결과
<예시_2>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test Scriptlet Test</title>
</head>
<body>
<%
int i = 24;
%>
<%
out.print("하루 : " + i + "시간, <br>");
out.print("하루 : " + i * 60 + "분 <br>");
%>
</body>
</html>
↓결과
<예시_3>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test Expresstion Test</title>
</head>
<body>
<%
int year = 365;
%>
<%
out.println("1년은 몇주인가요?");
%><br>
<%
out.println(year / 7);
%>
<%
out.println("주 입니다");
%>
<br>
<hr size="5" color="green">
<%=year / 7%>
<%="주 입니다"%>
</body>
</html>
out.println = <%= >
↓결과
<예시_4>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test member variable</title>
</head>
<body>
<%
int i = 0;
%>
[지역변수]i =
<%=++i%>
<p>
[멤버변수] member =
<%=++member%>
<%!int member = 0;%>
</body>
</html>
브라우저에서 새로고침 시 : 지역변수는 변하지 않지만 멤버변수는 누적됨
- 선언 : <%! %>
- 지역변수 : 선언 후 실행해야함 → 순서중요,순서바꾸면 에러
- 멤버변수 : 순서상관없음 → 이미 선언되기 전에 만들어져 있기때문에 사용가능(전역변수의 의미를 가지고 있음)
↓결과
<예시_5>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calendar Test</title>
</head>
<body>
<%
Calendar cc = Calendar.getInstance();
int hour = cc.get(Calendar.HOUR_OF_DAY);
int minute = cc.get(Calendar.MINUTE);
int second = cc.get(Calendar.SECOND);
if (hour > 12) {
hour = hour - 12;
}
%>
<h1>
현재 시간 :
<%=hour%>시,<%=minute%>분,
<%=second%>초
</h1>
</body>
</html>
↓결과
<예시_6>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test Error Test</title>
</head>
<body>
<%
String[] str = { "감사합니다", "Thank you" };
%>
한국어 : [<%=str[0]%>]
<br> 영어 : [<%=str[2]%>]
</body>
</html>
↓결과
<예시_7>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test Comments</title>
</head>
<body>
<h1>HTML주석과 JSP주석 차이</h1>
<!-- 이것은 HTML주석으로 웹 브라이저의[소스보기]에서 보입니다 -->
<%--다음은 자바코드의 스크립트릿입니다 웹 브라이저의[소스보기]에서 안보입니다--%>
<%
String str;
if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)>=12)
str="오후";
else
str="오전";
%>
지금 시각은 <%= new Date() %>입니다
</body>
</html>
↓결과
<예시_8>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP TEST JSP COMMENTS</title>
</head>
<body>
<!-- HTML 주석 소스보기에서 보입니다 -->
<%--jsp 주석 소스보기에서 안보입니다 --%>
<%!
/*
절대값을 반환하는 메소드 abs()
*/
public int abs(int a) { //메소드 구현
//if 문자 활용
if (a < 0)
return -a;
else
return a;
}%>
원주율 :
<%=Math.PI%>
-345 절댓값 :
<%=abs(-345)%>
</body>
</html>
↓결과
'JSP' 카테고리의 다른 글
221011_JSP_JDBC_국비_기초 (0) | 2022.10.11 |
---|---|
221011_JSP_국비_자바빈즈2 (0) | 2022.10.11 |
221010_JSP_국비_session/ cookie/ 자바빈즈 (0) | 2022.10.10 |
221006_JSP_국비_response/ application/ pageContext/ 액션태그 (0) | 2022.10.06 |
221005_JSP_국비_Directive/ Implicit Object/ request (1) | 2022.10.05 |