Languages/jsp

[JSP] 프로젝트로 배우는 자바 웹 프로그래밍 5장 개념, 실습

환테크 2021. 10. 26. 00:39
반응형

 

 

 

 

 

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 내에서 화면과 프로그램이 섞여 있으면 유지보수가 힘들고 디자이너들과의 협업이 어려움

반응형