[JSP/Servlet]JSP 기본요소

Hello_Wendy·2022년 5월 12일
0

JSP/Servlet

목록 보기
2/3
post-thumbnail

JSP의 4가지 기본 요소

🎃 1. JSP 주석

<언어별 주석의 형태>

▶ 1. HTML 주석

<!-- HTML주석입니다 -->

  • 브라우저의 결과에 영향을 미치지 않음
  • 브라우저 소스 보기 기능으로 확인 가능(클라이언트의 브라우저에 전송되는 HTML 문서에는 포함되어 전송)

▶ 2. JSP 주석

<%-- JSP주석입니다 --%>

  • JSP 주석은 숨겨진 주석(Hidden Comment)으로 JSP 파일내에서 완전히 무시되어 처리되므로 서버 상에서 컴파일 되지 않으며 클라이언트에 전송되지도 않음
  • 브라우저의 소스 보기 기능으로 확인 불가(원본 JSP 파일을 통해서만 확인 가능)

▶ 3. 자바 스타일 주석

<%
/* 여러 줄을 사용할 때의
자바주석입니다 */
%>

<%
//한줄을 사용할 때의 자바주석입니다
%>

  • 서버상에서 JSP 파일의 컴파일 시에 자바 자체에서 주석으로 처리함
  • 선언문(Declaration)이나 스크립틀릿(Scriptlet)에서만 사용
  • 클라이언트에 전송되지 않으므로 브라우저의 소스 보기 기능으로 확인 불가

🍩 2. JSP 지시어(Directive)

  • <%@ ... %> 와 같은 형식으로 표현되며, JSP를 실행할 컨테이너에서 해당 페이지를 어떻게 처리할 것인가에 대한 설정 정보들을 지정해주는데 사용

  • <page 지시어> <include 지시어> <taglib 지시어> 3가지로 나누어짐

▶ 1. page 지시어

<% page 속성1="값1" 속성2="값2" 속성3="값3"...%>

  • JSP 페이지에 대한 속성을 지정하는 지시어
  • import 속성을 제외한 나머지 속성은 하나의 페이지에 한 번씩만 지정가능
속성사용법기본값설명
languagelanguage="java"java스크립트 요소에서 사용할 언어 설정
extendsextends="클래스명"없음상속받을 클래스를 설정
importimport="패키지.클래스명"없음import할 패키지.클래스 설정
sessionsession="true"trueHttpSession 사용 여부를 설정
bufferbuffer="16kb"8kbJSP 페이지의 출력 버퍼 크기를 설정
autoFlushautoFlush="true"true출력 버퍼가 다 찼을 경우 처리 방법을 설정
isThreadSafeisThreadSafe="true"true다중 스레드의 동시 실행 여부를 설정
infoinfo="페이지 설명"없음페이지 설명
errorPageerrorPage="에러 페이지.jsp없음에러 페이지로 사용할 페이지를 지정
contentTypecontentType="text/html"text/html;charset=IOS-8859-1JSP 페이지가 생설할 문서의 타입을 지정
isErrorPageisErrorPage="false"false현재 페이지를 에러 페이지로 지정
pageEncodingpageEncoding="euc-kr"ISO-8859-1현재 페이지의 문서 인코딩 타입 설정

1-1. language 속성

<%@ page language = "java" %>

  • JSP 파일 내에서 사용될 스크립트 언어를 지정하는 속성
  • 특별히 지정하지 않을 경우 JSP 컨테이너가 지원하는 기본 언어인 자바가 language 기본 속성으로 지정

1-2. extends 속성

<%@ page extends = "javax.servlet.jsp.HttpJspBase" %>

  • 서블릿 클래스로 변환되는 과정에서 상속할 부모 클래스를 지정하는 속성
  • 기본적으로 상속은 JSP 컨테이너에서 자체적으로 알아서 처리하기 때문에 개발자가 특별히 지정하는 경우는 거의 없음
  • 자바는 다중 상속을 허용하지 않기 때문에 JSP 컨테이너에서 상속받게 되는 클래스인 <javax.servlet.jsp.HttpPage> 또는 <javax.servlet.jsp.JspBase> 인터페이스를 구현한 클래스를 상속받아야 함

1-3. import 속성

<%@ page import = "java.io*, java.util.ArrayList" %>

  • JSP 페이지 내에서 사용할 패키지 또는 클래스를 import 하는데 사용
  • 쉼표를 사용해 여러개의 패키지 또는 클래스를 한번에 import 가능
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>

<!--<h1>SimpleDateFormat을 사용하기 위해서 java.text.SimpleDateFormat 클래스를 import-->
<%@page import="java.text.SimpleDateFormat"%>
<!-- <h1>에서 Date 클래스를 사용하기 위해 java.util.*를 import. import 순서는 상관없음-->
<%@page import="java.util.*"%>

<html>
<head>
<meta http-equiv="Contetent-Type" content="text/html;  charset=UTF-8">
<title>import 속성 테스트</title>
</head>
<body>
	<h1>
	<!-- Date클래스의 생성자를 사용해 Date 객체를 생성하고 SimpleDate Format 클래스의 format 메소드를 사용해서 표시 -->
		현재 시간은 <%=new SimpleDateFormat().format(new Date())%> 입니다 
	</h1>
</body>
</html>

1-4. session 속성

<%@ page session = "true" %>

  • 동일한 클라이언트에 대해 정보를 유지할 필요가 있는 경우(ex.로그인 상태를 유지) 다른 클라이언트와 현재 정보가 유지되어야 할 클라이언트를 구별할 방법으로 세션관리라고 하며, 정보 유지를 위해 만들어진 가상의 커넥션(Virtual Connection)을 HTTP세션이라고 함
  • JSP에서 이러한 세션을 사용할 수 있도록 하는 설정

1-5. buffer 속성

<%@ page buffer = "16kb" %>

  • JSP 페이지가 서블릿으로 변환되어 응답을 생성해 클라이언트에 전송할 때 사용되는 버퍼의 크기를 지정하는 속성
  • 기본적으로 "8kb" 설정이며, "none"으로 설정할 경우 버퍼를 사용하지 않고 바로 클라이언트에 응답을 전송함

1-6. autoFlush 속성

<%@ page autoFlush = "true" %>

  • buffer 속성에서 지정한 버퍼가 다 채워졌을 경우 어떻게 처리할 것인지 JSP 컨테이너에게 알려주는 속성
  • 기본값은 "true"로, 버퍼가 다 채워지면 클라이언트에 전송하고 버퍼를 비움

1-7. isThreadSafe 속성

<%@ page isThreadSafe = "true" %>

  • JSP는 기본적으로 다중 스레드(Multiple Thread)를 기반으로 실행되는데, 다중 스레드의 동시 실행을 허용하지 않고, 순서대로 요청을 처리하기 위해 설정
    (ex.데이터베이스에 기록할 때 나와 다른 사람이 동시에 다른 내용을 기록하면 내용 에러 발생 → 나의 작업이 끝나기 전에 다른 작업 못하게 막음)

1-8. info 속성

<%@ page info = "이 페이지는 이클립스로 만들어진 페이지 입니다." %>

  • 해당 페이지 전체에 대한 주석 역할하는 속성

1-9. errorPage 속성

<%@ page errorPage = "error/errer.jsp" %>

  • JSP 페이지 처리과정 중 예외 발생 했을 때 해당 페이지에서 직접 처리하지 않고, 에러 페이지를 지정해 지정된 에러페이지에서 예외를 처리하도록 할 때 사용하는 속성
  • 단, 같은 작업 폴더에 있어야 함

1-10. contentType 속성

<%@ page contentType = "text/html" %>

  • JSP 페이지가 전송할 응답의 형태가 어떤 MINE(Multipurpose Internet Mail Extension) 형식으로 되어 있는지 지정하는 속성
  • 앞에 대분류를 지정하고 "/" 뒤에 소분류를 지정

<%@ page contentType = "text/html;charset=euc-kr"%>

문자셋(character set)의 인코딩 방식을 사용해 추가 가능

1-11. isErrorPage 속성

<%@ page isErrorPage = "true" %>

  • 현재 페이지가 다른 페이지에서 발생한 예외를 처리할 페이지일 때 지정하는 속성

1-12. pageEncoding 속성

<%@ page pageEncoding = "euc-kr" %>

  • JSP 페이지의 문자셋 인코딩 방식을 지정할 때 사용하는 속성
  • 한글 지정 방식 : "euc-kr", "UTF-8"

문자셋은 보통 지시자 영역에서 contentType 속성을 지정할 때 한 번에 지정해서 사용
<%@ page contentType = "text/html; charset = euc-kr" %>

▶ 2. include 지시어

<%@ include file = "header.jsp" %>

  • 특정한 JSP파일 또는 HTML 파일을 해당 JSP 페이지에 삽입할 수 있도록 하는 기능을 제공하는 지시어
  • include 지시어는 중첩사용이 가능하고, 작성 위치에 영향을 받음
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 테스트</title>
</head>
<body>
<!-- include 는 위치와 갯수에 영향을 받음 -->
	<%@ include file="header.jsp"%> <!-- footer 밑에 작성하면 footer 밑으로 위치됨 -->
		<h1>includeTest.jsp 파일입니다</h1>
	<%@ include file="footer.jsp"%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>header.jsp 파일의 내용이 들어가는 곳입니다</h3>
