아래 내용은 web.xml 에서 filter 설정을 하면서 url-pattern 설정 방법을 설명하고자 한다.
<filter></filter> 설정은 어떤 필터를 사용하느냐에 따라 init-param의 값이 조금 달라질 수는 있으나, 대체적으로 아래와 같이 설정한다.
<filter>
<filter-name>필터명</filter-name>
<filter-class>필터 클래스 full name</filter-class>
<init-param>
<param-name>파라메터 명</param-name>
<param-value>파라메터 값</param-value>
</init-param>
</filter>
init-param의 경우 대부분 기본값이 있으므로, 설정하지 않는 경우가 더 많다.
이런 필터들을 어떤 url에 적용할 것인지 filter-mapping을 하게 되는데.
이 때 접하게 되는 것이 url-pattern 이다.
기본적인 filter-mapping 포맷은 아래와 같다.
<filter-mapping>
<filter-name>필터명</filter-name>
<url-pattern>URL 패턴</url-pattern>
</filter-mapping>
보통 URL 패턴을 / , /* 또는 /*.do 처럼 extention까지 포함하도록 설정하곤 한다.
- / ==> 모든 url 패턴
- /* ==> 모든 url 패턴
- /*.do ==> *.do로 끝나는 url 인 경우
/와 /* 에는 조금 차이가 있다.
상세한 내용은 잘 설명되어 있는 블로그를 링크로 건다.
만약 context가 설정되어 있는 webapp라면 url-pattern 설정시 context를 넣어야 할까?
정답은 아니다 이다.
url-pattern 설정시 context 부분을 제외하고 설정해야 한다.
예를 들면 context 가 hi 라고 가정하면...
www.hello.com/hi/sayHello.do 라는 url을 설정하려면 아래와 같이 3가지 경우로 설정할 수 있을 것이다.
<url-pattern>/*</url-pattern>
<url-pattern>/*.do</url-pattern>
<url-pattern>/sayHello.do</url-pattern>
그렇다면 depth가 2단계 이상인 url의 경우는 어떻게 될까?
www.hello.com/hi/ohio/sayHello.do 라면...
<url-pattern>/ohio/*</url-pattern>
<url-pattern>/ohio/*.do</url-pattern>
<url-pattern>/ohio/sayHello.do</url-pattern>
이렇게 3depth, 4depth 로 계속해서 설정할 수 있다.
추가적으로 궁금했던 부분은
www.hello.com/hello.do?param=aaa
이렇게 파라메터를 포함한 URL까지 지정할 순 없을까 였다.
결론부터 말하면, 할 수 없다. 그 이유는 ? 이후 값들은 URL 구성이 되긴 하나, parameter로 인식이 되기 때문에 url-pattern 을 체크할 때는 파라메터를 제외하고 체크하기 때문이다.
(단, restful url 인 경우는 조금 다르다.)
참고 사이트
- http://docs.roguewave.com/hydraexpress/3.5.0/html/rwsfservletug/4-3.html
- http://lng1982.tistory.com/97
- http://jinwooe.blogspot.kr/2014/05/servlet-mapping-url-pattern-vs.html
'Infra > Tomcat' 카테고리의 다른 글
mod_jk2 란? (0) | 2015.12.31 |
---|---|
was가 응답이 없을 때, Thread Dump 확인 방법 (0) | 2015.03.16 |