url-pattern 변경 후 난관에 봉착하였습니다. 고수님들의 조언을 부탁드립니다.

9,049 views
Skip to first unread message

sa-young Jang

unread,
May 28, 2013, 1:12:34 AM5/28/13
to ks...@googlegroups.com
url-pattern 변경 후 난관에 봉착하였습니다. 고수님들의 조언을 부탁드립니다.

기존 servlet-mapping url-pattern 값 "*.do" 를 "/" 로 변경하여 적용하였습니다.

문제는 Interceptor에서 있습니다.
org.springplugins.web.IgnoreSelectedAnnotationHandlerMapping 에서 예외처리를 관리하였는데

img, css, js 모두 mapping에 걸리고 interceptor를 탄다는 것 입니다.

폴더(그룹)으로 예외처리할 방법이 없을까요?

최용은

unread,
May 28, 2013, 1:47:41 AM5/28/13
to ksug
resources mapping는 하셨는지요? @_@;


2013년 5월 28일 오후 2:12, sa-young Jang <chuns...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug?hl=ko-KR에서 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.
 
 

김종민

unread,
May 28, 2013, 2:11:08 AM5/28/13
to ks...@googlegroups.com
부연 설명 없이 정리하던 글 그대로 올립니다.

잘 소화하세요.


원인:


DispatcherServlet 에 대한 /src/main/webapp/WEB-INF/web.xml 설정

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

확장자에 관계 없이 모든 요청에 대한 DispatcherServlet 이 통제 하려고 하면서 생기는 문제


해결:


CoC 방식 I


