티스토리 뷰
필터 |
|
위와 같은 구조로 구성 되어 있다.
래퍼 |
기본적으로는 사용자가 보낸 요청을 임의로 수정할 수 없지만 그 요청을 감싸는 래퍼 클래스를 만들면 수정할수 있다.
래퍼 클래스는 요청 래퍼 클래스와 응답 래퍼 클래스 2가지 종류가 있다.
웹 컨테이너는 웹 브라우저로부터 요청을 받게 되면 request객체와 response객체를 만들게 된다. 그리고 이것을 web.xml파일에 기술된 서블릿들을 보고 적절한 서블릿에 이 객체를 전달하게 되는데, 이때 무조건 필터를 거치게 된다.
따라서, 필터 부분에서 요청 클래스 또는 응답 클래스에 대한 래퍼 클래스를 만듦으로써 기본적인 요청,응답에 대한 수정을 가할수있다.
필터체인 |
|
여러개의 필터가 존재할경우 요청이 순서대로 전달되고 응답이 순서대로 응답된다.
필터 클래스를 만들고 web.xml에 등록해주게 되면 웹 컨테이너가 필터의 존재를 인식하게 되고, 요청을 제일먼저 웹 컴포넌트에 보내는게 아니라 첫번째 필터에 전달하게 된다.
필터 클래스는 다음과 같이 필터 인터페이스를 구현해야 한다. 서블릿과 마찬가지로 웹 컨테이너에 의해서 생성되고 초기화 된다. 또한, 서블릿과 마찬가지로 웹 컨테이너에 의해서 생명주기가 관리 되기 때문에 init() destroy()메소드가 기본적으로 존재하며, 추가적으로 필터 기능을 수행하기 위해서 doFilter라는 메소드가 존재한다.
필터 체인의 doFilter 메소드를 호출함으로써 다음 필터에게 요청또는 응답을 전달할 수 있다. 보면 HttpRequest가 아닌 ServletRequest객체를 넘겨주고있다. 왜냐면, 이 HttpRequest는 웹 컨테이너가 받고, 그 받은것을 서블릿에게 요청을 보내야 하기 때문에 이름이 ServletRequest로 바뀐게 아닐까?라고 추측된다. 뭔가 적절한 처리가 추가 되었겠지?
doFilter메소드 안에서 chain.doFilter(request,response);를 호출 하면 필터 체인에서의 다음 필터가 호출 된다.
이런식으로 필터 클래스를 만들고 난 다음에는 web.xml에 필터를 등록하여 웹 컨테이너가 알아볼수있게 해야한다.
우선 그렇게 하기 위해서는 필터 클래스를 웹앱루트/WEB-INF/classes/myfilter 와 같은 경로로 구성된 myfilter 디렉토리를 만들고 그 아래에 클래스를 넣도록 하자. classes는 컴파일된 서블릿들이 존재하는 폴더이다.
필터를 web.xml에 등록하는 방법은 구글링을 하도록 하자. 여기서는 개념적인 것만 다루겠다.
필터 체인의 방향 바꾸기 |
필터를 이용하면 필터 체인이 향하는 방향을 바꿀 수 있다. 위에서 얘기했듯이, 사용자의 로그인 여부를 체크하여 로그인 상태면 이 페이지로 로그인 안되있으면 다른 페이지로 분기를 다르게 할 수 있다.
필터 체인 클래스의 doFilter메소드에 다음과 같이 구현하면 된다.
출처 cfile27.uf.tistory.com/attach/177CEF4B503EFC421D9EE9
'컴퓨터 공학과 졸업 > JSP&Servlet' 카테고리의 다른 글
서블릿 구동 절차 (0) | 2018.08.01 |
---|---|
모델1 모델2 MVC패턴 (0) | 2018.07.27 |
JSP의 새로운 문법 (0) | 2018.07.26 |
Servlet Container (0) | 2018.07.26 |
웹 어플리케이션 구조 (0) | 2018.01.26 |
- Total
- Today
- Yesterday
- typescript
- react hooks
- rendering scope
- return type
- await
- hydrate
- useEffect
- useRef
- reflow
- storybook
- reducer
- async
- Action
- server side rendering
- Polyfill
- computed
- es6
- webpack
- type alias
- react
- Babel
- props
- design system
- javascript
- reactdom
- atomic design
- mobx
- promise
- state
- Next.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |