일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #JSP #Servlet #제이에스피 #서블릿 #필터 #filter #web.xml #필터예제 #filter예제
- #프로그래머스 #코딩 #글자지우기 #자바
- #프로그래머스 #자바 #코딩 #배열만들기2
- #프로그래머스 #코딩 #자바 #문자열묶기
- #프로그래머스 #코딩 #배열의길이에따라다른연산하기
- #프로그래머스 #코딩 #문자열잘라서정렬하기
- #프로그래머스 #코딩 #l로만들기
- #프로그래머스 #코딩 #자바 #수열과구간쿼리1
- #프로그래머스 #코딩 #배열비교하기
- #프로그래머스 #코딩 #순서바꾸기
- #git #commit #message #깃커밋 #메시지 #gitmessage #누락 #reset #mixed #마지막커밋정정하기
- #JSP #Servlet #Ajax #에이젝스 #HTML #success #.HTML() #HTML로붙이기
- #프로그래머스 #자바 #코딩 #특정문자열로끝나는가장긴부분문자열찾기
- #프로그래머스 #자바 #코딩 #무작위로k개의수뽑기
- #프로그래머스 #코딩 #자바 #리스트자르기
- #프로그래머스 #코딩 #자바 #왼쪽오른쪽
- #프로그래머스 #코딩 #배열원소 삭제하기
- #프로그래머스 #코딩 #문자열뒤집기 #자바
- #프로그래머스 #코딩 #자바 #빈배열에추가삭제하기
- #프로그래머스 #코딩 #자바 #2의영역
- #프로그래머스 #코딩 #자바 #수열과구간쿼리3
- #프로그래머스 #코딩 #배열만들기3
- #프로그래머스 #코딩 #자바 #문자열이몇번등장하는지세기
- #프로그래머스 #자바 #코딩 #전국대회선발
- 코딩 #자바 #조건에맞게수열변환하기2
- #JSP #Servlet #제이에스피 #서블릿 #필터 #Filter @WebFilter #어노테이션필터
- #프로그래머스 #코딩 #x사이의개수
- #프로그래머스 #코딩 #자바 #수열과구간쿼리2
- #프로그래머스 #코딩 #자바 #문자열여러번뒤집기
- #프로그래머스
- Today
- Total
David의 블로그
[JSP/Servlet]전처리 역할을 하는 Filter.필터 첫번째 본문
[Filter]
핉터는 클라이언트의 요청을 가장 먼저 받아 사전 처리하는 역할을 한다.
쉽게 말해 클라이언트가 요청을 보내면 JSP나 서블릿이 받기 전에 필터를 거친다. 웹 서버가 응답할 때도 마찬가지로 필터를 거쳐서 클라이언트로 전달된다.
다시 말해, 요청 정보에 특정한 처리를 미리 적용하거나 응답 내용을 변경 혹은 취소할 수 있다.
필터를 적용하는 방식
1. web.xml을 이용하는 방법
2. @WebFilter어노테이션을 적용하는 방법이 있다.
여기서는 web.xml로 적용하는 방식을 알아보겠다.
이번 예제는 web.xml로 필터를 적용해보고, 간단한 <form>태그를 만들어 요청방식이 get인지 post인지 알아보는 예제를 만들어 볼 것이다.
[web.xml]
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
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>filter_practice</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<!-- <filter>
<filter-name>LoginCheck</filter-name> 매핑할 필터 이름
<filter-class>filter.LoginCheckFilter</filter-class> 등록할 필터의 완전한 프로젝트 경로를 적어준다.
</filter>
<filter-mapping>
<filter-name>LoginCheck</filter-name>
<url-pattern>/board/*</url-pattern> 매핑할 필터 URL
</filter-mapping> -->
<filter>
<filter-name>BasicFilter</filter-name>
<filter-class>filter.BasicFilter</filter-class>
<init-param>
<param-name>FILTER_INIT_PARAM</param-name>
<param-value>필터 초기화 매개변수</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>BasicFilter</filter-name>
<url-pattern>/15FilterListener/BasicFilter.jsp</url-pattern>
</filter-mapping>
</web-app>
|
cs |
web.xml에서 필터를 등록해주기 위해서 <filter><filter-mapping>태그를 사용해주어야 한다.
<filter-name>은 필터로 등록할 이름을 지정해주는 것이다.
<filter-class>는 필터로 등록할 클래스를 적어준다. 컨텍스트루트를 제외한 .을 이용해 등록해준다.
<init-param>안에 <param-name>, <param-value>는
실제로 Filter인터페이스를 구현하면 반드시 오버라이딩을 해야하는 메소드중에 doFilter()가 있는데,
파라미터 FilterConfig는 servletContext타입으로 초기화 매개변수 값을 사용할 수 있다.
<url_pattern>은 매핑에 사용할 필터 URL을 지정해주는 것이다.
[BasicFilter.java]
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
|
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class BasicFilter implements Filter{
FilterConfig config;
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("BasicFilter -> destroy() 호출됨.");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
String filterInitParam = config.getInitParameter("FILTER_INIT_PARAM");
System.out.println("BasicFilter -> 초기화 매개변수 : "+filterInitParam);
String mode = ((HttpServletRequest)request).getMethod();
System.out.println("BasicFilter -> 전송방식 : "+ mode);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
config = filterConfig;
String filterName = config.getFilterName();
System.out.println("BasicFilter -> init() 호출됨. : "+ filterName);
}
}
|
cs |
13Line : 필터 클래스로 사용하기 위해 Filter 인터페이스를 구현해주었다.
15Line : doFilter()에서 초기화 매개변수를 사용하기 위해 초기화 해줬다.
17, 37Line : destroy()와 init()은 웹 컨테이너가 처음 시작할 때와 종료가 될 때 '딱 한번' 실행된다.
default메소드여서 굳이 오버라이딩할 필요가 없지만 조작이 필요하다면 오버라이딩을 받아서 작성한다.
40Line : 위에서 언급한 매개변수 FilterConfig는 JSP의 내장객체 타입인 servletContext와 같다.
web.xml에서 <param-name>지정한 값을 가져온다.
23 ~ 32Line : 전역변수로 지정한 FilterConfig 객체를 이용해 <param-value>값을 가져온다. (config.getInitParameter()부분)
chain.doFilter()는 필터를 여러개 지정하든 1개만 지정하든 할 수 있다. 이 메소드를 이용해 다음 단계로 넘어갈 수 있다.
만약 생략한다면 웹 서버는 요청을 받지 못했으므로 브라우저에서는 아무 응답을 받을 수가 없다.
반드시 써줘야한다!.
[BasciFilter.jsp]
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
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
function formSubmit(form, methodType) {
if (methodType == 1) {
form.method = "get";
} else if (methodType == 2) {
form.method = "post";
}
form.submit();
}
</script>
<h2>web.xml에서 매핑하기</h2>
<form>
<input type="button" value="Get 방식 전송" onclick="return formSubmit(this.form, 1);">
<input type="button" value="Post 방식 전송" onclick="return formSubmit(this.form, 2);">
</form>
</body>
</html>
|
cs |
11 ~ 19Line : 'get'방식이면 get으로 서버에 전송한다., 'post'방식이면 post로 서버에 전송한다.
22Line : 보통 <form>태그에 전송할 URL을 action속성을 이용해 적어준다. action속성이 없으면 자기자신에게 전송하게 된다.
[결과]
이제 실행해 보도록 하겠다.
먼저 서버를 시작하면 콘솔에는 이렇게 찍힌다.
서버가 기동되면서 init()메소드가 호출된 것을 볼 수가 있다.
get방식 버튼 한번, post방식 버튼 한번 눌러보자.
첫 콘솔 다음에 순차적으로 찍힌 로그가 보인다.
[느낀점]
필터를 잘 알아놓으면 써먹을데가 많을 것 같다.
'프로그래밍 > Jsp_Servlet' 카테고리의 다른 글
[JSP/Servlet]전처리 역할을 하는 Filter.필터 두번째 (0) | 2024.01.28 |
---|---|
[JSP/Servlet] 서블릿과 Ajax로 통신 후에 결과를 HTML로 뿌려주기. (1) | 2024.01.21 |
[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(세번째) (0) | 2024.01.20 |
[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(두번째) (0) | 2024.01.20 |
[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(첫번째) (0) | 2024.01.20 |