[HTML5] 아이프레임과 프레임


아이프레임과 프레임


1. iframe


(1) iframe이란?

페이지안에 페이지를 삽입하는 방법이다. 예를들어 생활코딩 홈페이지인 opentutorials.org에는 유튜브가 삽입되어 있는데, 유튜브를 삽입하는 방법이 바로 iframe을 이용한 것이다.


(2) 문법

<iframe src="불러올 웹페이지의 URL" scrolling="스크롤링 허용여부(yes|no|auto)">

  // iframe를 지원하지 않는 브라우저인 경우 대체정보를 제공

</iframe>

- src : 불러올 페이지의  URL

- scrolling : 아이프레임 안에서 스크롤링을 허용할 것인지를 지정

auto : 스크롤이 필요한 경우만 스크롤 바를 노출 (기본 값)

yes : 스크롤링 허용, 스크롤이 필요 없는 경우도 스크롤 바를 노출

no : 스크롤 하지 않음

cf.) width, height, frameborder(프레임의 테두리 사용여부) 등의 속성이 더 있지만, 디자인에 대한 부분은 CSS를 통해서 제어하는 것이 권장된다.


(3) 예제

example1.html (jsfiddle, github)

<!DOCTYPE html>

<html>

    <body>

        <iframe src="http://opentutorials.org" width="90%" height="300" frameborder="1" scrolling="yes"></iframe>

    </body>

</html>


2. frame

하나의 화면에서 여러개의 페이지를 분할해서 보여줌


(1) 문법

<frameset (cols | rows)="열 혹은 행의 크기(콤마로 구분)">

   <frame src="frame_a.htm" name="프레임의 이름" />

 </frameset>


(2) 예제

example2.html 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<frameset cols="40%, 60%">//frameset: frame을 묶어주는 단위 / cols(열): 좌우로 배치

  <frameset rows="25%, 75%">//row(행): 상하로 배치

    <frame src="contents_of_frame1.html" />//25%

    <frame src="contents_of_frame2.html" />//75%

  </frameset>

  <frame name="content" src="contents_of_frame3.html" /> //name 속성에 content로 타깃을 지정할 수 있다.

  <noframes>// 브라우저가  프레임을 지원하지 않는다면 noframes에 지정한 태그 출력된다.

    <body>// body 위에 지정하는 frameset

      <p>This frameset document contains:</p>

      <ul>

        <li><a href="contents_of_frame1.html">contents_of_frame1.html</a></li>

        <li><a href="contents_of_frame2.html">contents_of_frame1.html</a></li>

        <li><a href="contents_of_frame3.html">contents_of_frame1.html</a></li>

      </ul>

    </body>

  </noframes>

</frameset>

</html>


contents_of_frame1.html 

<html>

    <head>

        <style type="text/css">

            body{

                background-color: red;

            }

        </style>

    </head>

    <body>

        contents_of_frame1.html<br />

        <a href="http://opentutorials.org" target="content">http://opentutorials.org</a>

    </body>

</html>


contents_of_frame2.html 

<html>

    <head>

        <style type="text/css">

            body{

                background-color: green;

            }

        </style>

    </head>

    <body>

        contents_of_frame2.html<br />

        <a href="http://w3c.org" target="content">http://w3c.org</a>

    </body>

</html>


contents_of_frame3.html 

<html>

    <head>

        <style type="text/css">

            body{

                background-color: blue;

            }

        </style>

    </head>

    <body>

        contents_of_frame3.html

    </body>

</html>



'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] <form> 태그 2  (0) 2014.12.20
[HTML5] <form> 태그 1  (0) 2014.12.20
[HTML5] <meta> 태그  (0) 2014.12.20
[HTML5] 이스케이핑  (0) 2014.12.20
[HTML5] URL  (0) 2014.12.20

[HTML5] <meta> 태그


<meta>

cf.) <head> 태그란?

<head> 태그는 문서를 설명하는 태그들이 위치하는 태그다. <body> 태그가 웹페이지가 담아내려는 정보 그 자체라면 head 태그는 body 태그의 정보를 설명하는 메타 정보라고 할 수 있다.


