1. ServletConfig API
- javax.servlet.ServletConfig (Interface)
- Servlet에 1:1 대응됨 ( 서블릿당 하나씩 생성)
- 다른 서블릿에서는 사용/공유 불가. 특정 서블릿에 의존적
a. 초기화 파라미터(key/value쌍) 조회
String s = getInitParameter(String name);
- web.xml에 서블릿을 맵핑할 때 key/value쌍으로 값을 저장하고 필요시 사용
- key/value쌍을 자바에 저장하면 수정 시 재컴파일이 필요함(ex. 파일경로)
-> web.xml에 저장하면 해결됨
- 스프링프레임워크에서도 사용함
- 서블릿 하나에 여러 파라미터 저장 가능
<init-param>
은 서블릿태그 안에 선언
<servlet>
<servlet-name>
<servlet-class>A
<init-param>
<param-name>dir_path</param-name>
<param-value>c:\temp</param-value>
</init-param>
<init-param>
<param-name>x</param-name>
<param-value>y</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>
<servlet-class>B
...
b. ServletContext 반환
ServletContext ctx = getServletContext();
2. ServletContext API
- javax.servlet.ServletContext (Interface)
- 웹어플리케이션 당 하나만 생성 (/context명에 대응)
- 모든 서블릿에서 접근/사용가능. 전역
a. 컨텍스트 파라미터(key/value쌍) 조회
ServletContext ctx = getServletContext();
String s = ctx.getInitParameter(String name);
- web.xml에 key/value쌍으로 값을 저장하고 필요시 사용 (매핑시X)
- key/value쌍을 자바에 저장하면 수정 시 재컴파일이 필요함(ex. 파일경로)
-> web.xml에 저장하면 해결됨
- 스프링프레임워크에서도 사용함
- 여러 서블릿이 사용 가능 (공유가능)
<context-param>
은 서블릿태그 밖에 선언 - 다른 서블릿도 접근 가능
<context-param>
<param-name>userid</param-name>
<param-value>asdf</param-value>
</context-param>
<servlet>
...
📌 ServletConfig vs ServletContext
- 둘 다 getInitParameter 사용하여 파라미터 조회
- ServletConfig의 getInitParameter(name) : 서블릿 태그 안에 선언. 해당 서블릿만 사용 가능
- ServletContext의 getInitParameter(name) : 서블릿 태그 밖에 선언. 모든 서블릿이 사용 가능
3. Filter API
- Filter Interface - implement, 필요시 상속도 가능
- 여러 서블릿에서 각각 작성할 필요없어짐
- 서블릿 호출 전의 선처리(pre-processing)작업 : 요청필터
응답되기 전의 후처리(post-processing)작업 : 응답필터
- 요청필터: POST의 한글처리가 대표적
- 응답필터: 잘 없음.. html응답시 압축, 암호화 작업 가능
- 다수의 Filter : Chain Filter
- 구현
가. package 지정 필수
나. implements Filter
다. doFilter
라. Filter Mapping (web.xml) = Servlet Mapping
doFilter (ServletRequest req, ServletResponse res, FilterChain chain) {
chain.doFilter(req, res);
}
- doFilter (ServletRequest, ServletResponse, FilterChain) : 부모
doGet (HttpServletRequest, HttpServletResponse)
-
서블릿맵핑명 = 필터맵핑명 같아야 필터를 거친다
url이 같으니까 거쳐갈 수 있는 것
ex. /test서블릿은 /test필터 거쳐가고, /exam서블릿은 안거쳐감.
-
따라서 원하는 서블릿에만 필터가능
모든 서블릿에 필터걸리게 하려면 필터맵핑명: /*
(일반적으로 사용됨)
-
몇 개의 서블릿을 지정해서 필터링하려면
서블릿맵핑명 | 필터맵핑명 |
---|
/aaa/A | /* |
/aaa/A2 | /aaa/* |
/bbb/B | /bbb/* |
/bbb/B2 | |