<hr>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr>
<h3>footer.jsp 파일의 내용이 들어가는 곳입니다</h3>
</body>
</html>

▶ taglib 지시어

  • JSTL(JSP Standard Tag Library)이나 커스텀 태그 등 태그 라이브러리를 JSP에서 사용할 때 접두사를 지정하기 위해 사용

🧸 3. JSP 스크립트 요소

  • JSP 스크립트 요소는 JSP 페이지 내에 자바의 코드를 삽입하기 위해 사용되며 선언문(Declaration), 스크립틀릿(Scriptlet), 표현식(Ecpression)의 3가지로 구분

▶ 선언문(Delaration)

  • JSP 페이지에서 자바 코드에서 말하는 멤버 변수와 메소드를 선언하기 위해 사용
  • 선언문을 통해 선언된 변수는 JSP 파일이 웹 컨테이너에 의해 컴파일 될 때 멤버변수로 인식되기 때문에 JSP페이지의 어느 위치에서도 해당 변수를 참조하는 것이 가능
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

	<%--선언부에 정의되어 있는 getStr()메소드를 호출하는 부분 --%>
    <h1><%=getStr() %></h1>
    <%--str변수 값을 생성하는 getStr()메소드를 정의하는 부분 --%>
    <%!
    private String getStr() {
    		str += " 테스트입니다.";
    		return str;
 	 }
    //str 변수가 선언되었기 때문에 jsp페이지 전체에서 인식됨
 	 private String str = "선언문";
 	 %>

▶ 스크립틀릿(Scriptlet)

  • HTML코드로 된 부분은 일반 HTML 파일처럼 그대로 사용하고 자바 코드로 이루어진 비즈니스 로직 부분은 <%..%>로 표현되는 스크립틀릿 태그를 사용하여 구분함으로써 out 객체를 사용하지 않고 쉽게 HTML 응답을 만들어냄
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.Calendar"%>
<!DOCTYPE html>
<%--스크립틀릿 부분에서 현재 시간과 분,, 값을 로컬변수에 할당하는 부분 --%>
<%
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
%>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv = "refresh" content = "1"> <%--html 태그 : 1초마다 업데이트  --%>
<title>Scriptlet Test</title>
</head>
<body>
<%--스크립틀릿 부분에서 구한 현재 시간 값들을 화면에 출력하는 부분 --%>
	<h1>
		현재 시간은
		<%=hour%><%=minute%><%=second%>초 입니다
	</h1>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar"%>
<%
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scriptlet Test2</title>
</head>
<body>
	<h1>
		현재시간
		<%=hour%><%=minute%><%=second%></h1>
	<%
	if (hour >= 12) {
	%>
	<h2>오후입니다</h2>
	<%
	} else {
	%>
	<h2>오전입니다</h2>
	<%
	}
	%>
</body>
</html>

▶ 표현식(Ecpression)

  • 선언문 또는 스크립틀릿 태그에서 선언된 변수값이나 메소드의 리턴값을 스크립틀릿 태그 외부에서 출력하기 위해 사용되는 방법
  • 표현식 태그(<%=...%>)내 구문 전체의 결과값은 JSP 파일이 파싱될 때 출력 객체의 print()메소드를 통해 자동으로 문자열(String) 형식으로 변환되어 출력
  • 하나의 표현식 태그 내의 구문 전체가 하나의 Print() 메소드의 괄호 안에 통째로 들어가므로 표현식 태그 내부에서는 세미콜론(;)을 사용해서는 안됨
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	
	<%--합을 구하는 sum()메소드 선언문 영역에 정의 --%>
<%!public int sum() {
		int total = 0;
		for (int i = 1; i <= 100; i++) {
			total += i;
		}
		return total;
	}%>
	
	<%--스크립틀릿 영역에서 아래와 같은 문장을 str이라는 변수에 할당 --%>
<%
String str = "1부터 100까지의 합";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Expression Test</title>
</head>
<body>
	<%--str 변수의 값과 sum() 메소드의 결과 값을 표현식을 이용해 출력 --%>
	<h2><%=str%><b><%=sum()%></b>입니다</h2>
	<br>
	<%--sum()메소드를 포함한 수식의 결과를 표현식을 사용해 출력 --%>
	<h2><%=str%>3을 곱하면 <b><%=sum() * 3%></b>이 됩니다</h2>
	<br>
	
	<h2><%=str%>1000으로 나누면 <b><%=sum() / 1000. %></b>가 됩니다</h2>
	<%--1000뒤에 . 을 붙이면 소수로 표현, 지우면 정수로 표현 --%>
</body>
</html>

profile
안녕 나의 새로운 세상

0개의 댓글