본문 바로가기
Web

JSP_JSP와 JSP 구성요소 및 내장객체

by 유서담 2024. 1. 5.

JSP

  • Java Server Pages
  • 동적 웹 컨텐츠를 응답으로 제공하는 웹 애플리케이션을 개발할 때 사용되는 자바의 웹 기술
    • 동적 웹 컨텐츠 예 : HTML, XML, JSON, 바이너리 파일
  • JSP는 HTML태그로 구성된 문서내에서 자바코딩이 가능한 파일
    • 자바코딩이 가능하기 때문에 DB Acess작업, 동적으로 태그를 생성하는 것도 가능
  • JSP를 사용해서 개발된 웹 애플리케이션을 실행하기 위해서는 웹 애플리케이션 서버가 필요하다
    • 대표적인 웹 애플리케이션 서버 : Tomcat, Jetty, Jboss, Weblogic, JEUS

 

 

Dynamic Web Project 구성

  src/main/java
    자바패키지 및 자바 클래스 정의
  src/main/webapp
    웹관련 리소스가 위치하는 폴더
  html, css, images, jsp등을 정의하거나 혹은 저장한다.
    (각각 파일마다 별도의 폴더를 만들어서 저장하는 것도 가능)
  META-INF폴더와 WEB-INF폴더는 클라이언트 접근이 차단된 폴더다.
    웹프로젝트와 관련된 설정파일들이 정의된다.
  WEB-INF/lib폴더는 웹프로젝트에서 사용되는 라이브러리 파일을 저장하는 폴더다.
    ibatis, jdbc driver, log4j 등의 jar파일을 저장함

 

 

JSP의 구성요소

 

디렉티브

<%@ jsp 페이지 설정정보 %> : JSP 페이지에 대한 설정정보를 정의

  <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
  <%@ include file="common/header.jsp" %>
  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

 

디렉티브의 종류

 

page 디렉티브

  <%@ page 속성="속성값" />
  <%-- jsp페이지에 대한 정보를 설정한다. -->

 

 

주요속성

contentType : 응답컨텐츠의 타입 및 인코딩방식을 설정

  <% page contentType="text/html; charset=utf-8" %>
  <% page contentType="text/xml; charset=utf-8" %>
  <% page contentType="application/json; charset=utf-8" %>
  <% page contentType="text/plain; charset=utf-8" %>

 

 

pageEncoding : jsp 파일을 저장할 때 사용할 인코딩 방식을 설정

  <%@ page pageEncoding="utf-8" %>

 

 

import : jsp파일에서 사용되는 클래스에 대한 import문 역할

  <%@ page import="java.util.List"%>
  <%@ page import="java.util.List,java.util.ArrayList"%>

 

 

errorPage : jsp파일을 실행 중 에러발생시 표시할 페이지를 지정

  <%@ page errorPage="serverError.jsp" %>

 

 

isErrorPage : 에러페이지로 사용되는 jsp페이지인지 여부를 설정

  <%@ page isErrorPage="true" %>

 

 

timeDirectiveWhiteSpace : 디렉티브 정의로 발생되는 빈줄을 삭제할지 여부를 설정

  <%@ page trimDirectiveWhiteSpace="true" %>

 

 

session : JSP 내장객체인 session의 사용여부를 설정 / 기본값은 true

  <%@ page session="false" %>
  <%-- JSP에서 HttpSession객체를 생성하지도 않고, 검색하지도 않는다.--%>

 

 

include 디렉티브

JSP페이지에 다른 jsp 페이지를 포함시킨다

  <%@ include file="현재페이지에 포함시킬 jsp파일의 경로와 이름" />

 

주요속성

file : 현재 페이지에 포함시킬 jsp파일의 경로와 이름을 지정

  <%@ include file="common/header.jsp" %>

 

 

tablib 디렉티브

JSP 페이지에서 사용할 커스텀 태그 라이브러리나 JSP표준태그 라이브러리를 정의

  <%@ taglib prefix="속성값" uri="속성값" />

 

 

주요속성

prefix : 태그 라이브러리 적용시 사용되는 별칭을 지정

  <%@ prefix="c" taglib="http://java.sun.com/jsp/jstl/core" %>
  <%@ prefix="fmt" taglib="http://java.sun.com/jsp/jstl/fmt" %>
  
  <c:out value="값" />
  <fmt:formatNumber value="값" />

 

 

uri : jsp페이지에서 사용할 태그 라이브러리 식별자를 정의

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  <%@ prefix="fmt" taglib="http://java.sun.com/jsp/jstl/fmt" %>

스크립트 요소

JSP에서 로직을 수행하거나, 변수의 값을 출력에 포함시키거나, 메소드를 정의하거나 할 때 사용

 

스크립틀릿

<% 자바코드 %> : JSP페이지에서 자바코드를 실행가능하게 한다 

( JSP가 자바파일로 변환될 때, _jspService 메소드내에 포함되는 코드를 작성할 수 있게 한다)

  <%
    BookService bookService = BookService.getInstance();
    List<Book> books = bookService.getAllBooks();
      
    for (Book book : books) {
      
    }
  %>

 

 

표현식

<%= 변수명 혹은 반환값이 있는 메소드 %> : 변수의 값, 메소드의 실행결과를 출력에 포함시킬 때 사용하는 JSP의 구성요소 (응답컨텐츠에 포함되어서 클라이언트로 전송)

  <%
    int bookNo = Integer.parseInt(request.getParameter("no"));
    BookService bookService = BookService.getInstance();
    Book book = bookService.getBookInfo(bookNo);
  %>
  <dl>
    <dt>제목</dt><dd><%=book.getTitle() %></dd>
    <dt>저자</dt><dd><%=book.getWrite() %></dd>
    <dt>쟝르</dt><dd><%=book.getGenre() %></dd>
    <dt>가격</dt><dd><%=book.getPrice() %></dd>
    <dt>재고량</dt><dd><%=book.getStock() %></dd>
    <dt>상태</dt><dd><%=book.getStatus() %></dd>
  </dl>

 

 

선언식

<%! 변수 선언 혹은 메소드 정의 %> : 스크립틀릿이나 표현식에서 사용가능한 메소드를 작성할 때 사용

  <%-- 스크립틀릿과 표현식에서 사용할 수 있는 메소드 정의 --%>
  <%!
    private DecimalFormat df = new DecimalFormat("##,###");
    private String numberToCurrency(long number) {
      return df.format(number);
    }
  %>
    
  <%-- 선언식에 정의한 메소드 사용하기 --%>
  <%
    int bookNo = Integer.parseInt(request.getParameter("no"));
    BookService bookService = BookService.getInstance();
    Book book = bookService.getBookInfo(bookNo);
      
    String currency = numerToCurrency(book.getPrice());
  %>
  <dl>
    <dt>제목</dt><dd><%=currency %> 원</dd>
  </dl>

 

 

주석

<%-- 주석문 --%> : JSP 페이지의 코드를 주석처리할 때 사용하는 JSP의 구성요소

  <%-- jsp 주석을 여기에 적는다. -->
    
  <%-- 아래의 모든 코드는 주석처리되어서 실행되지 않는다. --%>
  <%--
    int bookNo = Integer.parseInt(request.getParameter("no"));
    BookService bookService = BookService.getInstance();
    Book book = bookService.getBookInfo(bookNo);
  --%>

 

 

 

JSP의 내장객체

  • JSP 페이지가 자바로 변환될 때 _jspService 메소드에서 사용가능한 객체
  • JSP는 웹 애플리케이션 개발에 필요한 객체를 미리 생성해서 적절한 변수에 저장 및 스크립트릿에서 사용가능한 상태로 초기화
변수명 클래스명 설명
request HttpServletRequest 클라이언트가 보낸 요청메세지 정보를 저장
response HttpServletResponse 클라이언트로 보낼 응답메세지 정보를 저장
session HttpSession 세션정보를 저장(로그인처리와 관련)
out JspWriter 응답컨텐츠를 클라이언트로 출력하는 스트림
application ServletContext 웹 애플리케이션을 나타내는 객체
config ServletConfig 서블릿의 초기화에 필요한 정보를 저장
pageContext PageContext JSP 페이지에 대한 정보를 저장
exception Throwable 에러정보를 저장(isErrorPage="true")에서만 사용가능
page Object JSP 페에지를 구현한 자바객체가 저장

 

 

HttpServletRequest

  • request 변수에 저장
  • 클라이언트가 서버로 보낸 요청 메세지를 저장
  • 요청메세지정보를 획득할 수 있는 다양한 getXXX( ) 메소드를 제공
