연봉동결
285
2016-08-01 21:56:14
2
1273

@RequestMapping 에 대한 고찰이 있습니다.


모 기관의 요청에 따라 2가지 도메인 방식을 사용하고 싶어합니다.

www.test.com/main.dowww.test.com/test/main.do 

하나는 일반적인 도메인 또 하나는 디렉토리방식 도메인 이지요

홈페이지가 하나라면 상관없지만 하나의 모듈에 여러 부속사이트가 있습니다

현재는 아래와 같은 멀티도메인 방식인데요

test1.test.com

test2.test.com

test3.test.com

이걸 디렉토리 방식의 도메인으로 동시에 사용하고 싶어하네요

www.test.com/test1/main.do    

www.test.com/test2/main.do

www.test.com/test3/main.do


그래서 제가 생각한것이

@RequestMapping 에서 url를 맵핑할때

다수의 url를 인식할수 있도록 { }  으로 해서

@RequestMapping(value= {"/main.do","{test}/main.do"}) 으로 셋팅하고

@PathVariable 라는 놈을 셋팅해서 @PathVariable("test") String test

으로 처리해보긴 했는데 @PathVariable 이놈이 REQUIRED의 제약이 있더군요.

즉 {} 이걸 사용해도 @PathVariable를 사용하면다면 다수의 값을 셋팅해도 거기에 맞는 값이 없다면 404 에러를 토해내더군요...


동시에 쓸려면 같은 컨트롤러를 2개를 만들어야 하는데...

기능들도 그렇고 너무 비효율적이고 한심한 방법일꺼 같습니다...


혹시 고수님들은 이런 경우가 있었는지 궁금하고 만약 있었다면 어떻게 처리를 하셨는지

궁금합니다.





0
0
  • 답변 2

  • zepinos
    19k
    2016-08-01 23:14:35

    가장 간단하게 처리하는 방법은 Spring 의 기능을 이용하는게 아니라, mod_rewrite 같이 url rewrite 을 이용해서 test1.test.com 으로 온 요청을 www.test.com/test/ 로 rewrite 시키는 것입니다.

    물론 WAS 에서도 filter 을 통해 url rewrite 을 구현해놓은 오픈소스도 존재합니다.


    0
  • 욥욥욥
    905
    2016-08-02 10:46:52

    정확히 뭘 하시려는지 잘 모르겠지만 멀티 도메인이 가장 깔끔할텐데요..

    web.xml 에 아래처럼 해도 됩니다

    다만, request.getServletName() 이랑 뭐 이것 저것 다른 고려사항이 있을 수.. 흠..

    일단 아래 코드도 참고 해보시기 바랍니다.

    	<servlet>
    		<servlet-name>appServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>
    				classpath:spring/appServlet/servlet-context.xml
    			</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet>
    		<servlet-name>appServlet1</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>
    				classpath:spring/appServlet/servlet-context.xml
    			</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet>
    		<servlet-name>appServlet2</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>
    				classpath:spring/appServlet/servlet-context.xml
    			</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    		
    	<servlet-mapping>
    		<servlet-name>appServlet</servlet-name>
    		<url-pattern>/test0/*</url-pattern>
    	</servlet-mapping>
    	<servlet-mapping>
    		<servlet-name>appServlet1</servlet-name>
    		<url-pattern>/test1/*</url-pattern>
    	</servlet-mapping>
    	<servlet-mapping>
    		<servlet-name>appServlet2</servlet-name>
    		<url-pattern>/test2/*</url-pattern>
    	</servlet-mapping>


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.