ํํฐ ์๊ฐ
ํ์ง๋ง ๊ทธ๊ฒ ๋ค๊ฐ ์๋๋๋ค. ์ ๋ง ์๋ธ๋ฆฟ์ด ๊ทธ๋ ๊ฒ ๊ฐ๋จํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๊น?
์ด๋ฏธ ๋ถ์ํ ์๋ธ๋ฆฟ ์ธ์๋ ์์ "์ ํธ๋ฆฌํฐ ์๋ธ๋ฆฟ"์ธ ํํฐ ๋ ์์ต๋๋ค . ์ด๋ค์ ์๋ธ๋ฆฟ๊ณผ ๋งค์ฐ ์ ์ฌํ์ง๋ง ์ฃผ๋ ์ญํ ์ ์๋ธ๋ฆฟ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ๋๋ ๊ฒ์ ๋๋ค.
ํํฐ๋ ๋น์์ ๊ฐ๊ณ ์๋ธ๋ฆฟ์ ๋๋ ํฐ์ ๊ฐ์ต๋๋ค. ๋ฌธ์๊ฐ ๊ฐ๋ ์ ์ฑ ์์ ๋๋ฌํ๊ธฐ ์ ์ ๋น์์ ์์ ํต๊ณผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ์ด ์๋ช ํ๋ฉด ์๋ฅผ ๋ค์ด ์ด๋ฏธ ๋ฐ์ ์์ ์ผ๋ก ๋น์์๊ฒ ๋ค์ ๊ฐ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๋น์๋ ๋๋ ํฐ์ ๋ํ ์ผ๋ถ ์์ฒญ(์: ์คํธ)์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ์๊ฒ ์๋ ค์ง ์ง๋ฌธ์ ๋ํ ํ์ค ๋ต๋ณ์ ์ ๊ณตํ์ญ์์ค ( "๊ฐ๋ ์ด ์ ์๋ฆฌ์ ์์ต๋๋ค"). ๋ฑ๋ฑ. ๋ํ ์ด๋ฌํ ๋น์๊ฐ ์ฌ๋ฌ ๋ช ์์ ์ ์์ต๋๋ค. ํ๋๋ ํ ๋ฒ์ ๋ชจ๋ ๋๋ ํฐ์ ๋ํ ์คํธ์ ํํฐ๋งํ ์ ์๊ณ ๋ค๋ฅธ ๋น์๋ ๋ค๋ฅธ ๋๋ ํฐ ๊ฐ์ ์์ฒญ์ ์ ์กํ ์ ์์ต๋๋ค.
ํํฐ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.

