[Servlet&JSP] Chap 4. JSP 기본 정보 및 Elements 표기법(태그)

김승현·2021년 11월 27일
0
post-custom-banner

JSP

  • 동적인 웹 페이지를 Java언어를 이용하여 html 기반으로 작성할 수 있는 기술
  • Servlet은 수정시 재 컴파일(서버 리부팅)을 해야 하지만 jsp는 동적으로 컴파일 하기 때문에 서버 리부팅 할 필요 없이 유연성있게 작업이 가능
  • 기존 Servlet은 자바 언어가 "주" 언어로 활용 하지만 JSP는 "주" 언어가 html 이라고 보면 됨 (HTML이 주 이지만 자바 언어를 쓸 수 있음)




JSP의 특징

  • JSP 파일이 변경 되어도 서버를 리부트 할 필요가 없음
    • JSP 파일이 변경될 때마다, 컨테이너는 자동으로 translation, compile, load, initialization 과정을 수행 (즉, 자동으로 매 요청시 마다 컴파일 작성 및 실행 수행)
  • JSP 파일의 배포 환경(위치)은 HTML 폴더와 동일함
    • WEB_ROOT 폴더 하단에 위치 (ex. WebContent)




JSP의 실행 순서

  1. Client가 jsp 파일을 요청 (ex. http://localhost:8085/web1/jsp/xx.jsp)
  2. JSP Container가 XX.jsp 파일을 XX_jsp.java 파일로 변환
    (JSP 안에는 자바 코드가 있으므로 Java 코드로 변환 해야함)
    (이때, JSP 코드는 서블릿 코드로 변경 됨)
  3. XX_jsp.java 파일을 다시 XX_jsp.class 파일로 컴파일
    (자바머신이 사용하기 위한 바이트코드)
  4. Servlet Container가 XX_jsp.class 파일의 코드를 실행
  5. 실행의 결과를 view 전용 jsp 파일을 이용하여 응답해줌




JSP Elements 표기법

태그작성 방법내용
주석문 태그 (Comment tag)<%-- 내용 --%>- 내용 그대로 주석
지시자 태그 (Directive tag)<%@ 내용 %>- 페이지에 대한 설정 (아래에서 추가 설명)
표현식 태그 (Expression tag)<%= 출력내용 %>- jsp에서 사용되는 자바코드를 동작시키고 출력
- out.print 처럼 동작
- 표현 태그에서는 ;(세미콜론)은 붙이지 않음
스크립트릿 태그 (Scriptlet tag)<% Java 코드 %>- _jspService 메소드의 로컬변수와 자바코드를 작성할때 사용
선언문 태그(Declaration tag)<%! 내용 %>- Servlet Class의 멤버변수/멤버메소드를 선언할때 사용




주석

  • JSP 페이지에서 사용하는 HTML, JSP , Java 주석

  • HTML 주석

    • 화면상에는 보이지 않지만, 페이지 소스 보기를 통하여 볼 수 있다.
      ex) <!-- HTML 주석 -->
  • JSP 주석

    • 화면상에도 보이지 않고, 페이지 소스 보기를 통해서도 볼 수 없다.
    • Servlet 코드에서도 주석은 포함하지 않는다. 오로지 JSP 파일에서만 볼 수 있다.
      ex) <%-- JSP 주석 태그 --%>
  • Java 주석

    • 화면상에도 보이지 않고, 페이지 소스 보기를 통해서도 볼 수 없다.
    • Servlet 코드에서는 주석으로 포함되어 보인다.
      ex) <% //Java 주석 %>




JSP 지시자 태그

  • JSP page 전체에 영향을 미치는 정보를 기술할 때 사용

page 지시자 태그

  • jsp 페이지에 대한 설정 정보를 컨테이너에게 알려주는 지시자
  • 여러개의 page 구문을 사용할 수 있지만, import 속성을 제외하고는 한 페이지에 한 번씩만 선언할 수 있음
  • page 지시자는 JSP 파일의 어느 위치에 와도 상관 없으나 가장 첫 부분에 사용하는 것을 권장
  • import나 page의 타입(contentType), 사용 언어 (language) 등 페이지에 대한 정보를 기입
    • ex)
      <%@ page import="java.io.*" %>
      <%@ page contentType="text/html; charset=UTF-8">

