jsp 파일에서 저리 하면
temp에 jsp.java 확인 하면 이렇게 되어있음. 그냥 html 입력하면 내장된 out.wirte가 나오고, jsp엔진이 저렇게 바뀜
<%@ page
language="java"
pageEncoding="UTF-8"
contentType="text/html;charset=UTF-8"
trimDirectiveWhitespaces="true"%> /////////// 쓸때없는 \n 출력 줄여주는거
----
// 서블릿 배치: 1) web.xml 에 배치 정보를 등록
// 서블릿 배치: 2) 애노테이션으로 배치 정보를 등록
// 서블릿 배치: 3) 객체를 직접 생성하여 등록 : 웹 애플리케이션을 시작할 때
=> 스프링 사용할 때 사용할 기술
xml로 따지면 서블릿 &<servlet-mapping> 부분이랑 같음.
MVC 모델 1
JSP Engine
JSP 파일이 JSP ENGHINE으로 서블릿 클래스를 생성한다.
JSP Engine 을 Servlet class generator 라고 볼 수 있음
하는일: 웹페이지를 생성해야 하는 개발 부담을 경감시킨다.
*템플릿 데이터 ---> 출력문 생성
* JSP Action tag ---> 자바코드 생성
* 스크립팅 element ---> 자바코드 복사 or 생성
JSP 구동원리
서비스로 호출, 근데 서블릿이 없으면 자바소파일 만들고 컴파일해서 (클래스 파일) 객체 까지 만듬( 서블릿을 만듬 )
1) 웹브라우저 ==> 서블릿 컨테이너
- JSP 실행 요청
예) http://localhost:8080/java-web/jsp/ex01.jsp
2) 서블릿 컨테이너가 실행
2.1 JSP의 서블릿 객체를 찾는다
2.2 있으면,
2.2.1 그 서블릿 객체를 호출한다. service() ---> _jspService()
2.3 없으면,
2.3.1 JSP 엔진을 이용하여 JSP 파일을 가지고 서블릿 자바 소스 파일을 생성한다.
2.3.2 자바 컴파일러를 이용하여 소스 파일을 컴파일 한다.
2.3.3 서블릿 객체를 생성한다. - init() 호출 ---> jspInit()
2.3.4 그 서블릿 객체를 호출한다. - service() 호출 ---> _jspService()
2.4 JSP 파일이 변경된 상태라면,
2.4.1 다시 "2.3"을 반복한다.
3) 서블릿 컨테이너 ==> 웹브라우저
- 서블릿 실행 결과를 응답
JSP 파일을 가지고 생성한 서블릿 소스(.java)와 클래스 파일(.class)의 위치
- org.eclipse.wst.server.core/tmpx/work/...
정리!
- JSP 파일은 Python이나 PHP 처럼 직접 그 스크립트가 인터프리팅 되는 것이 아니다.
- JSP 엔진의 역할은 JSP 파일을 분석하여 서블릿 클래스를 생성하는 것이다.
- 즉 JSP 파일이 직접 실행되지 않는다!
JSP
- 자바 서블릿 클래스를 만드는 재료로 사용된다.
- 그래서 서블릿 클래스를 만드는 "틀"이라 해서 "템플릿(template)"이라 부른다.
- JSP를 템플릿 기술이라 부르기도 한다.
JSP 공부법
- JSP를 작성할 때 사용하는 특정 태그들이 어떤 자바 코드를 생성하는지 이해하는 것이 중요하다.
JSP 실행을 요청하기
- JSP 파일이 있는 위치를 지정한다.
예) http://localhost:8080/java-web/jsp/ex01.jsp
JSP를 변경한 후 실행을 요청하기
- 그냥 JSP 파일이 있는 위치를 지정하면 된다.
- 위에서 설명한대로 JSP 구동 원리에 따라 동작된다.
JSP 엔진이 서블릿을 만들 때 지켜야할 규칙:
- JSP 파일을 가지고 서블릿을 만들 때 HttpJspPage를 구현해야 한다.
- 클래스 계층도
Servlet
- init(ServletConfig):void
- destroy():void
- service(ServletRequest, ServletResponse):void
- getServletInfo():String
- getServletConfig():ServletConfig
+---> JspPage
- jspInit():void
- jspDestroy():void
+---> HttpJspPage
- _jspService(HttpServletRequest, HttpServletResponse):void
주석
- 스크립트릿 안에 작성한 코드는 자바 클래스를 생성할 때
_jspService() 메서드 안에 작성한 순서 그대로 복사된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<% // _jspService() 메서드에 안에 넣을 코드를 작성하라!
int i;
%>
<html>
<head>
<meta charset="UTF-8">
<title>ex03</title>
</head>
<%
i = 5;
%>
<body>
<h1>스크립트릿(scriptlet)과 JSP 주석<%out.print(i);%></h1>
<!--
이것은 HTML 주석이다.
JSP 엔진 입장에서는
단지 출력문으로 바꿀 템플릿 데이터일 뿐이다.
-->
<%--
JSP 주석
- 이 태그는 JSP 주석이다. JSP 엔진이 무시한다.
- 이 태그 안에 작성한 것은 자바 클래스를 생성할 때 제거된다.
스크립트릿
- JSP 파일 안에 실행할 자바 코드를 넣은 태그
- 예)
<% 자바 코드 %>
- 스크립트릿 안에 작성한 코드는 자바 클래스를 생성할 때
_jspService() 메서드 안에 작성한 순서 그대로 복사된다.
--%>
<%
if (i < 10) {
for (int x = 0; x < i; x++) {
out.println("<p>" + x + "</p>");
}
}
%>
</body>
</html>
<% 안에 넣은 건 _jspService() 메서드 안에 작성한 순서 그대로 복사된다.
<%! 안에 넣은 건 클래스 선언부로 가고 인스턴스 필드가 됨.
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-85일차(8월28일)] - 웹프로그래밍 66일차 (0) | 2023.08.28 |
---|---|
[NC7기-84일차(8월25일)] - 웹프로그래밍 65일차 (0) | 2023.08.25 |
8/24 프로젝트 63- mvc 모델 1 (계속) (0) | 2023.08.24 |
[NC7기-82일차(8월23일)] - 웹프로그래밍 63일차 (0) | 2023.08.23 |
[NC7기-81일차(8월22일)] - 웹프로그래밍 62일차 (1) | 2023.08.22 |