Servlet & JSP

JIN·2023년 4월 1일
0

삽히

목록 보기
2/6
post-custom-banner

1. JSP (Java Server Page)

  • JSP는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어
  • JAVA EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작
  • JSP는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 ! 서블릿과 거의 유사하다고 볼 수 있지만, 서블릿과 달리 HTML표준에 따라 작성되므로 웹디자인하기 편리하다.
  • PHP, ASP, ASP.NET과 비슷한 구조
  • JSTL 등의 JSP 태그 라이브러리를 사용하는 경우 자바 코딩없이 태그만으로 간략히 기술이 가능하여 생산성 향상
    [출처:위키백과]



2. JSP Scriptlet

선언, 스크립트릿, 표현식, 주석

  1. 선언 (Declaration)
    • 멤버변수 선언이나 메소드를 선언하는 영역, <%! 멤버변수와 method 작성 %>

  2. 스크립트릿 (Scriptlet)
    • Client 요청 시 매번 호출 영역
    • Servlet으로 변환 시 service() method에 해당되는 영역
    • request, response에 관련된 코드 구현
    • <% java code %>

  3. 표현식 (Expression)
    • 데이터를 브라우저에 출력할 때 사용
    • <%= 문자열 %> : <%= name %>
    • 주의! <%=문자열;%> : 문자열 뒤 세미콜론(;)은 작성 X
    • <%=문자열%> == <%out.print(문자열);%> : 같은 표현

  4. 주석 (Comment)
    • 코드 상에서 부가 설명을 작성
    • <%-- 주석 할 code --%>


3. JSP Directive

page, include, taglib

  1. page Directive : 컨테이너에게 현재 JSP 페이지를 어떻게 처리할 것인가에 대한 정보를 제공
  2. include Directive : 특정 jsp file을 페이지에 포함, 여러 jsp페이지에서 반복적으로 사용되는 부분을 jsp file로 만든 후 반복 영역에 include 시켜 반복되는 코드를 줄일 수 있음
  3. taglib Directive : JSTL 또는 사용자에 의해서 만든 커스텀 태그를 이용할 때 사용됨, JSP 페이지 내에 불필요한 자바 코드를 줄일 수 있음


JSP 지시자 (Directive) - page

속성기본값설명
languagejava스크립트에서 사용할 언어 지정
info현재 jsp 페이지에 대한 설명
contentTypetext/html;charset=ISO-8859-1브라우저로 내보내는 내용의 MIME 형식 지정 및 문자 집합 지정
pageEncodingISO-8859-1현재 JSP 페이지 문자집합 지정
import현재 JSP 페이지에서 사용할 Java 패키지나 클래스를 지정
sessiontrue세션의 사용 유무 설정
errorPage에러가 발생할 때에 대신 처리될 JSP 페이지 지정
isErrorPagefalse현재 JSP 페이지가 에러 핸들링하는 페이지인지 지정하는 요소
buffer8KB버퍼의 크기
autoflushtrue버퍼의 내용을 자동으로 브라우저로 보낼지에 대한 설정
isThreadsafeture현재 JSP 페이지가 멀티 쓰레드로 동작해도 안전한지 여부를 설정하는 것으로 false인 경우 JSP 페이지는 SingleThread로 서비스 된다
extendsjavax.servlet.jsp.HttpJspPage현재 JSP페이지를 기본적인 클래스가 아닌 다른 클래스로부터 상속하도록 변경

4. JSP 기본객체

JSP 기본객체

JSP 기본객체의 영역 (scope)

JSP 기본객체의 영역 (scope) - 공통 method

web page 이동 : forward(request, response), sendRedirect(location)



✅ JSP 기본객체
기본객체명 : 설명
request : HTML 폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용
response : 사용자 요청에 대한 응답을 처리하기 위해 사용
pageContext : 각종 기본 객체를 얻거나 forward 및 include 기능을 활용할 때 사용
session : 클라이언트에 대한 세션 정보를 처리하기 위해 사용, page directive의 session 속성을 false로 하면 내장 객체는 생성이 안된다.
application : 웹 서버의 애플리케이션 처리와 관련된 정보를 레퍼런스하기 위해 사용
out : 사용자에게 전달하기 위한 output스트림을 처리할 때 사용
config : 현재 JSP에 대한 초기화 환경을 처리하기 위해 사용
page : 현재 JSP 페이지에 대한 참조 변수에 해당됨
exception : Error를 처리하는 JSP에서 isErrorPage속성을 true로 설정하면 exception 내장 객체를 사용할 수 있고 기본은 false로 설정되어 있다. 전달된 오류 정보를 담고 있는 내장 객체

✅ JSP 기본객체의 영역 (Scope)

  • pageContext

    • 하나의 jsp페이지를 처리할 때 사용되는 영역
    • 한번의 클라이언트 요청에 대하여 하나의 JSP 페이지가 호출되며, 이때 단 한 개의 page 객체만 대응이 된다.
    • 페이지 영역에 저장한 값은 페이지를 벗어나면 사라진다.
    • 커스텀 태그에서 새로운 변수를 추가할 때 사용한다.
  • request

    • 하나의 HTTP 요청을 처리할 때 사용되는 영역
    • 웹 브라우저가 요청을 할 때마다 새로운 request 객체가 생성됨
    • request영역에 저장한 속성은 그 요청에 대한 응답이 완료되면 사라진다.
  • sessioin

    • 하나의 웹 브라우저와 관련된 영역
    • 같은 웹브라우저 내에서 요청되는 페이지들은 같은 session들을 공유하게 됨
    • 로그인 정보 등을 저장한다.
  • application
    - 하나의 웹 어플리케이션과 관련된 영역
    - 웹 어플리케이션당 1개의 application 객체가 생성됨
    - 같은 웹 어플리케이션에서 요청되는 페이지들은 같은 application 객체를 공유함

✅ JSP 기본객체의 영역 (Scope) - 공통 method
servlet과 jsp페이지 간에 특정 정보를 주고 받거나 공유하기 위한 메소드를 지원

  • void setAttribute(String name, Object value) : 문자열 name이름으로 Object형 데이터를 저장한다. Object형이므로 어떠한 Java 객체도 저장이 가능하다.
  • Object getAttribute(String name) : 문자열 name에 해당하는 속성 값이 있다면 Object형태로 가져오고 없으면 null을 리턴한다. 리턴 값에 대한 적절한 형변환이 필요함
  • Enumeration getAttributeNames() : 현재 객체에 저장된 속성들의 이름들을 Enumeration 형태로 가져온다.
  • void removeAttribute(String name) : 문자열 name에 해당하는 속성을 삭제한다.

✅ Web Page 이동

  • forward(request, response)
    • RequestDispatcher dispatcher = request.getRequestDispatcher(path);
      dispatcher.forward(request,response);
    • 동일 서버(project) 내 경로
    • 기존 URL 유지 (실제 이동되는 주소 확인 불가)
    • 기존의 request와 response가 그대로 전달
    • 비교적 빠름
    • request의 setAttribute(name,value)를 통해 전달

  • sendRedirect(location)
    • response.sendRedirect(location);
    • 동일 서버 포함 타 URL 가능
    • 이동하는 page로 변경
    • 기존의 request와 response는 소멸되고, 새로운 request와 response가 생성
    • forward()에 비해 느림
    • request로는 data 저장 불가능, session 이나 쿠키 이용

post-custom-banner

0개의 댓글