[JSP] JSP의 특징, JSP의 페이지 처리과정, JSP의 생명주기, 스크립트 태그, 디렉티브 태그, 주석처리

예지성준·2024년 5월 18일
0
post-thumbnail

JSP의 특징

🟥 (Java Server Page) - 서블릿 코드 번역기술

  1. JSP는 서블릿 기술의 확장

  2. JSP는 유지 관리가 용이

  3. JSP는 빠른 개발이 가능

  4. JSP로 개발하면 코드 길이를 줄일 수 있다.

JSP의 페이지 처리과정

  1. 웹 브라우저가 웹 서버에 JSP를 요청합니다. 웹 서버는 요청된 Hello.jsp에서 jsp 확장자를 발견하여 JSP 페이지임을 확인하고 웹 서버에 있는 JSP 컨테이너에 전달합니다.

  2. JSP 컨테이너는 JSP 페이지를 서블릿 프로그램인 Hello_jsp.java로 변환합니다.

  3. JSP 컨테이너가 서블릿 프로그램을 컴파일하여 Hello_jsp.class로 만들고 이를 웹 서버에 전달합니다.

  4. 웹 서버는 정적 웹페이지처럼 *.class의 실행 결과를 웹브라우저에 응답으로 전달하므로 웹 브라우저는 새로 가공된 HTML 페이지를 동적으로 처리한 결과를 보여줍니다.

hello_jsp.java

hello.jsp에 한글로 입력한 내용을 번역해주었다.

자동적으로 hello_jsp.java 내의 _jspService(....) 메서드가 번역을 수행해준다.


post.jsp -> post_jsp.java -> 컴파일 -> post_jsp.class -> 실행 -> _jspInit()한번 -> _jspService(): 매 요청시 -> _jspDestroy();

자바코드로 바뀌어있다.

🔼 번역된 위치는 _jspService메서드 내부임 (지역 안!)

💥post_jsp.java에서 번역 된 위치가 _jspService안이라는 것을 확인 할 수있다.
따라서 이건 서비스 메서드 지역 내부라는것,, 같은 지역안에 있기 때문에 해당 지역 변수 사용 가능하다


JSP 생명 주기

🔹_jspInit() : 초기화시(처음만 호출)
🔹_jspService(....) : 매 요청시 (이 메서드 내부에 요청한 내용의 번역이된다.)

🔹_jspDestroy() : 소멸시

👩‍🏫참고)
_jspService 메서드 지역 내부에 정의된 객체 = 내장 객체
-> jsp 페이지에서 바로 접근이 가능

_jspService 메서드 지역 내부 내장 객체💥

  • jsp 페이지에서 바로 접근 가능한 객체

...
인터페이스명 변수명

  • 🌟 HttpServletRequest request : 요청 관련 정보, 기능

  • 🌟 HttpServletResponse response : 응답 관련 정보, 기능

  • 🌟 PageContext pageContext : JSP로 번역된 서블릿 클래스의 환경 정보, 기능

🔼pageContext객체 만들어줌(페이지의 정보를 바탕으로 만들어짐)
-> 이 정보를 바탕으로 다른 내장객체를 만듦

  • 🌟 ServletContext application : 서블릿(애플리케이션) 환경 정보, 기능

  • 🌟 ServletConfig config : 서블릿 설정

  • 🌟 HttpSession session : 세션

  • 🌟 JspWriter out : JSP 페이지에 출력

  • 🌟 Object page = this // 생성된 서블릿 객체를 참조

  • Throwable exception

📍 jsp 페이지에서 자바 코드 : 번역시 자바 코드 그자체로 추가

	<%
		자바 코드 
	`%>
#hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<h1>안녕하세요.</h1>
<h1>방가루</h1>

<%
    response.sendRedirect("http://www.naver.com");
%>
<!--접속시 네이버 이동됨-->

스크립트 태그

  • 자바 코드를 입력할 수 있는 태그

1. 스크립트 태그의 종류

1) 선언문

  • 번역 위치가 클래스명 바로 아래쪽 추가 (멤버 변수, 메서드)
	<%!
		자바코드 ...
	%>

🔼지역안이라 함수정의하면 접근 불가능(자바는 함수 안에 함수 불가능)

🔽멤버 메서드로써 추가된거라 정의된 add함수를 지역안에서 부르는것 문제가 없음

당연히 멤버 변수도 접근 가능함

2) 스크립틀릿

_jspService 메서드의 지역 내에 코드 추가 (메서드 정의 X(함수안에 함수 정의 불가능), 변수 -> 지역변수)

	<%
		자바코드 ...   
	%>

3) 표현문(expression)

_jspService 메서드의 지역 내에 번역

	
<%=변수%> = out.print(변수)
	


디렉티브 태그

<%@ ..... %>

jsp페이지를 어떻게 처리할 것인지 설정하는 태그

page 디렉티브 태그의 속성

errorPage -> 에러 출력 페이지 설정

isErrorPage="true" : 번역될때 exception 내장 객체 생성

🔼exception 내장객체

isELIgnored="true" : EL 식 사용 불가 (Expression Language)
${식}

include

-> JSP, 서블릿, 텍스트 파일 출력 결과물을 물리적으로 포함 <%@ include file="파일 경로" %>

taglib

  1. page 디렉티브 태그의 기능과 사용법
<%@ page 속성1=“값” [속성2=“값2” .. ] %>    
<%과 @사이에 공백이 없어야 함
  1. include 디렉티브 태그의 기능과 사용법
    file="jsp|HTML 경로"
    <%@ include file="..." %>
  2. taglib 디렉티브 태그의 기능과 사용법
  • 태그 라이브러리
    JSTL (JSP Standard Tag Libaray) - 3.0
    uri="jakarta.tags.core"

👩‍🏫참고)
예전 JSTL(1.2~)
uri = "http://java.sun.com/jsp/jstl/core|fmt|functions"

implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'


implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'

  • JSTL 3.0
    • jstl-api
    • jstl 구현체

JSP의 주석 처리

<%-- 주석 --%> : 번역 배제!!

/* */ : 자바 코드의 주석으로 번역

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글