본문 바로가기
백엔드/Java

RestFul URL 패턴 주의점.

by david100gom 2024. 3. 20.

정적콘텐츠 호출시 에러가 발생하는 원인은 DispatcherServlet의 url-pattern을 "/" 와 같이 설정하게 되면서 tomcat의 server.xml에 정의되어 있는 url-pattern "/"을 무시하기 때문입니다. 

이에 관해 첫번째 해결방법은 정적인 파일에 관해 별도의 매핑을 만들어 주는 방법입니다. 아래 예제처럼 맵핑을 추가하시면 됩니다.

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.ico</url-pattern>
<url-pattern>*.swf</url-pattern>
</servlet-mapping>


두번째 방법은 스프링에서 지원하는 <mvc:default-servlet-handler />를 사용하는 방법입니다.

<mvc:default-servlet-handler />
<mvc:annotation-driven />

위 내용을 servlet 설정 관련xml에 추가하는 방법입니다.

참고 사이트 : http://lng1982.tistory.com/97

 

-첫번째 테스트  (최적의 설정)

spring web.xml : <url-pattern>/*</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer
!/*.html=loadbalancer
/*=loadbalancer

 

결과 : 로컬    :  로컬에 있는 css, jpg, js 등등이 처리 불가하여. static S3 로 연결하여 해결

          실서버 : 로컬에 있는  css, jpg, js 등등이 처리 불가하여. static S3 로 연결하여 해결

if 만약 웹서버에서 정적파일을 처리하고 싶으면, default-servlet.xml : <mvc:default-servlet-handler /> 를 추가하면 톰캣에서 처리는 가능 (아파치에서는 불가능)

 

-두번째 테스트 (사용하지 말것)

default-servlet.xml : <mvc:default-servlet-handler />

spring web.xml : <url-pattern>/</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer

!/*.html=loadbalancer
/=loadbalancer

 

결과 : 로컬    :  톰캣에서 로컬 css, jpg, js 등등이 처리 가능함.

          실서버 : URL 매핑이 되지 않음.

 

-세번째 테스트 

default-servlet.xml : <mvc:default-servlet-handler />

spring web.xml : <url-pattern>/</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer

!/*.html=loadbalancer

/*=loadbalancer

 

결과 : 로컬    :  로컬 톰캣에서 로컬 css, jpg, js 등등이 처리 가능함.

          실서버 :  로컬에 있는 css, jpg, js 등등이 처리가 되지 않아. 정적파일의 경우는 static S3 로 연결하여 해결

 

-네번째 테스트 

default-servlet.xml : <mvc:default-servlet-handler />

spring web.xml : <url-pattern>/*</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer

!/*.html=loadbalancer

/*=loadbalancer

 

결과 : 로컬    :  로컬 톰캣에서 로컬 css, jpg, js 등등이 처리 가능함.

          실서버 :  로컬에 있는 css, jpg, js 등등이 처리가 되지 않아. 정적파일의 경우는 static S3 로 연결하여 해결

 

 

-다섯번째 테스트 

spring web.xml : <url-pattern>/</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer
!/*.html=loadbalancer
/*=loadbalancer

 

결과 : 로컬    :  로컬에 있는 css, jpg, js 등등이 처리 불가하여. static S3 로 연결하여 해결

          실서버 :  로컬에 있는 css, jpg, js 등등이 처리 불가하여. static S3 로 연결하여 해결

 

-여섯번째 테스트 

default-servlet.xml : <mvc:default-servlet-handler />

spring web.xml : <url-pattern>/</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer
!/*.html=loadbalancer
/*=loadbalancer

/=loadbalancer

 

결과 : 로컬    :   로컬 톰캣에서 로컬 css, jpg, js 등등이 처리 가능함.

          실서버 :  로컬에 있는 css, jpg, js 등등이 처리가 되지 않아. 정적파일의 경우는 static S3 로 연결하여 해결

 

 

-일곱번째 테스트 

default-servlet.xml : <mvc:default-servlet-handler />

spring web.xml : <url-pattern>/*</url-pattern>

apache uriworkermap.properties : 

!/*.jsp=loadbalancer

!/*.do=loadbalancer

!/*.html=loadbalancer
/*=loadbalancer

/=loadbalancer

 

결과 : 로컬    :   로컬 톰캣에서 로컬 css, jpg, js 등등이 처리 가능함.

          실서버 :  로컬에 있는 css, jpg, js 등등이 처리가 되지 않아. 정적파일의 경우는 static S3 로 연결하여 해결

'백엔드 > Java' 카테고리의 다른 글

Network  (0) 2024.03.31
Code Convention  (1) 2024.03.31
look like  (0) 2024.03.21
스프링 RestuFul API 에서 PUT / DELETE 메소드 가능하게 하는방법  (0) 2024.03.20
메세지 컨버터  (0) 2024.03.20
다중 transactionManager  (0) 2024.03.20
Spring AOP  (0) 2024.03.20
Spring @Scheduled 사용시  (0) 2024.03.20

댓글