[Servlet_JSP] 6. Servlet API

boing·2023년 8월 10일
0

Servlet_JSP

목록 보기
3/6

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
profile
keep coding

0개의 댓글