Home

Jeong-Yoon

16 Mar 2020

Web 01

JSP

  • JavaServer Page의 약자
  • HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹 어플리케이션 도구
  • JSP가 실행되면 자바 서블릿(Servlet) 으로 변환
  • JSP는 WAS(Web Application Server)에 의하여 서블릿 클래스로 변환하여 사용
  • 작성하기 위해 Scriptlet을 사용

[JSP 태그 종류] : HTML에 삽입하기 위한 방법(문법)

<% %> : JSP 스크립틀릿, Java 구문을 JSP에 삽입 <%= %> : JSP 표현식, Java 표현식을 문자열로 출력 <%! %> : JSP 선언문, 인스턴스 변수 및 메소드 선언 <%@ %> : JSP 지시자, JSP 자체 적용할 조건 설정

<%– –%>

  • JSP의 주석
  • 기본적으로는 HTML 문법을 따라가야 한다

JSP 주석 / HTML 주석

  • JSP 주석
    • 문서에 자바 코드가 삽입 -> 자바 실행 환경이 필요
    • 서블릿으로 변환되지 않아 페이지 소스에 존재하지 않는다.
  • HTML 주석
    • 서블릿으로 변환되어 결과가 화면에 전달되지만, 브라우저 문서 구조를 나타내는 HTML의 주석 역할로
      브라우저 화면에는 출력하지 않는다.
    • 페이지 소스에 존재한다.

JSP 표현식

	- 자바 구문을 작성하는 스크립틀릿과 출력(표현)하기 위한 방법이 분리
	- 구문은 구문 따로, 표현식은 표현식 따로 작성

정적 페이지 / 동적 페이지

정적 페이지

  • 서버 안에 미리 정의되어 있는 html 문서를 사용자에게 응답
  • 사용자의 입력에 따라 변하지 않는 html 문서

동적 페이지

  • 사용자에 맞는 HTML 문서를 생성하여 사용자에게 응답
  • 사용자의 입력에 따라 변하는 html 문서

include

directive include

  • 다른 파일을 삽입하여 JSP를 Java로 변환 후 컴파일 동작 한다.
    • 하나의 페이지라고 생각 (pageContext 동일)
    • 정적인 include를 사용하는 경우는 변하지 않는, 고정적인 문서를 포함시킬 때 활용
  • indexTest.jsp
    ...
    <%-- 	 <%= msg %> // JasperExcepton발생. --%> 
	<!-- include 전, 수행 전에는 msg 사용 불가. -->
	 <%@include file="directive.jsp" %>
	 <%= msg %>
     ${ directive } <!-- directive 라는 변수를 출력해라. -->
	 <%-- 위에 코드가 있다고 생각, pageContext 영역 같이 사용 --%>
	 <%-- directive.jsp 영역에 등록한 directive를 출력하라.(EL) --%>
    ...
  • directive.jsp
    ...
    <%
	    // 정적인 방식
	    String msg = "미리 포함된 directive.jsp의 msg...";

	    // pageContext 영역에 등록
    	pageContext.setAttribute("directive", "directive...");
	    // 영역에 "directive"라는 이름으로 "directive..."값을 저장
	    // int num = 10; 과 같이
	    // directive = "directive...";
	
	    // request 영역에 등록
	    request.setAttribute("directive", "directive...");
    %>
	<h2>정적 방식으로 삽입된 directive.jsp</h2>
    <!-- 
	파일을 삽입하는 형식이라면, 해당 주석이 보인다.
    -->
  • indexTest에서 directive는 pageContext.setAttribute(“directive”, “directive…”); 를 만나자마자
    directive.jsp 페이지를 indexTest에 가져다가 붙이는 것

action include

  • include 요청 시 실행 흐름을 옮겨가 해당 파일의 결과를 현 위치에 포함시킨다.
    • 서로 다른 페이지라고 생각, 단순히 실행 흐름을 잠시 옮겨간다.
    • 특정 데이터에 따라 동적으로 변화시킬 때 활용
  • indexTest.jsp
      ...
       <%--
       	include action (액션)
       	include 요청 시 실행 흐름을 옮겨가 해당 파일의 결과를 현 위치에 포함시킨다.
        --%>
        <h2>동적인 include</h2>
        <%-- 전달 파라미터 설정하지 않은 경우 --%> 
        <jsp:include page="action.jsp"/>
    	
         <%-- 파라미터 설정 (include 시 파라미터 전달, 페이지 이동) --%>
        <jsp:include page="action.jsp">
        	<jsp:param name="id" value="Action include"/>
        </jsp:include>
        ${ action }
    
  • action.jsp
      ...
      <%
      // pageContext 영역에 등록
      pageContext.setAttribute("action", "action...");
    
      // request 영역에 등록
      request.setAttribute("action", "action...");
      %>
      <h2>동적으로 수행하는 action.jsp</h2>
      <p>include 시 넘어온 파라미터 확인</p>
      <%-- <p>전달 파라미터: ${ id }</p>	<!-- 이렇게 하면 나오지 않음. --> --%>
      <p>전달 파라미터: ${ param.id }</p>
    
  • indexTest에서 action은 pageContext로 등록을 했어도 가져와서 붙이는 것이 아니라
    그 등록한 페이지(action)로 이동을 했다가 원 페이지(indexTest)로 돌아오는 것이다.

indexTest 실행 시 화면

  • 파라미터 추가 전
  • 파라미터 추가 후

indexTest 실행 시 페이지 소스


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	 <h2>정적인 include</h2>
 
	<!-- include 전, 수행 전에는 msg 사용 불가. -->
	 

	<h2>정적 방식으로 삽입된 directive.jsp</h2>
<!-- 
	파일을 삽입하는 형식이라면, 해당 주석이 보인다.
 -->
	 미리 포함된 directive.jsp의 msg...
	 directive... <!-- directive 라는 변수를 출력해라. -->
 
	 <hr>
	 
	  <h2>동적인 include</h2>
	  
	<h2>동적으로 수행하는 action.jsp</h2>

	  action...
</body>
</html>

Til next time,
Jeong-Yoon at 00:00

scribble