java - java파일
webapp - html, css, js, jsp, img 등 웹 관련 자료들
ex01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP예제</title>
</head>
<body>
<%
int total = 0;
for(int i = 1; i <= 10; i++) {
total += i;
}
%>
1부터 10까지의 합 : <%= total %>
</body>
</html>
동적으로 만들었지만 결과가 정적
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP예제</title>
</head>
<body>
<%
java.util.Random ran = new java.util.Random();
int total = 0;
for(int i = 1; i <= ran.nextInt(10); i++) {
total += i;
}
%>
1부터 10까지의 합 : <%= total %>
</body>
</html>
요청이 갈때마다 1부터 랜덤수 n까지 더한값 출력 → 결과가 동적으로 바뀜
ex02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP기본문법</title>
</head>
<body>
<h2>JSP 기본 문법 예제</h2>
<%
//Scriptlet : 자바코드를 작성할 수 있는 영역 (연산, 처리 기능 정의
String str = "스크립틀릿 입니다";
String comment = "주석";
%>
선언문 : <%= declration %><br> <!-- 표현식 : 값을 출력 (처리, 연산 코드 사용불가 -->
스크립틀릿 : <%= str %><br>
<!-- <%= comment%> -->
<%-- <%= comment&>--%>
<%! //선언문 (멤버필드, 멤버 메서드 정의)
String declration = "선언문";
%>
</body>
</html>
<%%> html 안에서 java코드를 작성할 수 있음
html 주석 vs jsp 주석
html 주석은 해석해서 출력이 되지만 jsp 주석은 서버에서 완전히 주석처리 되서 결과에서 제공되지않음
※ 서버측 코드에 오류가 없고 응답이 잘되는데도 코드에 빨간줄이 생기면 코드 전체 지우고, 저장, 다시 붙여넣기, 저장 하면 괜찮아진다
→ 내부 프로세스에서 계속 컴파일 오류를 확인하는데 수정하다 보면 타이밍이 안맞아서 처리가 안되는 상황이 발생하는것임
JSP를 톰캣이 처리하는 과정
[톰캣서버]
서버 경로(context path) : http://localhost:8080/basic
클라이언트측에서 http://localhost:8080/basic/ex01.jsp 요청
서버측, 톰캣에서 ex01.jsp 파일을 찾아서 ex01.java파일로 생성
java파일을 class파일로 컴파일 한 후 서버 메모리에 LOAD, jspInit()호출
(중략)객체생성후 서비스
다시 똑같은 요청이 들어오면 서버 메모리에 이미 저장이 되어있기 때문에 jspService()함수를 호출해서 응답
만약 jsp 파일이 변경되었다면 jspDestroy()호출해서 서버 메모리에서 객체를 삭제한 후 다시 처음처럼 객체를 만든다
변경이 없다면 jspService() 호출
eclipse는 코드를 작성하기 위해 사용하고
톰캣은 8080포트를 이용해 서비스한다
실질적 서비스는 톰캣
JSP Life Cycle 실습
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 라이프사이클</title>
</head>
<body>
<%!
private int num1 = 0;
public void jspInit(){ //오버라이딩
System.out.println("jspInit() 호출됨");
}
public void jspDestroy(){ //오버라이딩
System.out.println("jspDestroy() 호출됨");
}
%>
<%
int num2 = 0;
num1++;
num2++;
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);
%>
<ul>
<li>num1 : <%= num1 %></li>
<li>num2 : <%= num2 %></li>
</ul>
</body>
</html>
서버 콘솔에서 첫 요청이 들어올 때 jspInit()을 호출하고 똑같은 요청이 들어올때는 값이 계속 증가한다
코드가 변경되고 재실행을하면 jspDestroy()가 호출되고 다시 jspInit()을 호출한 후 서비스한다
→ 작업중인 폴더
work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\jsp02\org\apache\jsp
경로를 따라 들어가 보면
서비스 하고 있는 폴더들이 보인다
서버메모리에 해당하는 부분의 파일이다
localhost:8080/jsp02/ex03.jsp 요청을 보내면...
ex03.jsp → ex03_jsp.java → ex03_jsp.class → new ex03_jsp();
객체를 만들면 jspInit(), jspService(), jspDestroy() 등의 함수가 생긴다
ex03.jsp 에서 init, destroy를 오버라이딩해서 문자열을 출력하게 한 다음 flow를 확인하고있다