jsp Exception 처리

  • JSP 페이지에서 발생하는 Exception을 처리하기 위해서는 별도의 예외 처리 페이지를 지정

  • 하나의 JSP 페이지에 대한 예외 처리 페이지는 하나만 지정할 수 있기 때문에 예외마다 다른 예외 처리는 불가능

  • errorPage 와 isErrorPage를 활용해서 에러페이지로 연결시킬 수 있음

    • errorPage : 에러가 발생 할 수 있는 page에 작성
      <%@ page errorPage="/error/exceptionPage.jsp" %>

    • isErrorPage : 에러메시지를 보내주는 page에 작성
      <%@ page isErrorPage="true" %>


EX) 예외 발생 할 수 있는 page

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!-- 에러 발생시 예외 처리 페이지 지정 -->
<%@ page errorPage="/views/commons/error/error.jsp"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		// 넘어 오는 값의 name 설정(data->inputData) 오류로 인해 Exception 발생
		String inputData = request.getParameter("inputData");
	%>

	전송한 데이터의 길이는
	<%=inputData.length()%>
	글자입니다.

</body>
</html>

EX) 에러메시지를 보여주는 page

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!-- 예외 처리 페이지 설정 -->
<%@ page isErrorPage="true"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>페이지에서 문제가 발생하였습니다. - 지속적인 문제 발생시 관리자에게 문의해주세요 -</h1>
	<a href="/index.html">메인 페이지로 이동</a>
</body>
</html>

import

  • 변환된 서블릿 클래스에 필요한 자바 클래스의 import 문을 정의함
  • java.lang, javax.servlet, javax.servlet.http, java.servlet.jsp 는 기본적으로 import 되어 있음
  • 추가적인 import가 필요할 경우에 추가로 사용할 수 있음
    ex) <%@ page import="java.util.Calendar, java.util.Date" %>

include 지시자

  • 페이지 내부에 다른 jsp 페이지를 불러오는 지시자
  • include 지시자 태그를 사용하면 다른 페이지(JSP,HTML)를 포함할 수 있음
    ex) <%@ include file="footer.html" %>

EX) 불러올 페이지(footer.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<style>
	#footer {
			width: 100%;
			height: 15%;
			background-color: ligthgreen;
			text-align: center;
		}
	</style>
	
	<div id="footer">
		이용약관 개인정보처리방침 책임의 한계와 법적고지 사전 고객센터 콘텐츠 수정 및 오류 신고 - 클릭N클린
		</div>
</body>
</html>

EX) include 지시자

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<style>
		* {
			box-sizing: border-box;
		}

		#wrapper {
			margin: 0 auto;
			border: 1px solid red;
			width:800px;
			height:800px;
		}

		#header {
			width: 100%;
			height: 25%;
			background-color: yellow;
		}

		#container {
			width: 100%;
			height: 60%;
			background-color: skyblue;
		}

		#footer {
			width: 100%;
			height: 15%;
			background-color: ligthgreen;
			text-align: center;
		}
		
	</style>

	<div id="wrapper">
		<div id="header"></div>
		<div id="container"></div>
		<div id="footer">
			<%@ include file="/views/commons/footer/footer.jsp" %>
		</div>
	</div>

</body>
</html>




JSP 표현식 태그

  • Servlet 코드에서 out.print()의 역할을 수행
  • ex ) 현재 시간은 <%= new java.util.Date() %> 입니다.
  • 표현 태그에서는 ';'을 붙이지 않음




JSP 스크립트릿 태그

  • _jspService 메소드의 로컬변수와 자바코드를 작성할 때 사용
  • 로컬변수 선언
<% int i=0; %>
  • 자바코드 내용 기술
<% if(i>10) { %>
i가 10보다 큽니다.
<% }else { %>
i가 10보다 작습니다.
<% } %>
  • <%! %> 로 선언 -> 전역 변수
  • <%! %> 로 선언하면 모든 메소드에서 사용 가능 <% %>는 안됨




JSP 선언문 태그

  • Servlet 클래스의 멤버변수/메소드에 해당하는 코드를 작성할 때 사용

  • 사용시 <%! %> 로 사용

  • 멤버변수 선언

<%! public static final String DEFAULT_NAME="홍길동"; %>
<%! int counter=0; %>
  • 멤버 메소드 선언
<%!
public String getName(HttpServletRequest request) {
	return request.getParameter("name");
}
%>
profile
개발자로 매일 한 걸음
post-custom-banner

0개의 댓글