2021. 05. 18(화) TIL

Dylan·2021년 5월 18일
post-thumbnail

JSP

JSP 구성요소

디렉티브

  • JSP페이지에 대한 설정 정보를 정의한다.

page 디렉티브

  <%@ page 속성="속성값" />
  <%-- jsp페이지에 대한 정보를 설정한다. -->
  • page 디렉티브의 주요 속성
    • 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" %>
    • trimDirectiveWhiteSpace
      • 디렉티브 정의로 발생되는 빈줄을 삭제할지 여부를 설정
      • 설정예)
        <% page trimDirectiveWhiteSpace="true" %>

include 디렉티브

  <%@ include file="현재페이지에 포함시킬 jsp파일의 경로와 이름" />
  • JSP 페이지에 다른 jsp페이지를 포함시킨다.
  • include 디렉티브의 주요 속성
    • file
      • 현재 페이지에 포함시킬 jsp파일의 경로와 이름을 지정한다.
      • 설정예)
        <%@ include file="common/header.jsp" %>

taglib 디렉티브

  <%@ taglib prefix="속성값" uri="속성값" />
  • JSP 페이지에서 사용할 커스텀 태그 라이브러리나 JSP표준태그 라이브러리를 정의한다.
  • taglib 디렉티브의 주요 속성
    • 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메소드내에 포함되는 코드를 작성할 수 있게 한다.
  • 사용예)
  <%
    int x = 10;
    EmployeeService service = new EmployeeService();
    
    // 접근제한자를 가지는 변수를 정의할 수 없다.
    private int y = 10;	// 오류
    
    // 메소드를 정의할 수 없다.
    private void log(Employee emp) {
      System.out.println(emp.getName());
    }
  %>

표현식

  <태그><%=값 %></태그>
  <태그><%=값을 반환하는 메소드 %></태그>
  • 응답컨텐츠에 포함되어서 클라이언트로 전송되게 한다.
  • 변수에 저장된 값이나, 메소드의 실행결과로 획득되는 반환값을 표현식에서 사용할 수 있다.
  • 사용예)
  <% 
    int empNo = 100;
    EmployeeService employeeService = EmployeeService.getInstance();
    Employee emp = employeeService.getEmployeeDetailInfo(empNo);
  %>
  <table>
    <tr>
      <th>직원이름</th><td><%=emp.getName() %></td>
      <th>소속부서번호</th><td><a href="dept.jsp?deptno=<%=emp.getDeptNo() %>"><%=emp.getDeptNo() %></a></td>
      <th>전화번호</th><td><input type="text" value="<%=emp.getTel() %>" /></td>
    </tr>
  </table>

선언식

  <%!
    private DecimalFormat df = new DecimalFormat("##,###");
    private String numberToCurrency(long number) {
      return df.format(number);
    }
  %>
  • JSP페이지에 새로운 필드나 새로운 메소드를 정의(선언)할 때 사용한다.
  • 사용빈도는 그렇게 높지 않다.

주석

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

JSP의 내장객체

  • JSP 페이지가 자바로 변환될 때 _jspService메소드에서 사용가능한 객체
  • JSP는 웹 애플리케이션 개발에 필요한 객체를 미리 생성(획득)해서 적절한 변수에 저장하고, 스크립트릿에서 사용가능한 상태로 초기화시켜놓는다.
변수명클래스명설명
requestHttpServletRequest클라이언트가 보낸 요청메세지 정보를 저장한다.
responseHttpServletResponse클라이언트로 보낼 응답메세지 정보를 저장한다.
sessionHttpSession세션정보를 저장한다.(로그인처리와 관련)
outJspWriter응답컨텐츠를 클라이언트로 출력하는 스트림
applicationServletContext웹 애플리케이션을 나타내는 객체다..
configServletConfig서블릿의 초기화에 필요한 정보를 저장한다.
pageContextPageContextJSP 페이지에 대한 정보를 저장한다.
exceptionThrowable에러정보를 저장한다.(isErrorPage="true")에서만 사용가능
pageObjectJSP 페이지를 구현한 자바객체가 저장된다.

HttpServletRequest

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

HttpServletResponse

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

