02. JSP_01

02. JSP_01

#JSP가 등장하게 된 배경

1. Servlet의 문제점

- 웹 프로그램의 화면 기능이 점점 복잡해지면서 서블릿의 자바 기반으로 화면 기능 구현 시 어려움이 발생.

- 디자이너 입장에서 화면 구현 시 자바 코드로 인해 작업이 어려움.(자바지식이 없으면...)

- 서블릿에 비즈니스 로직과 화면 구현 기능이 같이 있다보니 개발 후 유지 관리가 어려움.

2. 해결책

- 서블릿의 비지니스 로직과 결과를 보여주는 화면 기능을 분리.

- 비즈니스 로직과 화면을 분리함으로써 개발자는 비즈니스 로직 구현에 집중하고, 디자이너는 화면 기능 구현에 집중하게 됨.

- 개발 후 재사용성과 유지관리가 훨씬 수월해짐.

#JSP 동작 방식의 구성 요소

<% 자바코드 %> : 스크립틀릿

- 자바 코드를 작성할 수 있음.

<%= %> : JSP 표현식

- 변수나 메서드의 결과값을 출력할 수 있음.

<%! %>: JSP 선언부

- 변수나 메서드를 선언할 때 사용.

*서블릿에서는 자바 코드와 함께 원하는 HTML 태그를 사용해서 브라우저로 전송하는 방식으로 화면을 구현.

서블릿은 화면에 해당하는 HTML 태그를 브라우저에 전송해 주기만 하면 브라우저가 받아서 실시간으로 구현하는 방식.

하지만, JSP는 HTML, CSS, JS 등 JSP에서 제공하는 여러 구성 요소가 화면 구현에 사용됨.

따라서 JSP 파일 자체를 브라우저로 전송하면 브라우저는 JSP 요소들을 제대로 인식하지 못하는 현상이 발생함.

이 때문에 JSP는 톰캣 컨테이너에 의해 브라우저로 전송이 되기 전, 실행 단계를 거쳐야 함.

*톰캣 컨테이너에서 JSP 변환 과정

1. 변환 단계: 컨테이너는 우선 JSP 파일을 JAVA 파일로 변환함.

2. 컴파일 단계: 컨테이너는 변환된 자바 파일을 클래스 파일로 변환함.

3. 실행 단계: 컨테이너는 클래스 파일을 실행하여 결과(HTML, CSS, JS)를 브라우저로 전송함.

#JSP 내장 객체

- 객체를 생성하지 않고 사용할 수 있는 객체.

- 내장 객체는 JSP 페이지 내에서 제공하는 특수 한 레퍼런스 타입의 변수.

- JSP 페이지가 Servlet으로 변환될 때 JSP 컨테이너가 자동적으로 제공해 주기 때문에 객체 생성 없이 사용가능.

#JSP 내장 객체의 종류

-pageContext: JSP 페이지에 대한 정보를 저장하고 있는 객체.

-request: 웹 브라우저의 요청 정보를 저장하고 있는 객체.

-response: 웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체.

-out: JSP 페이지에 출력할 내용을 저장하고 있는 객체.

-session: 하나의 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체.

-application: 웹 애플리케이션 Context의 정보를 저장하고 있는 객체.

#내장 객체 사용 시 공통적으로 사용하는 메서드

-setAttribute(String key, Object value)

==> 주어진 key 속성의 값을 value로 지정한다. (void로 리턴)

-getAttribute(String key)

==> 주어진 key의 value를 가져옴. (Object로 리턴)

-removeAttribute(String key)

==> 주어진 key의 value를 제거 (void로 반환)

-getAttributeName()

==> 모든 속성의 이름을 가져옴.

#JSP 페이지 이동 방식: forward, redirect

- 웹 어플리케이션은 여러 기능을 합쳐 하나의 프로그램을 실행하는 구조.

- 각각의 기능을 담당하는 각각의 서블릿이 기능을 수행함.

- 이 때 프로그램을 실행하다 보면 서블릿끼리 또늣 서블릿과 JSP를 연동해서 작업해야 하는 경우가 생김.

- 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 함.

- 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있음.

- 요청에 정보를 포함시켜 다른 서블릿에 전달할 수 있음.

- 모델2 개발시 서블릿에서 JSP 페이지로 데이터를 전달하는데 사용됨. (중요)

1. forward 방식

- request의 영역(scope)에 담기 값이 유효함.

- 이동된 화면이 url에 안 보인다. (사용자는 이동했는지 알 수 없음.)

- 서블릿이 직접 요청하는 방식.

- 주로 키 값을 넘겨 줄 때 사용함. (중요)

- RequestDispatcher 객체를 이용. forward() 메서드 이용.

형식)

RequestDispatcher rd = request.getRequestDispatcher("이동위치");

rd.forward(request, response);

2. redirect 방식

- 클라이언트가 새로 페이지를 요청하는 것과 같은 방식으로 페이지가 이동됨.

- 웹 브라우저에 재요청하는 방식.

- 일반적으로 변수 값을 넘겨줄 때 사용함. (중요)

- request, response 값이 유효하지 않음(새로 만들어짐.)

- 이동된 url이 화면에 나타남.

형식)

response.sendRedirect("이동위치")

from http://purewater-practice-diary.tistory.com/45 by ccl(A) rewrite - 2021-10-15 16:27:28