ํํฐ (Filter)
: Java ์น ์ดํ๋ฆฌ์ผ์ด์
์์ HTTP ์์ฒญ๊ณผ ์๋ต์ ์ค๊ฐ์์ ๊ฐ๋ก์ฑ๊ณ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ตฌ์ฑ์์
์ฌ๋ฌ ์๋ธ๋ฆฟ ํด๋์ค์์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ๋ค.
ํํฐ๋ ์ฃผ๋ก ์์ฒญ๊ณผ ์๋ต์ ํค๋ ์์ , ์์ฒญ ๋ฐ์ดํฐ ๊ฒ์ฆ, ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ, ๋ก๊น
๋ฑ๊ณผ ๊ฐ์ ์์
์ ์ํํ๋ ๋ฐ ํ์ฉ๋ฉ๋๋ค.
โข
์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์์๋ ํํฐ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด Filter ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
Filter ์ธํฐํ์ด์ค
โข
์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
|
init() | ํํฐ ์ด๊ธฐํ ์ ํธ์ถ๋๋ฉฐ, ํํฐ ์ค์ ๋ฐ ์ด๊ธฐํ ์์
์ ์ํํฉ๋๋ค. |
doFilter() | ์ค์ ํํฐ ๋์์ ์ ์ํ๋ ๋ฉ์๋๋ก, ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ๊ณ ์์ ํ๋ ์์
์ ์ํํฉ๋๋ค. ํํฐ ์ฒด์ธ ๋ด ๋ค์ ํํฐ๋ก ์์ฒญ์ ์ ๋ฌํ๊ฑฐ๋ ํํฐ ์ฒด์ธ์ ๋์ ๋๋ฌํ๋ฉด ์๋ธ๋ฆฟ์ผ๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค. |
destroy() | ํํฐ๊ฐ ์๋ฉธ๋ ๋ ํธ์ถ๋๋ฉฐ, ๋ฆฌ์์ค ํด์ ๋๋ ์ ๋ฆฌ ์์
์ ์ํํฉ๋๋ค. |
JSP ํํฐ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
javax EE
1.
Filter ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค ์ ์
2.
web.xml ์ ๋ฑ๋ก
Filter ํด๋์ค ์ ์
import javax.servlet.*;
import java.io.IOException;
public class EncodingFilter implements Filter {
private String encoding;
public void init(FilterConfig filterConfig) throws ServletException {
// web.xml์์ ์ค์ ํ ์ด๊ธฐ ๋งค๊ฐ๋ณ์ "encoding"์ ์ฝ์ด์ต๋๋ค.
encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// ์์ฒญ๊ณผ ์๋ต์ ๋ฌธ์ ์ธ์ฝ๋ฉ์ ์ค์ ํฉ๋๋ค.
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
// ๋ค์ ํํฐ๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค. ํํฐ ์ฒด์ธ์ ๋์ ๋๋ฌํ๋ฉด ์๋ธ๋ฆฟ์ผ๋ก ์์ฒญ์ด ์ ๋ฌ๋ฉ๋๋ค.
chain.doFilter(request, response);
}
public void destroy() {
// ํํฐ๊ฐ ์๋ฉธ๋ ๋ ํ์ํ ์ ๋ฆฌ ์์
์ ์ํํฉ๋๋ค.
}
}
Java
๋ณต์ฌ
web.xml ์ ๋ฑ๋ก
<web-app>
<!-- EncodingFilter๋ฅผ ํํฐ๋ก ๋ฑ๋กํฉ๋๋ค. -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>EncodingFilter</filter-class>
<!-- ํํฐ ์ด๊ธฐ ๋งค๊ฐ๋ณ์๋ก ๋ฌธ์ ์ธ์ฝ๋ฉ์ ์ค์ ํฉ๋๋ค. -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- ํํฐ๋ฅผ URL ํจํด์ ๋งคํํฉ๋๋ค. -->
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ๋ค๋ฅธ ์๋ธ๋ฆฟ๊ณผ ์๋ธ๋ฆฟ ๋งคํ ์ค์ ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. -->
</web-app>
XML
๋ณต์ฌ
ํํฐ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ์์
โข
์ธ์ฝ๋ฉ ๋ฐ ๋ฌธ์ ์งํฉ ์ฒ๋ฆฌ
โข
์ธ์ฆ ๋ฐ ๊ถํ ๊ฒ์ฌ
โข
๋ก๊ทธ ์ฒ๋ฆฌ
โข
์ด๋ฏธ์ง ๋ฐ ์์ ์์ถ
์ดํด๋ฆฝ์ค์์ Filter ํด๋์ค ์์ฑํ๊ธฐ
1.
ํํฐ ํด๋์ค : [NEW] > [Filter]
2.
ํํฐ ์์ฑํ๊ธฐ
a.
Class Name : TestFilter
3.
ํํฐ ๋งคํ ๊ฒฝ๋ก ์ค์ ํ๊ธฐ
a.
Filter mappings > [Edit] > ๊ฒฝ๋ก ์ง์
web.xml
<!-- ํํฐ -->
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
HTML
๋ณต์ฌ
jakarta EE
โข
TestFilter.java
package filter;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpFilter;
import java.io.IOException;
//@WebFilter("/TestFilter") // ํํฐ ํจํด ๊ฒฝ๋ก
public class TestFilter extends HttpFilter implements Filter {
/**
* ์์ฑ์
*/
public TestFilter() {
super();
}
/**
* ํํฐ๋ฅผ ์ด๊ธฐํํ๋ ๋ฉ์๋
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("TestFilter ์ด๊ธฐํ...");
}
/**
* ํํฐ์์ ์ฒ๋ฆฌํ ์์
์ ์์ฑํ๋ ๋ฉ์๋
*/
public void doFilter( ServletRequest request
,ServletResponse response
,FilterChain chain) throws IOException, ServletException {
System.out.println("TestFilter ํํฐ ์ฒ๋ฆฌ ์์
...");
// ํํฐ ์ฒด์ธ์ ๋ค์ ํํฐ๋ก ์์ฒญ๊ณผ ์๋ต์ ๋๊ฒจ์ฃผ๋ ๋ฉ์๋
chain.doFilter(request, response);
}
/**
* ํํฐ๊ฐ ์ ๊ฑฐ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋
*/
public void destroy() {
System.out.println("TestFilter ์ ๊ฑฐ...");
}
}
HTML
๋ณต์ฌ
โข
TestServlet.java
package servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/TestFilter")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestServlet ์๋ธ๋ฆฟ ์์
...");
response.getWriter().append("Served at: ").append(request.getContextPath());
response.getWriter().append("Served at: ").append("ํ
์คํธ");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
HTML
๋ณต์ฌ