HttpSession

  • session 변수에 저장된다.
  • 클라이언트별로 고유하게 사용되는 객체다.
  • 고유한 아이디를 가지고 있다.
  • 클라이언트가 처음 접속할 때 자동 생성되고, 생성된 HttpSession객체의 아이디가 응답으로 클라이언트에게 보내진다.
  • 세션아이디를 전달받은 클라이언트는 요청할 때 마다 세션아이디를 요청헤더에 담아서 서버로 전송한다.
  • 서버는 요청헤더의 세션아이디를 조회해서 그 아이디에 해당하는 세션객체를 실행되는 JSP의 sessioin변수에 저장한다.
  • 용도
    • 클라이언트의 정보를 보관하기
      • 클라이언트별로 각각 다른 세션객체를 사용하기 때문에
      • 로그인한 사용자정보, 장바구니정보, 최근 본 상품정보 (클라이언트의 private한 정보)
    • 클라이언트의 상태 유지
      • 접속한 클라이언트를 식별해서(누군지 안다.)
      • 해당 클라이언트에게 적절한 응답을 제공할 수 있다.
  • 주요 메소드
반환타입메소드명설명
voidsetAttribute(String name, Object value)세션객체에 이름,객체 쌍의 속성(객체)을 저장한다.
ObjectgetAttribute(String name)세션객체에서 지정된 이름으로 저장된 속성(객체)를 반환한다.
지정된 이름의 속성이 존재하지 않으면 null을 반환한다.
voidremoveAttribute(String name)세션객체에서 지정된 이름으로 저장된 속성(객체)을 삭제하다.
voidinvalidate()세션객체를 무효화시킨다.
로그아웃 요청시 실행한다
voidsetMaxInactiveInterval(int second)세션객체의 최대 비활성화 시간을 초단위로 설정한다
지정된 시간동안 세션객체에 대한 엑세스가 없으면 세션객체는 무효화된다
StringgetId()세션객체의 고유한 아이디를 반환한다

<%-- 
	contentType
		클라이언트로 보내는 응답 컨텐츠의 변환방식(인코딩방식)을 지정한다.
		charset=UTF-8 혹은 charset=EUC-KR 일 때만 한글 컨텐츠를 제대로 보낼 수 있다.
	pageEncoding
		jsp파일을 저장할 때 텍스트의 변환방식을 지정한다.
		UTF-8 혹은 EUC-KR일 때만 한글이 포함된 텍스트를 저장할 수 있다.
--%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Hello</title>
	</head>
	<body>
		<%--
			선언식
				- 객체의 멤버변수, 정적변수, 멤버메소드, 정적메소드를 정의할 때 사용한다.
				- 변수나 메소드에 접근제한자를 앞에 붙일 수 있다.
		--%>
		<%!
			// 멤버변수, 정적변수의 선언을 권장하지 않음!!!!! 하지마. 절대로 네버
			private int x = 0;
		
			/*
			// 멤버변수 선언
			private int count;
			
			// 멤버메소드 선언
			public int getCount() {
				return count;
			} 
			*/
		%>
		<%--
			스크립틀릿 : <%  자바코드 작성영역을 만든다.  %>
				변수의 선언, 변수의 초기화, 객체 생성, 제어문, 반복문, 메소드 호출 등이 가능하다.
				스크립틀릿안에서 주석은 자바의 주석을 사용한다.
				스크립트릿안에서 작성한 자바코드는 jsp를 java로 변환했을 때
				전부 _jspService(req, res) 메소드 안에 포함된다.
		 --%>
		<% 
			// 변수 선언하기
			int y = 0;
		
			// 변수 선언하기
			String name = "영업팀";
			/*
				객체 생성 및 메소드 실행도 가능하다.
			*/
			// 영업팀의 1 ~ 6월까지 매출현황
			int[] sales = {1000000, 2000000, 32000000, 540000, 400000, 12000000};
			int totalSales = 0;
			
			for (int amount : sales) {
				totalSales += amount;
			}
			
			// 멤버변수x와 지역변수y의 값을 1씩 증가시키기
			x++;
			y++;
			
		%>
	
		<h1>Hello, JSP!</h1>
		
		<h3><%= name %> 부서 전반기 매출현황</h3>
		<dl>
			<dt>부서명</dt><dd><%= name %> 부서</dd>
			<dt>총 매출금액</dt><dd><%= totalSales %> 원</dd>
		</dl>
		
		<h3>멤버변수와 지역변수의 값 출력해보기</h3>
		<dl>
			<dt>멤버변수</dt><dd><%= x %></dd>
			<dt>지역변수</dt><dd><%= y %></dd>
		</dl>
	</body>
</html>

0개의 댓글