Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Tags more
Archives
Today
Total
관리 메뉴

David의 블로그

[JSP/Servlet]전처리 역할을 하는 Filter.필터 두번째 본문

프로그래밍/Jsp_Servlet

[JSP/Servlet]전처리 역할을 하는 Filter.필터 두번째

David 리 2024. 1. 28. 15:17

필터 두번째로는 어노테이션 방식을 알아보겠다.

앞서 포스팅 한 예제는 web.xml 적용이었다. https://78alswo.tistory.com/20

 

[JSP/Servlet]전처리 역할을 하는 Filter.필터 첫번째

[Filter] 핉터는 클라이언트의 요청을 가장 먼저 받아 사전 처리하는 역할을 한다. 쉽게 말해 클라이언트가 요청을 보내면 JSP나 서블릿이 받기 전에 필터를 거친다. 웹 서버가 응답할 때도 마찬가

78alswo.tistory.com

 

바로 어노테이션 적용방법을 알아보자.

 

 

 

[AnnoFilter.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
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.annotation.WebFilter;
 
@WebFilter(filterName = "AnnoFilter", urlPatterns = "/15FilterListener/AnnoFilter.jsp")
public class AnnoFilter implements Filter{
 
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        String searchField = request.getParameter("searchField");
        String searchWord = request.getParameter("searchWord");
        
        System.out.println("검색 필드 : " + searchField);
        System.out.println("검색어 : " + searchWord);
        
        chain.doFilter(request, response);
        
    }
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
   }
}
 
cs

14Line : 필터를 구현하기 위해 Filter인터페이스를 구현한다.

13Line : @WebFilter어노테이션을 적용한다. filterName은 필터로 적용할 클래스의 이름이다. urlPatterns은 필터로 매핑할 URL이다. 또 여러개의 urlPatterns를 적용하고 싶을 때는 배열형태{}로 {"요청명", "요청명"} 명시해주면 되겠다.

 

17, 36Line : 필터의 default메소드로 수정이 필요하면 오버라이딩을 해 작성해주면 되겠다. 그럴필요가 없다면 없어도 무방하다.

 

23Line : doFilter()로 반드시 오버라이딩을 해야하는 메소드이다.

32Line : chain.doFilter()는 브라우저에서 보낸 요청을 서버로 보내는 역할을 하거나 다음 필터로 보낼 때 필요한 메소드이다. 또 서버에서 브라우저로 응답을 보낼 때도 필요하므로 반드시 없으면 안되는 메소드이다.

 

26 ~ 27Line: JSP에서 <form>에 정의한 input name값을 가져온다.

 

 

 

[AnnoFilter.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ 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>
    <form>
        <select name="searchField">
            <option value="title">제목</option>
            <option value="content">내용</option>
        </select>
        <input type="text" name="searchWord" value="애너테이션" />
        <input type="submit" value="검색하기">
    
    </form>
</body>
</html>
cs

searchWord에는 하드코딩으로 '애너테이션'값을 지정했다.

searchField로는 select값으로 title이나 content값이 전송될 것이다.

 

 

 

[결과]

 

 

 

처음 실행될 때는 값이 없으므로 null로 들어온다.

후에 검색필드랑 검색어를 다르게 선택하거나 작성해보고 전송하기를 해보면 위 이미지와 같다.