특정 확장자 또는 특정 폴더 아래의 파일들만 DispatcherServlet 이 통제하도록 /src/main/webapp/WEB-INF/web.xml 설정

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/*.do</url-pattern>
</servlet-mapping>

또는

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/Spring/</url-pattern>
</servlet-mapping>



CoC 방식 II


/src/main/webapp/resources 폴더 밑으로 css, js, img 등 DispatcherServlet 이 통제하지 않을 파일들을 옯겨 놓기



설정 방식 I - 강력 추천


/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에 폴더 등록

<resources mapping="/resources/**" location="/resources/" />

을 참고 하여 다른 폴더들도 리소스라고 등록해 준다.

<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/css/**" location="/css/" />
<resources mapping="/js/**" location="/js/" />
<resources mapping="/img/**" location="/img/" />



설정 방식 II - 막장 방식


/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에 폴더 등록

<resources mapping="/resources/**" location="/resources/" />

을 참고 하여 다른 폴더들도 리소스라고 등록해 준다.

<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/css/**" location="/css/" />
<resources mapping="/js/**" location="/js/" />
<resources mapping="/**" location="/img/" />

/** 은 하나의 라인만 가능





2013년 5월 28일 오후 2:47, 최용은 <choi...@gmail.com>님의 말:

양아름

unread,
May 28, 2013, 2:26:56 AM5/28/13
to ks...@googlegroups.com
덧붙이자면... 리소스가 여기저기 중구난방으로 흩어져 있는 경우는 

mvc:default-servlet-handler 를 사용하시면 한방에 해결됩니당.. 

default-servlet-handler 설정은 viewresolver에서 필터링 되도 못찾는 경우 최종적으로 정적파일로 처리해줍니다. 

2013년 5월 28일 오후 3:11, 김종민 <exper...@gmail.com>님의 말:

Ahn Jisung

unread,
May 28, 2013, 2:44:30 AM5/28/13
to ks...@googlegroups.com
저같은 경우는 Open Session In Vew Servlet Filter나 Spring Security Filter등 Servlet Filter까지 모두 적용 되는 바람에  DefaultServleHandler를 사용하지 못했습니다. 

다른 분들은 DefaultServletHandler를 사용하실때 서블릿 필터에서 발생하는 성능 저하는 무시하고 수행하시는 건가요?  
앞단 웹 서버에서 캐시를 가동하면 무시할만하다고도 생각하는데, 아닌경우도 있어서 좀 애매하네요



2013. 5. 28., 오후 3:26, 양아름 <yabg...@gmail.com> 작성:

YongHyuk Lee

unread,
May 28, 2013, 2:56:14 AM5/28/13
to ks...@googlegroups.com
기본적으로 
앞단에 웹서버를 띄우면 저런 문제는 전부 사라집니다.
로컬에도 웹서버를 항상 띄워놓는게 정신건강에 좋다는 말씀.. ^^


2013년 5월 28일 오후 3:44, Ahn Jisung <nar...@gmail.com>님의 말:



--
-----------------------------------------------
itemBa
서비스개발실/과장 이용혁
JAVA EE, MongoDB, JBOSS AS, TOMCAT, INFINISPAN, NGINX
Mobile: +82.10.8425.9004
JBOSS USER GROUP
KOREA SPRING USER GROUP
SPRINGSPROUT

양아름

unread,
May 28, 2013, 3:46:08 AM5/28/13
to ks...@googlegroups.com
defaultServletHandler는 요청을 스프링 프레임웤 자신이 직접 정적파일을 읽어서 처리하는 것이 아니라,  was가 제공하는 서블릿으로 바로 넘기는 것으로 알고 있습니다.

또한 모든 서블릿필터를 모두 통과한뒤 최종적으로 전달되기 때문에 필터링에 따른 부하는 크지 않습니다.


2013년 5월 28일 오후 3:56, YongHyuk Lee <unlogi...@gmail.com>님의 말:

sa-young Jang

unread,
May 28, 2013, 5:28:11 AM5/28/13
to ks...@googlegroups.com
제가 내공이 부족하여 ~~~ 느껴지지 않아 조금 더 조언을 부탁드립니다.

추가정보

현재 경로는========================================
WebContent
-css
-js
-jquery-ui
-images
-lib 
-..
-jqTreeView 
-images
- .. 
-images
-folder1
-folder2
-folder3 
=======================================
암튼 노가다 말고 좋은 방법  

mvc:default-servlet-handler 는 2.4 버전이랑 버전업을 해야 할것 같아 아~@@

YoungHan Kim

unread,
May 29, 2013, 12:14:29 AM5/29/13
to ks...@googlegroups.com
스프링을 최신버전으로 올리시면 인터셉터 등록시에 excluded pattern을 정의 할 수 있습니다. 이 방법도 참고해주세요

Shin Sang Jae

unread,
May 30, 2013, 7:17:55 PM5/30/13
to ks...@googlegroups.com
Spring으로 Server side에서 처리하는 방법은 많은 분들이 제시해주신 듯하니
다른 시각에서 의견 드리자면 YongHyuk Lee님 의견에 한 표 거듭니다.

실제 운영 상황에 Web Server를 사용 안한다면 몰라도
보통은 DMZ에 Web Server, 내부에 WAS를 배치합니다.

예전에 Tomcat 출신 엔지니어가 Apache + Tomat을 굳이 해야하느냐에 대한 글도 있었던 것 같습니다만
적어도 국내 SI 에서는 DMZ에 Web Server, 내부에 WAS, DB 구조인지라
Web Server 자체를 놀릴 수는 없습니다. (어차피 떠 있는 자원인지라)

그래서 배포 시에는 정적 리소스, 동적 리소스를 패턴을 만들어
배포 시에 분리 시켜 보내게 되는데
이 과정에서 로컬 개발 상황과는 달라지는 환경 때문에 
적잖이 애를 먹게 됩니다. 리스크가 초기에 발견되지 않고 이행 전에 발견된다는 얘기죠.

간혹 XFORM 관련 제품들이 이미지파일로 버튼 컨트롤을 제어하는 방식으로 
WAS에서 로컬 이미지를 찾는 경우 십중팔구 장애가 발생하게 되는게 그런 유형 중의 하나입니다.

Eclispe에서 Dynamic Web Project 하나로 개발하는 것이 편리하긴 하나
운영 시 발생할 리스크를 조기에 제거하고자 한다면
Static Web Project 하나 더 두시고 거기에 정적 리소스 만드는 방법도 고려해보셨으면 합니다.

실제로 이 방법은 개발자와 디자니어/퍼블리셔/화면 시안 작업자가 공존하는 경우,
작업 공간을 분리하여 서로 간섭을 일으키지 않는 해법이기도 합니다.

아쉽게도 Maven 사용 시에는 기본적으로 war 패키징을 가정하고 있으므로
exploded 처리 후, Web Server, WAS 분리 배포하는 방식을 사용해할 수 있습니다.
(아직그러한 Plugin을 보지 못했는데 혹, 있다면 정보 공유 부탁드립니다.)

한편, 또 다른 관점에서 보자면
.do 호출하는 것도 나름의 컨벤션인데 굳이 / 로 처리해서 고행하시는 이유가 
위와 같은 온갖 트러블 슈팅 방법을 감수하고서라도 가져가야하는 것인지는
한번 챙겨봐 주셔도 될 것 같습니다. 

다양한 의견과 생각도 필요할 수 있어서
일부러 다른 방향으로 의견 드렸습니다.


2013년 5월 29일 오후 1:14, YoungHan Kim <zip...@gmail.com>님의 말:

--

sa-young Jang

unread,
May 31, 2013, 4:57:19 AM5/31/13
to ks...@googlegroups.com

감사합니다.

고수님들의 조언으로 셋팅과 구성에 대해서 많이 공부가 되었습니다.
Reply all
Reply to author
Forward
0 new messages