57일차 2023-05-26

2023. 5. 26. 12:36JSP

JSP

 

Filter, Connection Pool

 

2. Filter

-서블릿 필터라고도 하며
 사용자 요청 시 서블릿이 실행되기 전에 사용자 요청을 가로채서 특정 작업(사전처리 혹은 사후처리)을 할 수 있도록
 해주는 특수한 형태의 서블릿이다


-필터는 컨테이너에 등록한 설정대로 특정 요청에만 동작하며 하나 혹은 여러 개의 필터가 사용자의 요청처리 이전에 먼저 실행된다


-필터는 기존 코드의 변경없이 웹 애플리케이션에서 공톡적으로 사용할 수 있는 기능 구현에 사용된다


-여러개 필터를 사용하는 경우 필터 하나당 하나의 기능을 갖도록 정의한다.
 
-서블릿 컨테이너가 시작될 때 생성된다(Pre-Loading:사용자 요청이 없어도 사전에 생성됨)
 단,서블릿은  사용자 요청이 있을 때 생성된다(Lazy Loadong:사용자 요청이 있을 때 생성됨)




작업순서는 아래와 같다

사용자 요청 ->서블릿 컨테이너 -> 필터의 사전작업 ->doFilter():서블릿(요청을 처리하는 서블릿) 혹은 다른 필터에 요청 전달-> 서블릿에서 요청 처리(응답을 필터에 전달)->필터의 사후 작업(응답을 컨테이너에 전달)->서블릿 컨테이너->사용자 응답



※ 요청을 할 때 필터를 거쳤으면, 응답도 필터를 거친다



예를 들면, 인증(로그인 여부나 특정 권한 확인)이나 로깅처리 및 한글 인코딩 처리등이다


init() : 서블릿 컨테이너(톰캣)에 필터가 등록되어  초기화 될때 실행된다. 한 번만 실행됨
doFilter(): 필터가 매핑된 서블릿(요청을 처리하는 서블릿)에 사용자 요청이 들어왔을때 요청이 전달되기 전에 실행된다.
                    서블릿으로 사용자 요청이 들어올때마다 실행됨.
                    인자인 FilterChain의 doFilter()를 호출해야 다음 필터로 요청이 전달되고 

                    최종적으로 서블릿에게 전달된다
만약 doFilter()를 호출하지 않는다면 해당 필터가 가로챈 요청이 서블릿에게 전달되지 않는다

destroy():서블릿 컨테이너가 종료되기전 필터가 종료될 때 실행된다. (한 번만 실행됨)


-필터 구현하기




※@WebFilter어노테이션으로 Filter구현시 web.xml에 필터 등록 불필요.
 

src/main/java에서 filter패키지 생성

 

attenticationFilter.java

결과)

게시판을 눌러 List.jsp를 요청할 시

 

 

 

RuntimeFilter.java

결과) JSPProj를  Run As (console창)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[커넥션 풀(Connection Pool)]

-커넥션 풀이란?

웹 환경에서 처럼 데이타베이스와의 연결이 빈번하게 발생하는 경우,
그때마다 커넥션을 생성하고 닫게 되면
리소스의 낭비와 연결시 시간소비를 하게 된다
이를 개선하기 위해 미리 커넥션을 생성해 pool에 넣어 놓고 요청이 
있으면 커넥션을 pool에서 가져다 쓰고
다 쓰고 나면 다시 pool에 반납한다. 이런 기법을 커넥션 풀이라 한다.

 

 

-아파치에서 제공하는 커넥션 풀(DBCP) 사용하기


-DBCP관련 API를 위한 환경 설정(Tomcat 5.5 이상버전에서는 아래 사항 생략
-[톰캣설치된 디렉토리]/lib/tomcat-dbcp.jar에 포함되어 있음)

- commons-dbcp package다운로드
http://commons.apache.org/ ->DBCP클릭->downloads클릭->latest Release 클릭
Commons DBCP 1.4 for JDBC 4 (JDK 1.6)의 commons-dbcp-1.4-bin.zip다운로드

