😀servlet jsp session을 잘 기억하자..!!
😀
web.xml 파일 만드는 방법
1. 프로젝트 만들 때 Generate web.xml deployment descriptor 체크하기
2. (체크를 안했다면) JAVA EE tools - Generate deployment descriptor Stub
.😀is가 들어가면 boolean형으로 반환
# JSP가 등장하게 된 배경
1. Servlet의 문제점
- 웹 프로그램의 화면 기능이 점점 복잡해지면서 서블릿의
자바 기반으로 화면 구현 시 어려움이 발생함.
- 디자이너 입장에서 화면 구현 시 자바 코드로 인해 작업이
어려움. ==> 자바에 대한 지식이 없는 경우
- 서블릿의 비지니스 로직과 화면 구현 기능이 같이 있다 보니
개발 후 유지 관리가 어려움.
2. 해결책
- 서블릿의 비지니스 로직과 결과를 보여주는 화면 기능을
분리하자.
- 비지니스 로직과 화면을 분리함으로써 개발자는 비지니스
로직 구현에 집중하고, 디자이너는 화면 기능 구현에
집중하게 됨.
- 개발 후 재사용성과 유지관리가 훨씬 수월해지게 됨.
# 서블릿에서는 자바 코드와 함께 원하는 HTML 태그를 사용해서
브라우저로 전송을 하여 화면을 구현을 하였음. 서블릿으로 화면을
구현하려면 화면에 해당하는 HTML 태그를 브라우저로 전송해
주기만 하면 브라우저가 받아서 실시간으로 구현을 해 주었음.
하지만 JSP는 HTML, CSS, JavaScript 는 물론이고 JSP에서
제공하는 여러가지 구성요소가 화면을 구현하는데 사용이 되고 있음.
그러다 보니 JSP 파일 자체를 브라우저로 전송을 하면 브라우저는
JSP 요소들을 인식을 하지 못하는 현상이 발생을 하게 됨. 따라서
JSP는 톰캣 컨테이너에 의해 브라우저로 전송하기 전에 특수한
단계를 거쳐야 함.
* 톰켓 컨테이너에서 JSP 변환 과정
1. 변환 단계 : 컨테이너는 우선적으로 JSP 파일을 자바 파일로
변환을 함.
2. 컴파일 단계 : 컨테이너는 변환된 자바 파일을 클래스 파일로
컴파일을 함.
3. 실행 단계 : 컨테이너는 클래스 파일을 실행하여 그 결과(HTML,
CSS, JavaScript)를 브라우저로 전송을 하게 됨.
# JSP 내장 객체
- 객체를 생성하지 않고 사용할 수 있는 객체를 말함.
- 내장 객체는 JSP 페이지 내에서 제공하는 특수한 레퍼런스
타입의 변수임.
- JSP 페이지에서 사용하는 특수한 레퍼런스 타입의 변수가
아무런 선언과 객체 생성 없이 사용할 수 있는 이유는 JSP가
Servlet으로 변환될 때 JSP 컨테이너(톰캣)가 자동적으로
제공을 해 주고 있기 때문임.
# JSP 내장 객체의 종류
- pageContext : JSP 현재 페이지에 대한 정보를 저장하고
있는 객체.
- request : 웹 브라우저의 요청 정보를 저장하고 있는 객체.
- response : 웹 브라우저의 요청에 대한 응답 정보를 저장하고
있는 객체.
- out : JSP 페이지에 출력할 내용을 저장하고 있는 객체.
- session : 하나의 웹 브라우저의 정보를 유지하기 위한 세션
정보를 저장하고 있는 객체.
- application : 웹 애플리케이션의 정보를 저장하고 있는 객체.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
# JSP 페이지 이동 : forward, redirect
- 웹 애플리케이션은 여러 기능을 합쳐 하나의 프로그램을 실행하는
구조로 되어 있음.
회원관리 기능, 게시판 관리 기능, 주문 관리 등에 대해 각각의
서블릿이 기능을 수행하게 되어 있음.
- 이 때 프로그램을 실행하다 보면 서블릿끼리 또는 서블릿과 JSP를
연동해서 작업을 해야 하는 경우가 생길수 밖에 없음. 예를
든다면 쇼핑몰의 경우 상품 관리 서블릿에서 조회된 상품을 화면에
표시하는 JSP 페이지는 각각 따로 존재하게 되어 있음.
따라서 사용자가 상품 조회를 요청하면 상품 관리 서블릿은
데이터베이스에서 해당 상품에 대한 상품 정보를 조회한 후
다시 JSP에게 해당 상품 정보를 전달하여 상품 정보를 표시해
주어야 함. - 매우 중요함.
이러한 페이지 이동은 필수적이라고 보면 됨.
* 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 함.
* 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있음.
* 요청에 정보를 포함시켜 다른 서블릿에게 전달 할 수 있음.
* 서블릿에서 JSP 페이지로 데이터를 전달하는 데 사용이 됨. - 아주 중요함.
1. forward 이동 방식 - 아주 중요함.
- request의 영역(scope)에 담긴 값이 유효함.
- 이동된 화면이 url 창에 안 보인다.
(사용자는 이동했는지 알 수 없음)
- 주로 정보(키)를 넘겨줄 때 사용함(중요).
- RequestDispathcer 객체를 사용함.
==> forward() 메서드를 사용.
형식) RequestDispatcher rd = request.getRequestDispatcher("이동위치");
rd.forward(request, response);
2. redirect 이동 방식
- 클라이언트가 새로 페이지를 요청하는 것과 같은 방식으로 페이지가 이동이 됨.
- 웹 브라우저에 재요청하는 방식임.
- 일반적으로 변수 값을 넘겨줄 때 사용함(중요).
- request, response 값이 유효하지 않음.
- 이동된 페이지가 url 창에 나타남.
- 형식) response.sendRedirect("이동위치");
// @ sendRedirect는 이전 파일로 돌아가서(db가없음) 전송하므로 null종종 뜸
<%--
지시어(디렉티브) : JSP 페이지에 대한 설정 정보를 지정하는 공간.
1. <% page %>
- JSP 페이지에 대한 정보를 지정하는 공간.
- 어떻게 처리해야 하는지, 전달하기 위한 내용도
담고 있는 공간.
- 클라이언트 요청에 JSP 페이지가 실행될 때
필요한 정보를 JSP 컨테이너(톰캣)에게 알려주는
역할을 함.
2. <% include %>
- 현재 페이지에 다른 문서(JSP, HTML)를 가져와서
내용을 컴파일 할 때 사용되는 디렉티브.
형식) <% include file="포함할 파일의 url 경로" %>
- include 지시어를 사용한 JSP 페이지가 컴파일
되는 과정에서 include 되는 JSP 페이지의 소스
내용을 그대로 포함해서 컴파일을 함.
- 즉, 복사 & 붙여넣기 방식으로 두 개의 파일이
하나의 파일로 구성이 된 후 같이 컴파일이 됨.
3. <% taglib %>
- 사용할 태그 라이브러리를 지정하는 디렉티브.
- EL / JSTL 언어 사용 시 적용되는 디렉티브.
(추후 수업 진행 예정)
==========================================
1. 페이지 지시어(디렉티브)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- language="java" : 해당 JSP 에서 사용되는 언어(java).
- contentType : 문서의 타입
==> JSP 페이지의 내용을 어떤 형태로 출력할지를
웹 브라우저에게 알려주는 역할.
- charset : 문자(한글) 설정(UTF-8, EUC-KR)
- import : 다른 패키지에 있는 클래스를 가져다가
사용할 때 지정.
- session : HttpSession 속성의 사용 여부를 지정.
형식) <%@ page Session="true" %>
- isErrorPage : 에러 페이지인지의 여부를 지정.
- errorPage : 에러가 발생했을 때 보여줄 에러페이지를 지정.
- pageEncoding="UTF-8" : 현재 페이지의 문자(한글) 설정.
--%>
<%--
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
JSP 페이지의 구성 요소
1. 스크립트릿
- 가장 일반적으로 JSP 페이지에서 많이 쓰이는 스크립트 요소
- 주로 프로그래밍의 로직을 기술할 때 많이 사용됨
- JSP 페이지에서 자바 코드가 작성되는 공간
형식)
<%
자바코드;
%>
2. 표현식
- 일반적으로 JSP 페이지에서 자바의 System.out.println() 과 유사하게 사용됨
데이터를 출력할 때 사용됨
형식) <%=변수명 또는 수식%>
3. 선언문
- 일반적으로 JSP 페이지에서 자바의 멤버변수 또는 멤버 메서드를 선언할 때 사용이 됨
형식)
<%!
변수 선언 또는 메서드 선언;
%>
--%>
<%-- JSP 표현식: 변수의 값 또는 메서드의 결과값을 웹 브라우저에 출력 --%>
<%=su %>
<!-- 에러 페이지 설정 -->
<error-page>
<error-code>500</error-code>
<location>/error/error_500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/error_404.jsp</location>
</error-page>
😀 request.setAttribute("name", "홍길동"); // (키이름, value) --> '바인딩'이라고 함
😀// 실제 페이지 이동 (사용자는 넘어갔는지 모름)
rd.forward(request, response); // request와 response 객체가 같이 넘어감
# 쿠키(Cookie)란?
- 사용자가 웹 사이트를 방문할 때 웹 사이트에서 클라이언트의
컴퓨터에 저장해 놓는 작은 파일.
- 웹 페이지들 사이의 공유 정보를 클라이언트 컴퓨터에 저장해
놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록
매개 역할을 하는 방법임.
- http 프로토콜은 웹 브라우저의 응답 후 일정 시간이 지나면
접속을 끊는 특징이 있음. 이러한 특징으로 쿠키 기술이 발달하게
되었음.
# 쿠키의 특징
- 쿠키는 서버에서 생성이 됨.
- 쿠키는 클라이언트 컴퓨터에 저장이 됨.
- 쿠키 관리는 웹 브라우저가 함.
- 쿠키의 크기는 4KB 로 제한적이며, 300개 정도의 쿠키를 만들어서 사용할 수 있음.
- 도메인당 쿠키가 만들어짐(웹 사이트당 하나의 쿠키가 만들어짐).
- 쿠키는 보안이 취약함.
# 쿠키의 생성 방법과 관련 메서드
* 쿠키의 생성 방법
- 쿠키의 생성은 쿠키 클래스를 이용함.
- 쿠키 속성 설정(setter)
- 쿠키의 전송(response 객체에 탑재 : addCookies())
* 쿠키 관련 메서드
- setMaxAge()
==> 쿠키의 유효 기간을 설정하는 메서드.
- setPath()
==> 쿠키 사용을 위한 디렉토리를 설정하는 메서드.
(특정 경로명을 갖는 url로 전송하도록 설정)
- setValue()
==> 쿠키 값을 설정하는 메서드.
- setVersion()
==> 쿠키의 버전을 설정하는 메서드.
- getMaxAge()
==> 쿠키의 유효 기간 정보를 얻어 오는 메서드.
- getName()
==> 쿠키의 이름을 얻어올 때 사용하는 메서드.
- getPath()
==> 쿠키의 유효 디렉토리 정보를 얻어올 때 사용하는 메서드.
- getVersion()
==> 쿠키의 버전을 얻어올 때 사용하는 메서드.
- getCookies()
==> 쿠키 데이터를 읽어올 때 사용하는 메서드.
웹 브라우저 보낸 쿠키를 배열로 반환해 주는 메서드.
# 저장된 쿠키를 사용하는 순서
1. 웹 브라우저에 요청을 하여 쿠키를 얻어온다.
2. 쿠키는 이름, 값의 쌍으로 된 배열 형태로 반환이 됨.
반환된 쿠키의 배열에서 쿠키의 이름을 가져온다.
3. 쿠키의 이름을 통해서 해당 쿠키의 설정된 값을 추출함.
# 세션(session)이란?
- 쿠키와 마찬가지로 서버와의 connection 관계를 유지하기
위해서 이용자의 정보를 저장하는 객체임.
# 세션의 특징
- 세션은 서버에서만 접근이 가능함.
- 세션은 서버의 메모리에 저장됨.
- 서버에 부하를 줄 수 있음.
- 쿠키의 기본 용량이 4KB, 300개로 제한적인 반면에 세션은
제한이 없음.
- 브라우저 당 한 개의 세션이 생성이 됨.
- 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에
주로 사용이 됨.
# 세션 관련 메서드
- setAttribute()
==> 세션의 속성을 설정하는 메서드.
형식) session.setAttribute("id", "hong");
- getAttribute()
==> 세션에서 데이터를 얻어올 때(세션의 속성을 사용할 때)
이용하는 메서드.
형식) String id =
(String)session.getAttribute("id");
- getAttributeNames()
==> 세션에 저장되어 있는 모든 데이터의 이름을 얻어올 때
사용하는 메서드.
- removeAttribute()
==> 세션의 특정 데이터를 제거하는 메서드
형식) session.removeAttribute()
- invalidate()
==> 세션의 모든 데이터를 삭제하는 메서드.
- getId()
==> 자동 생성된 세션의 아이디를 얻어올 때 사용하는 메서드.
- isNew()
==> 세션이 최초 생성되었는지 여부를 알고 싶은 경우 사용되는
메서드.
- getMaxInactiveInterval()
==> 세션의 유효 시간을 얻어올 때 사용하는 메서드.
'JSP' 카테고리의 다른 글
23.03.16 (EL, JSTL[c:, fmt:] (0) | 2023.03.16 |
---|---|
23.03.15 DBCP (0) | 2023.03.15 |
23.03.06(get, post, servlet mapping) (0) | 2023.03.06 |
댓글