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 |