JSP(Java Server Page)์์๋ ๊ฐ์ฒด๋ฅผ ์ ์ธํ์ง ์๊ณ ๋ ๊ฐ์ฒด์ ์ฐ๊ด๋ ๋ฉ์๋๋ค์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด๋ค์ด ์๋ค. ์ด๋ฅผ Implicit Instane(๊ธฐ๋ณธ๊ฐ์ฒด, ๋ด์ฅ๊ฐ์ฒด) ๋ผ๊ณ ํ๋ค.
Implicit Instance ์ข ๋ฅ ๋งํฌ
์ด ์ค์์ ์ค๋์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ response ๊ฐ์ฒด์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
1. Response
response ๊ธฐ๋ณธ ๊ฐ์ฒด๊ฐ ์๋ต ์ ๋ณด์ ๊ด๋ จํด์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
ํค๋ ์ ๋ณด ์ ๋ ฅ
๋ฆฌ๋ค์ด๋ ํธ(Redirect) ํ๊ธฐ
์ด ์ธ์ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ ์์ผ๋, JSP ํ์ด์ง์์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
1-1 ์น ๋ธ๋ผ์ฐ์ ์ ํค๋ ์ ๋ณด ์ ์กํ๊ธฐ
request ๊ธฐ๋ณธ ๊ฐ์ฒด๋ ์์ฒญ ์ ๋ณด์์ ํค๋๋ฅผ ์ฝ์ด์ค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, response ๊ฐ์ฒด๋ ๋ฐ๋๋ก ์๋ต ์ ๋ณด์ ํค๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. response ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฉ์๋ |
๋ฆฌํด ํ์ |
์ค๋ช |
addDateHeader(String name, long date) |
void |
name ํค๋์ date๋ฅผ ์ถ๊ฐํ๋ค. (date๋ 1970๋ 1์ 1์ผ ์ดํ ํ๋ฌ๊ฐ ์๊ฐ์ 1/1000์ด ๋จ์๋ก ๋ํ๋ธ๋ค.) |
addHeader(String name, String value) |
void |
name ํค๋์ value๋ฅผ ๊ฐ์ผ๋ก ์ถ๊ฐํ๋ค. |
addIntHeader(String name, int value) |
void |
name ํค๋์ ์ ์ ๊ฐ value๋ฅผ ์ถ๊ฐํ๋ค. |
setDateHeader(String name, long date) |
void |
name ํค๋์ ๊ฐ์ date๋ก ์ง์ ํ๋ค. |
setHeader(String name, String value) |
void |
name ํค๋์ ๊ฐ์ value๋ก ์ง์ ํ๋ค. |
setIntHeader(String name, int value) |
void |
name ํค๋์ ๊ฐ์ ์ ์ ๊ฐ value๋ก ์ง์ ํ๋ค. |
containsHeader(String name) |
boolean |
์ด๋ฆ์ด name์ธ ํค๋๋ฅผ ํฌํจํ๊ณ ์์ ๊ฒฝ์ฐ true๋ฅผ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ false๋ฅผ ๋ฆฌํดํ๋ค. |
ํ์ง๋ง ํค๋ ์ ๋ณด์๋ ์ฃผ๋ก ์น ์๋ฒ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, JSP ํ๋ก๊ทธ๋๋ฐ ์์ฒด์์๋ ๋ง์ด ์ฌ์ฉ๋์ง๋ ์๋๋ค. ํค๋ ์ ๋ณด๋ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
1-2 ์น ๋ธ๋ผ์ฐ์ ์บ์ ์ ์ด๋ฅผ ์ํ ์๋ต ํค๋ ์ ๋ ฅ
์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด DB์ ๋ด์ฉ์ด ๋ฐ๋์๋๋ฐ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ถ๋ ฅ๋๋ ๋ด์ฉ์ด ๋ฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์์ธ์ ์ค์ ์๋ฒ์ ๋ด์ฉ์ด ๋ฐ๋์์์๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ๋ด์ฉ์ ์ถ๋ ฅํ์ง ์๊ณ ์บ์(cache)์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฌธ์ ์์ฃผ ๋ณํ๋ ๊ฒ์ํ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ฒ์ ๋ด์ฉ๊ณผ ์ค์ ์ถ๋ ฅ ํ๋ฉด์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ค๋์ํ๋ค๋ ์๊ฐ์ด ๋ค ์ ์๋ค. ๊ทธ๋์ ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. HTTP๋ ํน์ํ ์๋ต ํค๋๋ฅผ ํตํด์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์ ํ ๊ฒ์ธ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์ค์ ํ ์ ์๋ค. 1
์ด์ ๊ด๋ จ๋ ํค๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
Cache-Control ์๋ต ํค๋ : HTTP 1.1 ๋ฒ์ ์์ ์ง์ํ๋ ํค๋๋ก์, ์ด ํค๋์ ๊ฐ์ "no-cache"๋ก ์ง์ ํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ์ง ์๋๋ค.
Pragma ์๋ต ํค๋ : HTTP 1.0 ๋ฒ์ ์์ ์ง์ํ๋ ํค๋๋ก์, ์ด ํค๋์ ๊ฐ์ "no-cache"๋ก ์ง์ ํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ์ง ์๋๋ค.
์ต๊ทผ ๋์จ ๋ธ๋ผ์ฐ์ ๋ค์ HTTP 1.1 ๋ฒ์ ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ Cach-Control ์๋ต ํค๋๋ง์ ๊ณ ์ณ์ค๋ ๋์ง๋ง ํน์ ๊ตฌ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ๋๋ค ์ค์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store"); // ์ผ๋ถ ํ์ด์ดํญ์ค ๋ฒ๊ทธ ๊ด๋ จ
response.setDateHeader("Expires", 1L);
%>
์ ์ฝ๋์์ Expires ์๋ต ํค๋๋ HTTP1.0 ์๋ต ํค๋๋ก์ ์๋ต ๊ฒฐ๊ณผ์ ๋ง๋ฃ์ผ์ ์ง์ ํ ๋ ์ ๋ ฅํ๋ค. ์ด ๋ ๋ง๋ฃ ์๊ฐ์ 1970๋ 1์ 1์ผ ๊ธฐ์ค์ผ๋ก 1/1000์ด ๋จ์๋ก ์ ๋ ฅํ๋๋ฐ ์บ์ ๋์์ด ์๋ ๋ฌธ์์ ๊ฒฝ์ฐ 0์ด๋ 1๊ณผ ๊ฐ์ ๊ฐ์ ์ ๋ ฅํด์ ํ์ฌ ์๊ฐ ์ด์ ์ผ๋ก ๋ง๋ฃ์ผ์ ์ง์ ํจ์ผ๋ก์จ ์๋ต ๊ฒฐ๊ณผ๊ฐ ์บ์ ๋์ง ์๋๋ก ์ค์ ํ๊ฒ ๋๋ค.
1-2 ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ์ด์ฉํด์ ํ์ด์ง ์ด๋ํ๊ธฐ
response ๊ธฐ๋ณธ ๊ฐ์ฒด์์ ๋ง์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ ์ค์ ํ๋์ธ ๋ฆฌ๋ค์ด๋ ํธ ๊ธฐ๋ฅ์ด๋ค. ๋ฆฌ๋ค์ด๋ ํธ ๊ธฐ๋ฅ์ด๋ ์น ์๋ฒ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ผ๊ณ ์ง์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ํ์ ๋ฉ์ธ ํ์ด์ง๋ก ์๋์ผ๋ก ์ด๋ํ๋ ์ฌ์ดํธ๊ฐ ๋ง์๋ฐ ์ด์ฒ๋ผ ํน์ ํ์ด์ง๋ฅผ ์คํํ ํ, ์ง์ ํ ํ์ด์ง๋ก ์ด๋ํ๊ธธ ๋ฐ๋ ๋ ๋ฆฌ๋ค์ด๋ ํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์ค์ง์ ์ผ๋ก ์์ฒญ์ ๋ ๋ฒํ๊ฒ ๋๋ค.
response ๊ธฐ๋ณธ ๊ฐ์ฒด๋ ๋ค์์ ๋ฉ์๋๋ฅผ ํตํด์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ๋ค์ด๋ ํธ ํ๋๋ก ์ง์ํ ์ ์๋ค.
response.sendRedirect(String location)
์๋ฅผ ๋ค๋ฉด ๋ค์ด๋ฒ ํ์ด์ง๋ก์ ์ด๋์ ์ํ๋ฉด response.sendRedirect("http://naver.com"); ์ด๋ ๊ฒ ์ ๋ ฅํ๋ฉด ๋๋ค.
๋ง์ฝ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ ๋ ๋ค์ ์ฌ์ฉ์์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๊ฐ์ด ๋ถ์ฌ์ ํ๊ณ ์ถ๋ค๋ฉด ๋ฐ๋์ ์ธ์ฝ๋ฉ์ ํด์ ๋ถ์ฌ์ฃผ์ด์ผ ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ง๊ฒ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด ์์ ์ค๋ช ํ๋ฏ์ด ์น ์๋ฒ์ ์ ์ก๋๋ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์๋ง๊ฒ ์ธ์ฝ๋ฉ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ธ์ฝ๋ฉ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ๋ค๋ฉด ์ ๋ง ๊ดด๋ก์ ๊ฒ ์ง๋ง ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ ๋ง๋ค์ด๋์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. java.net.URLEncoder ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
<%@ page import="java.net.URLEncoder" %>
<%@ page pageEncoding="utf-8" %>
<%
String value = "์๋ฐ";
String encodedValue = URLEncoder.encode(value, "utf-8");
response.sendRedirect("https://www.google.co.kr/search?q=" + encodedValue);
%>
- ์บ์๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ WAS์ ๋๊ฐ์ ๋ด์ฉ์ ํ์ด์ง๋ฅผ ์์ฒญํ์ ๋ ๊ทธ ํ์ด์ง์ ๋ด์ฉ์ด ์ฐจ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ๋ถํ์ํ๊ฒ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณตํด์ ๋ก๋ฉํ์ง ์๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.์ฒซ๋ฒ์งธ ์์ฒญ์ ๋ํ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ก์ปฌ ์์น์ ์์ ๋ณด๊ด์์ธ ์บ์์ ์ ์ฅ. ํ์ ๋์ผํ ์์ฒญ์ด ์์ ์์ WAS์ ์ ๊ทผํ์ง ์๊ณ ๋ก์ปฌ์ ์ ์ฅ๋ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ์ถ๋ ฅํ์ฌ ๋น ๋ฅธ ์๋๋ก ์๋ต. ๊ทธ๋ ๋ค๊ณ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์์ฃผ ๋ฐ๋๋ ๋์ ์ธ ๋ฐ์ดํฐ๊ฐ ์๋ ์ ๋ฐ๋์ง ์๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. [๋ณธ๋ฌธ์ผ๋ก]