반응형
필터(Filter)
1)브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러 가지 작업을 처리하는 기능
2)요청이나 응답 시 공통적인 작업을 처리하는데 이용함.
필터 용도
1)요청 필터
-사용자 인증 및 권한 검사
-요청 시 요청 관련 로그 작업
-인코딩 기능
2)응답 필터
-응답 결과에 대한 암호화 작업
-서비스 시간 측정
3)관련 API
-javax.servlet.Filter
-javax.servlet.FilterChain
-javax.servlet.FilterConfig
Filter 인코딩 예제
필터 추가하는 방법
패키지 우클릭 - Filter
login.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인</title>
</head>
<body>
<form name="frmLogin" action="login" method="post" enctype="utf-8">
이름 : <input type="text" name="user_name"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시 입력">
</form>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class EncoderFilter
*/
@WebFilter("/*") //WebFilter 애너테이션을 이용해 모든 요청이 필터를 거치게 함.
public class EncoderFilter implements Filter { // 사용자 정의 필터는 반드시 Filter 인터페이스를 구현해야 함.
ServletContext context;
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("utf-8 인코딩.......");
context = fConfig.getServletContext();
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter 호출");
request.setCharacterEncoding("utf-8"); //한글 인코딩 설정 작업을 함
String context = ((HttpServletRequest)request).getContextPath(); //웹 애플리케이션의 컨텍스트 이름.
String pathinfo = ((HttpServletRequest)request).getRequestURI(); //웹 브라우저에서 요청한 요청 URI를 가져옴.
String realPath = request.getRealPath(pathinfo); //요청 URI의 실제 경로를 가져옴.
String mesg = "Context 정보 : " +context+
"\n URI 정보 : " +pathinfo+
"\n 물리적 정보 : " + realPath;
System.out.println(mesg);
// 요청 필터에서 요청 처리 전의 시간을 구함 // △
long begin = System.currentTimeMillis(); // | 요청 필터 기능
chain.doFilter(request, response); // 다음 필터로 넘기는 작업 수행함.
// | 응답 필터 기능
// 응답 필터에서 요청 처리 후의 시간을 구함 // ▽
long end = System.currentTimeMillis();
// 작업 요청 전과 후의 시간 차를 구해 작업 수행 시간을 구함.
System.out.println("작업 시간: " + (end - begin) + "ms");
}
/**
* @see Filter#destroy()
*/
public void destroy() {
System.out.println("destroy 호출");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login")
public final class LoginTest extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request.setCharacterEncoding("utf-8"); //post 방식으로 한글 전송 시 인코딩 작업 생략함.
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_name = request.getParameter("user_name");
String user_pw = request.getParameter("user_pw");
out.print("<html><body>");
out.print("이름은 " + user_name + "<br>");
out.print("비밀번호는 "+ user_pw +"<br>");
out.print("</body></html>");
}
}
|
cs |
request.setCharacterEncoding("utf-8");을 주석처리 하고 실행하면
한글이 깨지지만 인코딩 필터 덕분에
콘솔창
반응형
'📒 education archive > 📍Servlet, JSP' 카테고리의 다른 글
[국비학원 기록/JSP] JSP 구성 요소, 디렉티브 태그 종류 (0) | 2021.12.07 |
---|---|
[국비학원 기록/Servlet] 서블릿 리스너(Listener), 로그인 접속자 수 카운트 (0) | 2021.12.07 |
[국비학원 기록/Servlet] 서블릿 스코프(scope), URL - pattern (0) | 2021.12.06 |
[국비학원 기록/Servlet] 쿠키, 세션, HttpSession (0) | 2021.12.03 |
[국비학원 기록/Servlet] 서블릿 포워드, Redirect(리다이렉트), refresh, location (0) | 2021.12.02 |