*The commons-dbcp package relies on code in the commons-pool package to provide the underlying object pool mechanisms that it utilizes.

- commons-pool package다운로드
http://commons.apache.org/ ->POOL클릭->downloads클릭-> Apache Commons Pool Downloads page 클릭
Commons Pool 1.6의 commons-pool-1.6-bin.zip다운로드

->압축을 풀고 commons-dbcp-1.4.jar와 commons-pool-1.6.jar를 WEB-INF/lib에 복사한다

※DBCP 1.4는 JDK 1.6에서만 DBCP 1.3는 JDK 1.5 이하에서만 실행됨

 


결국 아파치에서 제공 톰캣은 아파치에서 만든 것, 그래서 Library tomcat의 jdbc에 들어 있음(옛날에는 넣어야 되는데 지금은 자동)

 

 

JNDI(Java Naming Directory Interface)를 이용한 DBCP설정]

 

  -톰캣이 스타트 하면서 톰캣버전/conf/server.xml과 context.xml에 설정한 대로 
    커넥션풀을 생성하고
    사용자는 생성된 커넥션풀에서 커낵션 개체를 가져다 쓰면 된다.
    (JNDI를 이용해서 가져다 씀)
   -최종적으로 데이타의 근원지 즉 데이터소스를 얻어와(lookup 해서) 커넥션 개체를 얻어 올 수 있다.

 

※ 우리 파일탐색기에서 자바 이름으로 찾아들어간다 /../../.. 

 

 

 

 

*Reference URL

www.apache.org->Tomcat프로젝트 클릭->
좌측 Document메뉴의 톰캣버전 클릭->JNDI Resources 클릭

http://tomcat.apache.org/tomcat-10.0-doc/jndi-datasource-examples-howto.html

 

 

 

1] DBCP관련 API를 위한 환경 설정

 

- commons-dbcp package다운로드
www.apache.org의 commons프로젝트 선택
http://commons.apache.org/ ->DBCP클릭->downloads클릭->latest Release 클릭
Commons DBCP 1.4 for JDBC 4 (JDK 1.6)의 commons-dbcp-1.4-bin.zip다운로드

*The commons-dbcp package relies on code in the commons-pool package to provide the underlying object pool mechanisms that it utilizes.

- commons-pool package다운로드
http://commons.apache.org/ ->POOL클릭->downloads클릭-> Apache Commons Pool Downloads page 클릭
Commons Pool 1.6의 commons-pool-1.6-bin.zip다운로드

->압축을 풀고 commons-dbcp-1.4.jar와 commons-pool-1.6.jar를 WEB-INF/lib에 복사한다 혹은 jdk-버전/jre/lib/ext에 복사한다.

※DBCP 1.4는 JDK 1.6에서만 DBCP 1.3는 JDK 1.5 이하에서만 실행됨

 

 

 

2])Tomcat버전/conf/server.xml의 <GlobalNamingResources>태그 사이에 세팅

 

--어느 웹 어플리케이션이든지 위에서 등록한 이 리소스를 사용하게 할 수 있도록 

 

 

 

<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver" 
maxTotal="20" maxIdle="20" 
name="jdbc/myoracle" password="tiger" 
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl" 
username="scott"/>

 

※ 설명

initialSize - The initial number of connections that will be created in the pool during pool initialization. Default: 0
maxActive - The maximum number of connections that can be allocated from this pool at the same time. Default: 8
minIdle - The minimum number of connections that will sit idle in this pool at the same time. Default: 0
maxIdle - The maximum number of connections that can sit idle in this pool at the same time. Default: 8
maxWaitMillis - The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception. Default: -1 (infinite)

 

코드 추가해야됨

'JSP' 카테고리의 다른 글

59일차 2023-05-31  (0) 2023.05.31
58일차 2023-05-30  (0) 2023.05.30
56일차 2023-05-25  (0) 2023.05.25
55일차 2023-05-24  (0) 2023.05.24
54일차 2023-05-23  (0) 2023.05.23