1. Meta란?

문서에 대한 정보를 기술하는 태그


2. 문법(Syntax)

<meta name="" content="" />//어떠한 contents를 담는 것이 아니라 속성을 통해 정보를 표현하는 형식이다.

<meta http-equiv="" content="" />//눈에 보이는 요소가 아니라 문서자체를 설명하는 요소


3. 예제(Example)

example1.html 

<!DOCTYPE html>

<html>

    <head>

        <meta name="description" content="생활코딩은 일반인에게 프로그래밍을 알려주는 온라인 수업" />

        <meta name="keywords" content="생활코딩, HTML, HEAD, META" />

// 검색 엔진에서 중요하게 사용

        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >//개발자 작성한 문자 코드와 일치해야 한다.

// 속성의 값이 중요하다(정해진 것이 많다.) --> 고정적이다.

    </head>

</html>


example2.html - 2초 후에 opentutorials.org로 페이지를 이동함 

<!DOCTYPE html>

<html>

    <head>

        <meta http-equiv="refresh" content="2;url=http://opentutorials.org/">

    </head>

</html>


'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] <form> 태그 1  (0) 2014.12.20
[HTML5] 아이프레임과 프레임  (0) 2014.12.20
[HTML5] 이스케이핑  (0) 2014.12.20
[HTML5] URL  (0) 2014.12.20
[HTML5] HTML5 시멘틱 구조 태그  (0) 2014.12.20

[HTML5] 이스케이핑


이스케이핑


1. 이스케이핑이란?

HTML 코드는 브라우저에 의해서 해석되는 약속된 문자들이다. 예를들어 줄바꿈을 의미하는 <br /> 태그를 줄바꿈의 용도가 아니라 화면에 표시하려면 어떻게 해야 할까? 아래와 같이 하면 어떻게 될까?

<!DOCTYPE html>

<html>

    <body>

        <br />은 줄바꿈을 의미하는 태그입니다. 

    </body>

</html>


<br /> 태그는 줄바꿈으로 해석되기 때문에 화면에 표시되지 않을 것이다. 이럴 때 사용하는 방법이 이스케이핑(escaping)이다. 아래와 같이 하면 된다.

<!DOCTYPE html>

<html>

    <body>

        &lt;br /&gt;은 줄바꿈을 의미하는 태그입니다. 

    </body>

</html>

