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의 주석 역할로
브라우저 화면에는 출력하지 않는다. - 페이지 소스에 존재한다.
- 서블릿으로 변환되어 결과가 화면에 전달되지만, 브라우저 문서 구조를 나타내는 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