반환타입 메소드명 설명
String getParameter(String name) 지정된 이름의 요청파라미터 값을 반환
요청파라미터값이 없으면 null
String [ ] getParameterValues(String name) 지정된 이름의 모든 요청파라미터 값을 배열로 반환
요청파라미터값이 없으면 null
void setCharacterEncoding(String encoding) 요청파라미터 값을 지정된 인코딩 방식을 복원
void setAttribute(String name, Object value) 요청객체에 이름, 객체의 속성을 저장
Object getAttribute(String name) 요청객체에서 지정된 이름으로 저장된 속성 반환
지정된 이름의 속성이 존재하지 않으면 null
void removeAttribute(String name) 요청객체에서 지정된 이름으로 저장된 속성을 삭제
HttpSession getSession( ) 요청객체의 세션아이디에 해당하는 세션객체를 반환
세션아이디가 없으면 세션객체를 새로 생성 후 반환
세션아이디에 해당하는 세션객체가 없으면 새로 생성 후 반환 
HttpSession getSession(boolean create) create값을 true로 설정하면 위의 getSession( ) 메소드와 동일
create값을 false로 설정하면 세션아이디에 해당하는 세션객체가 있을 때만 세션객체 반환, 아니면 null
String getHeader(String name) 지정된 이름의 요청헤더값을 반환
String getRequestURI( ) 요청 URI 경로를 반환
String getContextPath( ) 현재 웹애플리케이션의 컨텍스트 경로를 반환
String getRemoteAddr( ) 요청을 보낸 클라이언트의 ip주소를 반환

 

 

HttpServletResponse

  • response 변수에 저장
  • 서버가 클라이언트로 보낼 응답 메세지를 책임
  • 응답메세지에 대한 다양한 정보를 설정할 수 있는 setXXX( ) 메소드를 제공
반환타입 메소드명 설명
void sendRedirect(String url) 지정된 url을 재요청하게 하는 응답을 보낸다
void setContentType(String type) 응답컨텐츠의 타입을 설정
void setStatus(int statuscode) HTTP 응답코드를 설정
void setHeader(String name, String value) 응답헤더값을 설정

 

 

HttpSession

  • session 변수에 저장
  • 클라이언트별로 고유하게 사용되는 객체
  • 고유한 아이디
  • 클라이언트가 처음 접속할 때 자동 생성 및 생성된 HttpSession 객체의 아이디가 응답으로 클라이언트에게 보내짐
  • 세션아이디를 전달받은 클라이언트는 요청할 때마다 세션아이디를 요청헤더에 담아서 서버로 전송
  • 서버는 요청헤더의 세션아이디를 조회해서 그 아이디에 해당하는 세션객체를 실행되는 JSP의 session 변수에 저장

 

HttpSession 용도

  • 클라이언트의 정보를 보관하기
    • 클라이언트별로 각각 다른 세선객체를 사용하기 때문에 로그인한 사용자정보, 장바구니 정보, 최근 본 상품정보(클라이언트의 private한 정보)
  • 클라이언트의 상태유지
    • 접속한 클라이언트를 식별해서 해당 클라이언트에게 적절한 응답을 제공할 수 있게 한다
반환타입 메소드명 설명
void setAttribute(String name, Object value) 세션객체에 이름, 객체의 속성을 저장
Object getAttribute(String name) 세션객체에서 지정된 이름으로 저장된 속성을 반환
지정된 이름의 속성이 없으면 null
void removeAttribute(String name) 세션객체에서 지정된 이름으로 저장된 속성을 삭제
void invalidate( ) 세션객체를 무효화
로그아웃 요청시 실행
void setMaxInactiveInterval(int second) 세션객체의 최대 비활성화 시간을 초단위로 설정
지정된 시간동안 세션객체에 대한 엑세스가 없으면 세션객체는 무효화
String getId( ) 세션객체의 고유한 아이디를 반환

 

'Web' 카테고리의 다른 글

프로젝트에서 톰캣설정  (0) 2024.01.26
JDBC 프로젝트 개발순서  (0) 2024.01.26
Web_Servlet  (0) 2024.01.15
Web_GET과 POST, MIME  (1) 2024.01.10
Web_웹 애플리케이션 개요  (1) 2024.01.03