2012-08-27 1 views
1

두 명의 클라이언트가 있습니다. 각 클라이언트는 거의 동일한 디자인의 레스토랑 웹 사이트입니다.두 도메인 이름을 동일한 웹 응용 프로그램을 가리키고 다른 내용을 표시하는 방법은 무엇입니까?

메인 페이지, 메뉴 페이지, 문의하기 페이지 등이 있습니다.

아마존을 AWS 가상 머신의 Tomcat 또는 GlassFish에서 실행중인 Java로 빌드하고 싶습니다.

에서 나는 하나의 웹 응용 프로그램이있는 경우 내 질문입니다 :

1.2.3.4/myapp 

1.2.3.4/myapp?clientid=1 

이 레스토랑 A의 웹 사이트를 보여줍니다

1.2.3.4/myapp?clientid=2 

이 레스토랑 B의 웹 사이트를 보여줍니다

어떻게가 너무 일을 설정하십시오

www.restaurantA.com1.2.3.4/myapp?clientid=1

www.restaurantB.com의 내용을 보여줍니다 1.2.3.4/myapp?clientid=2

의 내용을 보여줍니다?

어떤 제안이나 아이디어라도 높이 평가합니다!

+0

웹 사이트 당 하나의 EC2 인스턴스를 사용 해본 적이 있습니까? 기본 AMI를 생성하고 그로부터 인스턴스를 생성 할 수 있으며 각각은 고유 한 탄성 IP를 얻을 수 있습니다. – smcg

+0

@smcg 제안을 주셔서 감사합니다.하지만 원하는 것은 두 개의 데이터베이스 기반 웹 사이트가있는 하나의 서버에서 실행되는 하나의 응용 프로그램입니다. 그렇게하면 더 많은 서버를 추가 할 필요없이 더 많은 클라이언트를 추가 할 수 있습니다. –

답변

1

원본 URL에 따라 하나의 단일 웹 응용 프로그램 만 다른 콘텐츠를 제공하려는 경우 간단하게 javax.servlet.Filter을 사용할 수 있습니다. 먼저 web.xml에 필터를 선언

<filter> 
    <filter-name>DomainNameFilter</filter-name> 
    <filter-class>com.whatever.blah.DomainNameFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>DomainNameFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

그런 다음 javax.servlet.Filter를 구현 DomainNameFilter라는 클래스를 만듭니다. doFilter() 방법, 당신은 다음과 같이 원래 URL을 잡아 수 있습니다

request.getServerName() 

하면 다른 필터를 사용하는 경우도 chain.doFilter(request, response);를 호출해야합니다. 이제는 원래 도메인 이름을 알았으므로 적절한 응답을 작성할 수 있습니다.나는이 같은 doFilter() 방법 도메인 특정 속성을 설정하여 이런 짓을했습니다

request.setAttribute("title", titleMap.get(request.getServerName())); 

titleMapFilterinit() 방법으로 DB에서로드되는 HashMap입니다. 예를 들어 JSP의 값을 사용하려면 다음과 같이 액세스 할 :

<title><%=request.getAttribute("title")%></title> 

을 당신이 작업 예제를 참조 http://thermodynamiccomputing.org/http://fnode.xeiam.com/을 선택하십시오. 이 두 웹 사이트는 방금 설명한 필터링 기술을 사용하여 동일한 웹 응용 프로그램입니다.

1

여기에 제가 현재 배포 한 Tomcat의 해결책이 있습니다. ?clientid=1?clientid=2을 사용하는 대신 파일을 소스 IP 주소에 따라 특정 웹 응용 프로그램에 요청을 전달하도록 구성 할 수 있습니다. server.xml에서 : $TOMCAT_HOME/에서 다음

<Host name="www.restaurantA.com" 
    appBase="restaurantA" 
    unpackWARs="true" 
    autoDeploy="true"> 
</Host> 
<Host name="www.restaurantB.com" 
    appBase="restaurantB" 
    unpackWARs="true" 
    autoDeploy="true"> 
</Host> 

, webapps 함께 restaurantArestaurantB라는 두 개의 폴더를 만들 수 있습니다. 웹 응용 프로그램을 ROOT.war으로 올바른 폴더에 배포하고 Tomcat을 다시 시작하십시오. 이 솔루션은 제 의견으로는 훨씬 깔끔하고 웹 애플리케이션을 서로 완전히 분리시킵니다.

+0

@ 미하 정보에 감사드립니다. 매우 유용합니다. 그러나 이상적으로는 여러 웹 사이트의 콘텐츠를 제공 할 수있는 하나의 웹 응용 프로그램을 실행하고 싶습니다. –

관련 문제