[JSP] 프로젝트로 배우는 자바 웹 프로그래밍 5장 개념, 실습
JSP의 기본 코드 구성
<%@ page contentType = "text/html; charset=utf-8" import="java.util.Date"%>
<html>
<head>
<title> 문서 제목</title>
</head>
<body>
안녕하세요. <br>
<%
String bookTitle = "JSP 기초";
String author = "KJH";
Date da = new Date();
%>
<h5><%= bookTitle %></h5>(<%= author %>)입니다. <br>
현재 날짜와 시간은 : <%= da %>
</body>
</html>
주석
텍스트로 된 간단한 설명문을 넣는 것을 말한다.
C 언어를 비롯한 대부분의 프로그램 언어가 주석을 사용하기 위한 문법을 제공
HTML 주석 : 클라이언트로 전달되는 주석
<!--- 주석입니다. --->
JSP 주석 : 클라이언트로 전달되지 않는 주석
<%--- 주석 ---%>
지시어(Directives)란?
지시어는 jsp 파일의 속성을 기술하는 jsp문법
jsp 컨테이너에게 해당 페이지를 어떻게 처리해야 하는지 전달하기 위한 내용을 담고 있다.
지시어는 크게 page, include, taglib으로 나눌 수 있으며, 각각에서 다루는 속성
-------------------------------------- page 지시어 ---------------------------------------------------
page 지시어는 현재 jsp 페이지를 컨테이너에서 처리하는데 필요한 각종 속성을 기술하는 부분
보통 jsp 페이지 맨 앞에 위치함.
<%@ page 속성1="속성값1" 속성2="속성값2" ... %>
여러 줄에 나누어 작성할 수도 있음
<%@ page contentType="text/html;charset=UTF-8"
import="javax.sql.*, java.util.*" errorPage="error.jsp"%>
<%@ page import="java.util.*" %>
page 지시어와 jsp의 한글 처리
page 지시어에서 중요한 부분 중 하나는 한글 처리 부분임.
jsp 에서는 다음과 같이 3단계로 캐릭터셋을 설정함.
pageEncoding="UTF-8", contentType="text/html;chatsert=UTF-8"
1. import
import는 jsp 스크립트 부분에 자바 클래스를 사용하는 경우 해당 클래스의 패키지에
대한 import 설정으로 기본적으로 자바에서와 동일하다.
<%@ page import="java.sql.*,java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*, java.util.*" %>
2. session
세션은 웹 브라우저와 웹 서버가 지속적인 클라이언트 인식을 위해 필요한 정보를 임시로 저장
주로 웹 사이트에 로그인하거나 쇼핑몰에서 장바구니 등을 구현할 때 사용된다.
기본 값이 true(세션을 사용한다)이므로, 일부러 사용을 제한할 목적이 아니라면 별도로
설정하디 않아도 됨.
<%@ page session="true" %>
3. buffer
jsp 페이지 데이터를 출력하기 위한 jspWriter 즉 out 내장객체의 버퍼크기를 지정
기본값은 8kb 이고 jsp 페이지에 동적으로 많은 내용이 포함될 경우 버퍼 크기 조정이
필요할 수도 있으나 일반적으로는 변경하지 않아도 됨.
<%@ page buffer="8kb" %>
4. autoFlush
autoflush는 버퍼를 자동으로 비울 것인지를 지정하는 속성으로, 기본 값은 true이다.
<%@ page autoFlush="true" %>
5. isThreadSafe
기본적으로 서블릿은 스레드로 동작하기 때문에 스레드로 인한 동기화 문제를 해결하기
위한 옵션임.
기본값은 true로, 일반적으로 false로 설정하는 경우는 거의 없다.
<%@ page ifThreadSafe="true" %>
6. info
해당 jsp에 대한 간단한 설명으로 저작권이나 작성일 등 간단한 정보 기술에 사용
<%@ page info=“JSP Example" %>
7. errorPage, isErrorPage
두 속성은 jsp파일의 오류 처리를 위한 것으로 , errorPage는 현재 페이지에 오류 발생 시
호출할 페이지를 지정하는 속성이고 isErrorPage는 오류 처리를 위한 전용 페이지임을 알리는 속성
errorPage : 일반적인 jsp 파일에 사용
<%@ page errorPage=“오류_처리_파일.jsp” %>
isErrorPage : 오류 처리 파일에만 사용
<%@ page isErrorPage=“true” %>
8. contentType
현재 jsp 페이지를 클라이언트에서 처리하기 위한 콘텐츠 유형을 지정하는 부분
윈도우에서 파일 확장자(.doc, .hwp등)에 따라 연결 프로그램이 동작하는 것과 마찬가지로
웹 브라우저에서도 contentType에 따라 전달되는 내용을 어떻게 처리할지 결정할 수 있다.
<%@ page contentType=“text/html” %>
text/thml이 아니라 application/msword로 지정할 경우 브라우저는 서버가 전달되는 콘텐츠를
ms word문서로 인식해 처리할 것은 사용자에게 요청함
<%@ page contentType=“application/msword” %>
9. pageEncoding
pageEncoding은 컨테이너에서 처리할 jsp파일의 인코딩을 설정
<%@ page pageEncoding=“UTF-8” %>
******************************* 중요 ******************************
10. include 지시어
include 지시어는 현재 jsp파일에 다른 html이나 jsp문서를 포함하기 위한 기능을 제공
include 지시어는 다음 절에서 살펴볼 include 액션과 비슷한 기능을 한다.
<%@ include file=“포함할 파일_이름” %>
ex) 배너 화면 구성, 네이버 서비스, 뉴스캐스트, 쇼핑, ...
****************************(나중에 또 나옴)****************************
11. taglib 지시어
JSP 기능을 확장하기 위해 만들어진 커스텀 태그 라이브러리를 사용하기 위한 지시어
간단한 문법만 참조
<%@ㅇ taglib url="/META-INF/mytag.tld" prefix="mytag" %>
------------------------------------- 액션 ----------------------------------------
JSP 액션의 종류
JSP 액션은 JSP고유 기능으로 빈즈 클래스 연동 및 동적 페이지 관리를 위한 기능을 제공
<jsp:action_name attribute="value" /> 형태를 가짐
jsp 페이지간의 흐름 제어
자바 애플릿 지원
자바 빈즈 컴포넌트와 jsp 상호작용 지원
1. include 액션(중요)
<jsp:include page="포함할 파일_이름" />
include 지시사와 개념이 유사
include 지시어 - 해당 파일을 포함 후 컴파일
include 액션 - 실행 시점에서 해당 파일을 호출 하여 결과를 포함
[실습] include 지시어/ include 액션 사용하기
<%@ page contentType = "text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>main</title>
<link rel="stylesheet" href="05style.css">
</head>
<body>
<header>
<%@ include file="05top.jsp"%> // include 액션
</header>
<section>
<a>main</a>
</section>
<footer>
<jsp:include page="05footer.jsp" flush="false" /> // include 지시어
</footer>
</body>
</html>
2. forward 액션
include 액션과 사용법은 유사하지만 요청 파이지를 다른 페이지로 전환할 때 사용한다
response 내장객체의 sendRedirect() (6장내용) 와 유사 하지만 forward된 페이지에 파라미터를
전달할 수 있다는 점에 차이가 있다.
<jsp:forward page="포워딩할 파일_이름" />
[실습] forward 액션 사용하기
02forwardParamForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<h2>포워딩될 페이지에 파라미터값 전달 예제</h2>
<form method="post" action="02forwardParamTo.jsp">
<dl>
<dd>
<label for="name">이름</label>
<input id="name" name="name" type="text"
placeholder="홍길동" autofocus required>
</dd>
<dd>
<label for="color">색선택</label>
<select id="color" name="color" required>
<option value="blue">파랑색
<option value="red">빨강색
<option value="yellow">노랑색
</select>
</dd>
<dd>
<input type="submit" value="확인">
</dd>
</dl>
</form>
02forwardParamTo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<% request.setCharacterEncoding("utf-8");%>
<h2>포워딩하는 페이지 : forwardParamTo.jsp</h2>
<%
String name = request.getParameter("name");
String selectedColor = request.getParameter("color");
String selectedPage = "02"+selectedColor + ".jsp";
%>
<jsp:forward page="<%=selectedPage%>">
<jsp:param name="selectedColor" value="<%=selectedColor%>"/>
<jsp:param name="name" value="<%=name%>"/>
</jsp:forward>
02Red.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<style>
<! --
img{
border : 0;
width : 70px;
height : 30;
}
-->
</style>
<%
String name = request.getParameter("name");
String selectedColor = request.getParameter("selectedColor");
%>
<h2> 포위당하는 페이지 - <%=selectedColor+".jsp" %></h2>
<b><%=name%></b>님의 좋아하는 색은 "<%=selectedColor%>"이고
자기탐구와 내적성장을 상징하는 색입니다.<br>
<img src="img/<%=selectedColor+".jpg"%>">
02Blue , 02Green 이하 생략(red와 동일)
실행결과1
실행결과2 (form -> to)
3. plugin 액션
웹 브라우저에서 자바 플러그인을 사용하여 자바 애플릿이나 자바 빈즈 컴포너틑를 실행할수 있게 한다.
plugin 액션을 사용하면 자동으로 <object> 혹은 <embed>와 같은 태그를 통해 애플릿 등을 실행하도록 한다.
but 애플릿을 사용하는 경우가 드물기 때문에 참고만 한다.
<jsp:plugin type="bean|applet" code="objectCode" codebase="objectCodeBase"
{ align = alignment }
{ archive = archiveList }
{ height = height }
{ hspace = hspace }
{ name = name }
{ vspace = vspace }
{ width = width }
{ nspluginurl = url }
{ iepluginurl = url }
{ <jsp:params>
{<jsp:params name="paramName" value="paramValue" />}
</jsp:params> }
{<jsp:fallback> Plugin S/W를 지원하지 못하는 경우의 설명</jsp:fallback> }
</jsp:plugin>
4. usebean 액션 - 7장에서 확인
-------------------------------------------------- 선언과 표현식 --------------------------------------------------
선언
jsp 페이지에서 메서드나 멤버변수를 선언하기 위한 구문
jsp가 서블릿으로 변환된 자바 코드에서는 모든 내용이 _jspService()메서드에 들어가기 때문에 jsp에서
선언한 변수는 로컬변수가 되고 메서드 안에서 다른 메서드를 선언하는 자바 문법상 잘못된 것이므로 컴파일
에러가 발생
<%! %>는 jsp페이지에서 이러한 제약 사항 없이 멤버변수와 메서드 선언을 가능하게 함
<%!
// 멤버변수 선언이나 메서드 선언이 올 수 있다.
String str = "test";
public boolean check() {
return false;
}
%>
표현식(Expression)
간단한 데이터 출력이나 메서드 호출 등에 사용
<%= %>
코드 마지막에 ;(세미콜론) 사용 x
메서드 호출 : <%= calculator() %>
변수 출력 : <%= result %>
사칙 연산과 문자열 결합 : <%= “i+2=“+(i+2)+”입니다” %>
스크립트릿(scripttlet)
jsp 문서 내에서 자바 코드를 기술할 수 있는 부분으로 jsp의 가장 큰 특징 중 하나
현재 권장 x
- 알아만 두자
<%
// 로컬 변수 선언이나 프로그램 로직이 올 수 있다.
String str = "test";
for (int i=0; i < 10; i++) {
out.println(i);
}
%>
[연습문제]
1. HTML소스에는 보이지 않는 JSP 주석 표기법은 무엇인가?
<%--- 주석 ---%>
2. page 지시어의 기본적인 사용 예를 들어 설명하시오.
페이지 지시어에는 import, session, buffer, ... 등이 있으며 다른 문서를 포함하거나 java 라이브러리를 포함할
때 주로 사용한다.
3. 현재 페이지에 특정 위치에 다른 jsp를 포함할 수 있는 jsp 문법 두가지를 쓰고 차이를 설명하시오.
include 지시어와 include 액션
include 지시어 - 해당 파일을 포함 후 컴파일
<%@ include file=“포함할 파일_이름” %>
include 액션 - 실행 시점에서 해당 파일을 호출 하여 결과를 포함
<jsp:include page="포함할 파일_이름" />
4. 표현식과 스크립트릿에 대해 간단히 설명하고, 스크립트릿이 MVC패턴의 권장되지 않는 이유를
설명하시오.
표현식(Expression)
간단한 데이터 출력이나 메서드 호출 등에 사용
<%= %>
스크립트릿(scripttlet)
jsp 문서 내에서 자바 코드를 기술할 수 있는 부분으로 jsp의 가장 큰 특징 중 하나
-권장되지 않는 이유
JSP 내에서 화면과 프로그램이 섞여 있으면 유지보수가 힘들고 디자이너들과의 협업이 어려움