'&lt;'는 '<'를 의미하고, '&gt;'는 '>'를 화면에 표시한다. 따라서 `&lt;br /&gt;'는 화면에 <br />을 표시하면서 HTML 문법에 맞는 코드가 아니기 때문에 해석되지 않는 것이다.


2. 코드 리스트

주요한 이스케이프 코드는 아래와 같다. (출처 : 위키피디아)

&amp; → & (ampersand, U+0026), &nbsp;

&lt; → < (less-than sign, U+003C)

&gt; → > (greater-than sign, U+003E)

&quot; → " (quotation mark, U+0022)

&apos; → ' (apostrophe, U+0027)


이스케이핑 도구)

아래는 온라인 이스케이핑 도구다. 이 도구를 이용해서 문자를 이스케이핑 할 수 있다.

http://www.htmlescape.net/htmlescape_tool.html


'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] 아이프레임과 프레임  (0) 2014.12.20
[HTML5] <meta> 태그  (0) 2014.12.20
[HTML5] URL  (0) 2014.12.20
[HTML5] HTML5 시멘틱 구조 태그  (0) 2014.12.20
[HTML5] DTD(Doctype)  (0) 2014.12.20

[HTML5] URL


URL


1. URL

URL(Uniform Resource Locator)이란 웹페이지, 이미지, 동영상과 같은 정보가 위치하는 유니크(식별,고유)한 위치 정보


2. URL의 구성

http://codingeverybody.com/codingeverybody_html_tutorial/url_72/example2.html?mode=view#bookmark

- scheme :어떤 통신 규약을 통해서 데이터를 전송할 것인가...

- hosts: 컴퓨터를 식별하기 위함

- url-path: 식별된 컴퓨터상의 디렉터리와 파일 식별

- query: 그 파일에게 어떠한 정보를 보여준다. 그 파일이 그 정보에 따라서 차등된 다른 정보를 보여줌

- bookmark: 특정한 지점으로 사용자에게 바로 지정해줌




3. 경로(path)

상대경로 : 문서를 기준으로 한 다른 리소스들의 위치정보

절대경로 : 문서의 위치를 가르키는 도메인을 포함한 전체 위치정보


4. 예제

example1.html  

<!DOCTYPE html>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

        <style>

            img{

                height:50px;

                width:50px;

            }

            #structure{

                width:379px;

                height:124px;

                border:1px solid gray;

            }

            body{

                font-size:0.8em;

            }

            table {

                width:100%;

                border-collapse: collapse;

            }

            td, th{

                border:1px solid gray;

                padding:5px;

            }

            textarea{

                width:100%;

                border:none;

            }

            .div{width:50px}

            .ex{width:30px;}

            .desc{width:150px}

            .result{width:60px}

        </style>

    </head>

    <body>

        <p>

            exampe1.html 파일이 아래와 같은 디렉토리 구조 위에 위치한다고 간주한다. <br />

            <img id="structure" src="structure.gif" />

        </p>

        <table>

            <tr>

                <th class="div">구분</th>

                <th class="ex">기호</th>

                <th class="desc">설명</th>

                <th class="code">코드</th>

                <th class="result">결과</th>

            </tr>

            <tr>

                <td rowspan="3">상대경로</td>

                <td>../</td>

                <td>부모 디렉토리</td>

                <td>

                    <textarea><img src="../image/logo.png" /></textarea>

                </td>

                <td>

                    <img src="../image/logo.png" />

                </td>

            </tr>

            <tr>

                <td>./</td>

                <td>현재 디렉토리</td>

                <td>

                    <textarea><img src="./image/logo.png" /></textarea>

                </td>

                <td>

                    <img src="./image/logo.png" />

                </td>

            </tr>

             

            <tr>

                <td>없음</td>

                <td>현재 디렉토리 기호는 생략할 수 있다</td>

                <td>

                    <textarea><img src="image/logo.png" /></textarea>

                </td>

                <td>

                    <img src="image/logo.png" />

                </td>

            </tr>

            <tr>

                <td rowspan="2">절대경로</td>

                <td>/</td>

                <td>루트(root) 디렉토리</td>

                <td>

                    <textarea><img src="/codingeverybody_html_tutorial/url_72/image/logo.png" /></textarea>

                </td>

                <td>

                    <img src="/codingeverybody_html_tutorial/url_72/image/logo.png" />

                </td>

            </tr>

            <tr>

                <td>URL</td>

                <td>URL을 사용</td>

                <td>

                    <textarea><img src="http://codingeverybody.com/codingeverybody_html_tutorial/url_72/image/logo.png" /></textarea>

                </td>

                <td>

                    <img src="http://codingeverybody.com/codingeverybody_html_tutorial/url_72/image/logo.png" />

                </td>

            </tr>

        </table>

    </body>

</html>



'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] 아이프레임과 프레임  (0) 2014.12.20
[HTML5] <meta> 태그  (0) 2014.12.20
[HTML5] 이스케이핑  (0) 2014.12.20
[HTML5] HTML5 시멘틱 구조 태그  (0) 2014.12.20
[HTML5] DTD(Doctype)  (0) 2014.12.20

[HTML5] HTML5 시멘틱 구조 태그


HTML5 시멘틱 구조 태그



<header>

이 요소는 웹페이지 일부분의 머리글을 정의하는데 사용되며 전체 페이지에서는 <article> 요소나 <section> 요소를 사용한다.


<nav>

이 요소는 웹페이지의 기본 탐색 링크를 위한 컨테이너이다. 링크로 구성된 모든 그룹에는 이 요소를 사용하지 말아야하며 주요 탐색 블록에만 사용해야 한다. <footer> 요소에 탐색 링크가 있는 경우에는 <footer> 요소만으로도 충분하므로 <nav> 요소로 이 탐색 링크를 둘러쌀 필요가 없다.


<aside>

제목과 부제가 모두 있는 경우에는 페이지, 기사 또는 섹션에 둘 이상의 표제가 필요할 수도 있다. 예를 들면, 본 튜토리얼에는 제목과 부제가 있으며 각각 "HTML5와 CSS3를 사용하여 최신 웹 사이트 구축하기"와 "HTML5로 canvas와 video 요소 구현하기"이다. 주제와 부제에 각각 <h1> 요소와 <h2> 요소를 사용하여 <hgroup> 요소로 둘러쌀 수 있다.


<hgroup>

이 요소는 새로 추가된 것으로 사이드바 주변에 있는 컨텐츠와는 별도로 다루어야 하는 기타 컨텐츠와 사이드바를 마크업하는 데 사용한다. 이러한 예로는 광고 블록이 있다.


<section>

이 요소는 문서나 애플리케이션의 섹션, 즉 기사나 튜토리얼의 장 또는 섹션을 나타낸다. 예를 들면, HTML5에서는 독자가 현재 읽고 있는 섹션이 <section> 요소로 둘러싸인다. 반드시 그런 것은 아니지만 일반적으로 <section> 요소에는 머리글이 있다. 예를 들면, 현재 읽고 있는 섹션의 머리글에는 "시맨틱 요소"라는 텍스트가 포함되어 있다.


<article>

<article> 요소는 뉴스항목, 블로그 포스트 또는 설명과 같이 자체적으로 배포될 수 있는 페이지에 있는 개별 항목을 정의하는 데 사용된다. 이러한 항목은 일반적으로 RSS 피드를 사용하여 신디케이트된다.


<footer>

<header> 요소와 마찬가지로 이 새 요소는 페이지 일부분의 바닥글을 정의한다. 페이지나 기사, 섹션의 끝에는 바닥글이 있어서는 안되지만 일반적으로는 그렇게 한다.


'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] 아이프레임과 프레임  (0) 2014.12.20
[HTML5] <meta> 태그  (0) 2014.12.20
[HTML5] 이스케이핑  (0) 2014.12.20
[HTML5] URL  (0) 2014.12.20
[HTML5] DTD(Doctype)  (0) 2014.12.20

[HTML5] DTD(Doctype)


DTD(Doctype)


1. 요약

Document Type Definition. 문서의 형식을 지정한다.--> 해당 문서가 어떤 표준(스펙)을 따르는지 지정하는 것을 말한다.

웹 문서의 시작을 알려주는 <html> 보다 먼저 사용하는 것이 '문서 유형'을 지정하는 <!doctype> 태그이다. 문서 유형은 웹 브라우저에서 "이제부터 처리할 문서는 HTML 문서이고 어떤 유형을 사용했으니 그 버전에 맞는 방법으로 해석하라"고 알려주는 것이다.

HTML4에서는 문서 유형을 설정하는 것이 까다로워서 아예 문서 유형을 지정하지 않은 문서도 많았다. 문서 유형을 지정하지 않을 경우에는 브라우저에서 웹 문서를 로딩할 때 관용 모드(quirks mode)로 인식하게 된다.

관용 모드는 아주 오래된 브라우저에서도 볼 수 있도록 하는 유형이기 때문에 웹 표준은 고려되지 않는다. 또한 웹 문서 제작자가 의도한 대로 결과 화면이 나오지 않을 수도 있다.


2. 문법

HTML 3.2

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">


엄격모드: HTML4 문법을 정확히 지켜야 하는 문서 유형이다.

HTML 4.01

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">


호환모드: 표준 규약의 변형을 어느 정도 허용하는 유형이다.

HTML 4.01 Transitional

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd">


프레임세트 모드: 프레임세트란 웹 브라우저 화면을 분할해서 화면마다 다른 웹 문서를 표시하도록 하는 방법이다.

HTML 4.01 Frameset

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"    "http://www.w3.org/TR/html4/frameset.dtd">


HTML 1.0 Strict

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


XHTML 1.0 Transitional

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


XHTML 1.0 Frameset

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">


XHTML 1.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


XHTML Basic 1.0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"  "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">



XHTML Basic 1.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN">


HTML5

<!DOCTYPE html>


3. 설명

웹 기술의 진보에 따라 HTML도 변화 되는데, 변화에 따라 브라우져가 HTML을 해석하는 방식도 변화가 생겼다.

이를 극복하기 위해서 브라우져에게 해당 HTML이 어떤 표준에 따른 것인지를 알려주는 것을 DTD(Document Type Definition)이라고 한다.

DTD는 문서의 제일 위에 위치한다. 

example1. HTML5의 doctype를 적용한 웹페이지. 

<!DOCTYPE html>

<html>

    <head>

        <title>DTD</title>

    </head>

    <body>

        Hello, HTML5! 

    </body>

</html> 




'WebFont-end > HTML5' 카테고리의 다른 글

[HTML5] 아이프레임과 프레임  (0) 2014.12.20
[HTML5] <meta> 태그  (0) 2014.12.20
[HTML5] 이스케이핑  (0) 2014.12.20
[HTML5] URL  (0) 2014.12.20
[HTML5] HTML5 시멘틱 구조 태그  (0) 2014.12.20

[Comporison] 언어환경별 문자열 추출


언어환경별 문자열 추출


1. Java

substring(시작 인덱스 , 종료 인덱스)


"hamburger".substring(4, 8);

--> "urge" 

"smiles".substring(1, 5);

--> "mile"


2. JavaScript

(1) substring

substring(시작인덱스, 종료인덱스);


var string='19860711';

var year=string.substring(0,4); 

--> 1986

var month=string.substring(5,7);

--> 07

var day=string.substring(8,10);

--> 11


(2) substr

substr(시작인덱스, 자르고 싶은 길이)


var string='19860711';

var year=string.substr(0,4);

--> 1986

var month=string.substr(5,2);

--> 07

var day=string.substr(8,2);

--> 11


3.Oracle

substr(대상[문자열], 시작인덱스, 자르고 싶은 길이)


SELECT SUBSTR('나는 대한민국 사람입니다.',1,7) COUNTRY FROM DUAL;


COUNTRY

-----------

나는 대한민국


4. MySQL

MySQL에서 substr 함수는 문자열의 일부를 추출하는 함수로 substring 함수의 동의어입니다.

substring(대상[문자열], 시작인덱스, 자르고 싶은 길이)

substr(대상[문자열], 시작인덱스, 자르고 싶은 길이)


SELECT SUBSTRING('habonytest', 5);

--> nytest

SELECT SUBSTRING('habonytest', 3, 2);

--> bo

SELECT SUBSTRING('habonytest', FROM 2);

--> abonytest


음수는 끝자리에서 수를 카운터합니다.

SELECT SUBSTRING('habonytest', -3);

--> est

SELECT SUBSTRING('habonytest', -5, 2);

--> yt

SELECT SUBSTRING('habonytest', FROM -5 FOR 4);

--> ytes


cf.) substring_index 함수

이 함수는 substr 함수와 기능은 비슷하지만 구분자가 있습니다. str 문자열에 delim 구분자를 기준으로 count 수 만큼 반환받습니다. 음수이면 뒤에서 카운터합니다.

SELECT SUBSTRING_INDEX(str, delim, count);

. 를 기준으로 2개를 반환받습니다.

SELECT SUBSTRING_INDEX('www.php.net', '.', 2);

--> www.php

SELECT SUBSTRING_INDEX('www.php.net', '.', -2);

--> php.net

SELECT SUBSTRING_INDEX('myid@domain.com', '@', -1);

--> domain.com

SELECT SUBSTRING_INDEX('myid@domain.com', '@', 1);

 --> myid



[Comporison] Dispatcher방식과 Redirect 방식


Dispatcher방식과 Redirect 방식

서블릿에서 특정 URL이나 페이지로 이동하게 하는 두 가지 방식이 있는데, 두 방식의 차이점에 대해 알아보자.


1. Dispatcher방식 -->forward()

forward()[전달하기]는 클라이언트가 요청하면서 전송한 데이터를 그대로 유지한다.


(1) 예제

RequestDispatcher dispatcher = request.getRequestDispatcher("dispatcher.jsp");

      request.setAttribute("request","requestValue");

     dispatcher.forward(request, response);


dispatcher.jsp

request 속성 값 : <%=request.getAttribute("request") %>

포워딩이 되더라도 주소가 변경되지 않는다. (같은 request영역을 공유하게 됨)


1) 송신 

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_06_Servlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

request.setCharacterEncoding("euc-kr");

//한글 변환 Encode 설정

String area = request.getParameter("area");

//지역 정보만 먼저 가져온다.

ServletContext context = this.getServletContext();

//서블릿 환경 객체의 값을 획득한다. 이 객체가 있어야 RequestDispatcher 객체를 생성할 수 있다.


RequestDispatcher dispatcher = null;

response.setContentType("text/html;charset=euc-kr");

PrintWriter out = response.getWriter();

out.println("<html><body>");

out.println("서울 지역 관련 정보<br/>");

dispatcher = context.getRequestDispatcher("/Servlet06_Seoul");

dispatcher.include(request, response);

//서울 지역 관련 정보를 include 한다.

out.println("<br/><br/>");

out.println("대구 지역 관련 정보<br/>");

dispatcher = context.getRequestDispatcher("/Servlet06_Taegu");

dispatcher.include(request, response);

//대구 지역 관련 정보를 include 한다.

out.println("</body></html>");

out.close();


if(area == null) { //라디오 버튼 체크를 하지 않았다면

response.sendError(512, "라디오 버튼 체크 오류!!!");

return;

}

else if(area.equals("서울")) { //서울 지역을 체크 했다면

dispatcher = context.getRequestDispatcher("/Servlet06_Seoul");

//서울 지역에 대한 서블릿으로 위치를 이동할 수 있도록 객체 생성

}

else if(area.equals("대구")) { //대구 지역을 체크 했다면

dispatcher = context.getRequestDispatcher("/Servlet06_Taegu");

//대구 지역에 대한 서블릿으로 위치를 이동할 수 있도록 객체 생성

}

dispatcher.forward(request, response);

//설정된 Dispatcher로 요청과 응답 권한을 넘기는 작업

}

}


(2) 수신

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_06_Seoul_Servlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

request.setCharacterEncoding("euc-kr");

//넘어온 데이터에 대한 POST 방식 한글 처리

String name = request.getParameter("name");

String id = request.getParameter("id");

String pw = request.getParameter("pw");

String area = request.getParameter("area");

//forward에 의해 이동이 이루어 지면 request 영역은 

//보존되기 때문에 그대로 데이터를 추출해 낼 수 있다.

response.setContentType("text/html;charset=euc-kr");

PrintWriter out = response.getWriter();

out.println("<html><body>");

out.println("그러므로 당신의 이름이 " + name);

out.println("이라는 말이고,<br/>");

out.println("당신이 사용하려는 아뒤가 " + id);

out.println("라는 말인가?");

out.println("</body></html>");

//out.close();

}

}


2. Redirect 방식 --> sendRedirect()

Redirect()[이동하기]는 새로운 페이지로 완전히 이동해서 기존 데이터를 하나도 사용할 수 없다.


request.setAttribute("request", "requestValue");

response.sendRedirect("redirect.jsp");


 redirect.jsp

 request 속성 값 : <%=request.getAttribute("request") %> // null

포워딩될 때 브라우저의 주소 표시줄의 URL이 변경된다. 포워딩된 jsp페이지에서는 서블릿에서 request영역에 공유한 속성값에 접근 할 수 없다.


(1) 예제

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_05_Servlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

//한글 데이터가 없기 때문에 Encode 설정 하지 않음.

String method = request.getMethod();

//요청 메서드를 얻어내는 작업

if(method.equalsIgnoreCase("GET")) {

//요청 방식이 GET이라면

response.sendRedirect("http://localhost:8080/Round14/Round14_05_Get_Servlet.htm");

//Round14_05_Get_Servlet.htm으로 이동한다.

return;

}

else if(method.equalsIgnoreCase("POST")){

//요청 방식이 POST라면

response.sendRedirect("Round14_05_Post_Servlet.htm");

//Round14_05_Post_Servlet.htm으로 이동한다.

return;

}

}

}



[Comparison] include 지시어와 include 액션원소


include 지시어와 include 액션원소


1. include 지시어 <%@ include file="~"%>

include 지시어는 다른 파일의 내용을 현재 위치에 삽입한 후 JSP 파일을 자바 파일로 변환하고 컴파일 하는 방식이다. 즉, include 지시어는 포함시키려는 파일의 코드 자체가 현재 페이지에 포함되어서 하나의 서블릿으로 컴파일된다. include 지시어를 사용하면, JSP 파일을 자바 파일로 변환하기 전에 include 디렉티브에서 지정한 파일의 내용을 해당 위치에 삽입하고, 그 결과로 생긴 자바 파일을 컴파일하게 된다.


2. include 액션 원소 <jsp:include ~ />

include 액션 원소는 다른 JSP로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 방식이다.

일반적으로 include 액션 원소는 레이아웃의 한 구성 요소를 모듈화 하기 위해 사용된다. include 액션 원소는 포함시키려는 페이지의 실행 결과만 가져오기 때문에 실제 서블릿으로 변환될때 에는 따로 작성된다.


따라서, 변수를 공유할 때에는 include 지시어를 사용해야 한다. include 액션 원소는 파일이 따로 작성되기 때문에 변수를 공유할 수 없다.

그러나 include 지시어와는 달리 동적인 변화가 많은 페이지는 include 액션 원소를 사용하는 것이 바람직하다.



비교항목 

include 지시어

include 액션 원소 

 처리시간

 요청 시간에 처리

 JSP 파일을 자바 소스로 변환할 때 처리 

기능 

 별도의 파일로 요청 처리 흐름을 이동

 현재 파일에 삽입시킴 

데이터 전달 방법 

 request 기본 객체나 <jsp:param>을 이용한 파라미터 전달 

 페이지 내의 변수를 선언한 후, 변수에 값 저장 

용도 

 화면의 레이아웃의 일부분을 모듈화 할 때 주로 사용된다. 

 다수의 JSP 페이지에서 공통으로 사용되는 변  수를 지정하는 코드나 저작권과 같은 문장을 포  함한다. 




[Comporison] LEFT JOIN 과 RIGHT JOIN


LEFT JOIN 과 RIGHT JOIN


left, right등의 outer join은 기준이 되는 테이블이 무엇이냐에 따른 것입니다.

결과가 왼쪽 테이블 전체 데이터 대상이라면 left를 ,오른쪽 테이블의 전체 데이터가 대상이라면 right를 사용합니다.


1. 조인 대상 테이블


(1) EMP 테이블

SELECT * FROM  EMP;


(2) DEPT 테이블

SELECT * FROM DEPT;


2.  LEFT JOIN 과 RIGHT JOIN 차이


(1) [ A left join B on (a.id = b.id) ]


LEFT OUTER JOIN은 오른쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.

SELECT * FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno; 

A(왼쪽) 테이블과 B(오른쪽) 테이블을 조인을 걸건데, B테이블에 A테이블과 맵핑되는 값이 있건 없건 A의 값은 반드시 모두 나오게 됩니다.

(outer는 적어도 그만 안 적어도 그만이지만, 명시적으로 적어주는 것이 좋습니다 .^^)


위의 결과를 보면, A 에 있는 모든 값이 나오고,B와 맵핑 되지 않는 값은 NULL 이 됨을 볼 수 있습니다.

 

(2) [ A right join B on (a.id = b.id) ]


RIGHT OUTERL JOIN은 왼쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.

SELECT * FROM dept d RIGHT OUTER JOIN emp e ON d.deptno = e.deptno; 

B(오른쪽) 테이블을 기준으로 A(왼쪽) 테이블을 조인 거는 경우입니다.

이럴 경우도 left 와 마찬가지로 생각해본다면, B테이블의 전체값이 결과로 나올 것이고, A 테이블의 값은 있으면 나오고 없으면 안나온다.