ํด๋์ค Filter, FilterChain, FilterConfig
ํํฐ๋ ์๋ธ๋ฆฟ๊ณผ ๋งค์ฐ ์ ์ฌํ์ง๋ง ๋ช ๊ฐ์ง ์์ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ๊ณ ์ ํ ํํฐ๋ฅผ ์์ฑํ๋ ค๋ฉด ์์ ์์ํด์ผ ํฉ๋๋ค javax.servlet.Filter
.
ํํฐ์๋ ๋ฉ์๋ init()
๋ฐ destroy()
. ๋ฉ์๋ ๋์ service()
ํํฐ์๋ doFilter()
. ๊ทธ๋ฆฌ๊ณ ์์ฒด ํด๋์ค์ธ FilterConfig๋ ์์ต๋๋ค. ํํฐ๋ web.xml ํ์ผ์ ์๋ธ๋ฆฟ์ ์ถ๊ฐ๋๊ฑฐ๋ @WebFilter ์ฃผ์์ ํตํด ์ถ๊ฐ๋ฉ๋๋ค.
๋ฐฉ๋ฒ ๋ชฉ๋ก:
ํ๋ ์์ | ์ค๋ช | |
---|---|---|
1 | init(FilterConfig config) |
ํํฐ ์ด๊ธฐํ |
2 | destroy() |
ํํฐ ์ธ๋ก๋ |
์ผ | doFilter(ServletRequest , ServletResponse, FilterChain) |
์์ฒญ ์ฒ๋ฆฌ(ํํฐ๋ง) |
์๋ธ๋ฆฟ๊ณผ ํํฐ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ฌ๋ฌ ํํฐ๊ฐ ์์ ์ ์์ผ๋ฉฐ ์์ฒญ(๋ฐ ์๋ต)์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ค์ ์์ ์ฒด์ธ์ผ๋ก ๊ฒฐํฉ๋๋ฉฐ ์ด๋ค์ ์ํ ํน์ ํด๋์ค๋ ์์ต๋๋ค FilterChain
.
๋ฉ์๋์์ ์์ฒญ์ ์ฒ๋ฆฌํ ํ ์ฒด์ธ์์ ๋ค์ ํํฐ์ doFilter()
๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค . doFilter()
์:
public class MyFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws Exception {
PrintWriter out = resp.getWriter();
out.print("Adding something before the body of the response");
chain.doFilter(req, resp); // call the next filter in the chain
out.print("Adding something after the body of the response");
}
public void destroy() {
}
}
์ค์ ๋ก ๊ทธ๋ ๊ฒ ์๋ต ๋ณธ๋ฌธ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค . ๊ณต์์ ์ผ๋ก ํํฐ์ ์๋ธ๋ฆฟ์ ์๋ก ๋ ๋ฆฝ์ ์ด๋ฉฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์๊ฐ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ ์์ต๋๋ค. ํํฐ ๊ธฐ๋ฅ์ ์๋น์ค ๊ธฐ๋ฅ์ผ ๋ฟ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ(๋ฐ ์๋ต) ๋ก๊น
- ๋ฐ์ดํฐ ์์ถ
- ๋ฐ์ดํฐ ์ํธํ(๋ฐ ๋ณตํธํ)
- ๋ฐ์ดํฐ ๊ฒ์ฆ ์์ฒญ
- ์ํ๋ ํค๋ ์ถ๊ฐ/์ ๊ฑฐ
- ๋ฆฌ๋๋ ์ ์์ฒญ
- ์ก์ธ์ค ์ ์ด(์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋์ง ํ์ธ)
RequestDispatcher ํด๋์ค
๋๋๋ก ํํฐ๊ฐ ๋ฉ์๋ ๋ด์์ ์คํ๋๋ ๋์ doFilter()
๋ค๋ฅธ ์๋ธ๋ฆฟ์ ํธ์ถํด์ผ ํ ์๋ ์์ต๋๋ค . ์ด๋ฅผ ์ํด ์ปจํ
์ด๋์๋ ํน์ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค RequestDispatcher
.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ป์ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด์์
HttpServletRequest
- ๊ฐ์ฒด์์
ServletContext
์ด ๊ฐ์ฒด๋ ๊ธฐ์กด ์์ฒญ์ ๋ค๋ฅธ ์๋ธ๋ฆฟ์ผ๋ก ๋ฆฌ๋๋ ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค . ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์น์ธ๋์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ์ก๊ณ ์น์ธ๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค. ๊ธ์, ๋๋ ์๋ฒ์ ์ค๋ฅ๊ฐ ์์๊ณ ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ํ์ด์ง๋ฅผ ํ์ํ๊ณ ์ถ์ต๋๋ค :)
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String path = "/error.html";
ServletContext servletContext = this.getServletContext();
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(path);
requestDispatcher.forward(request, response);
}
}
RequestDispatcher
ํํฐ์์ ํธ์ถํ ์๋ ์์ต๋๋ค .
public class MyFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws Exception {
String path = "/error.html";
ServletContext servletContext = req.getServletContext();
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(path);
requestDispatcher.forward(req, resp);
}
public void destroy() {
}
}
์์ฒญ์ ๋ฉ์๋์์ ์ฒ๋ฆฌ๋๋ฉฐ ์ฌ์ฉ ํ forward()
ํธ์ถํ ํ์๊ฐ ์์ต๋๋ค .doFilter()
RequestDispatcher
๋ฆฌ๋๋ ์ ๊ณผ ์ ๋ฌ์ ๋น๊ต
๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋ ์ค์ํ ์ . ์ฌ์ฉ์๋ฅผ ์๋ธ๋ฆฟ์ ๋ค๋ฅธ URI๋ก ๋ฆฌ๋๋ ์ ํ๋ ค๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
redirect
forward
์ด๋ฏธ ๋ถ์ํ์ง๋ง ํธ์์ ๋ค์ ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํธ์ถ์ ํตํด ๋ฆฌ๋๋ ์
ํ๋ฉด ์๋ฒ๋ ์๋ต ๊ณผ ์ง์ ํ ๋งํฌ๋ฅผ response.sendRedirect("link")
๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)๋ก ๋ค์ ๋ณด๋
๋๋ค . 302
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ ์๋ต์ ๋ถ์ํ ํ ์ ๋ฌํ ๋งํฌ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์ ๋งํฌ๊ฐ ์ ๋งํฌ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
ํธ์ถ์ ํตํด ์ ๋ฌ ํ๋ฉด requestDispatcher.forward()
์ปจํ
์ด๋ ๋ด๋ถ์์ ์๋ก์ด ์์ฒญ์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ์ ์๋ต์ผ๋ก ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ์๋ต์ ๋ณด๋
๋๋ค. ์ด ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์ ์๋ธ๋ฆฟ์์ ์๋ต์ ๋ฐ์ง๋ง ๋ธ๋ผ์ฐ์ ์ ๋งํฌ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.