2009-06-17 75 views

回答

2

據我所知,只有在web.xml中進行簡單的配置更改,才能更改由ServletRequest.getServerName()ServletRequest.getLocalAddr()返回的值。

但是你可以編寫一個ServletRequest/HttpServletRequest包裝器,它將所有方法調用委託給原始請求,除了那些你想要返回的非標準值。爲了包裝所有到達你的應用程序的請求,你可以實現一個Filter,它只是包裝了傳入的請求,然後將包裝器傳遞給過濾器鏈。過濾器會在你的web.xml中配置。這個過濾器之後的所有東西都會透明地使用你的包裝,並且會得到你提供的自定義值。

的包裝看起來是這樣的:

public class WrappedRequest implements ServletRequest { 

    private final ServletRequest original; 

    private String customServerName; 

    public WrappedRequest(ServletRequest original) { 
     this.original = original; 
    } 

    // ... delegate all method calls to original 

    public String getServerName() { 
     if (this.customServerName != null) { 
      return this.customServerName; 
     } 
     return this.original.getServerName(); 
    } 

    public void setServerName(String customServerName) { 
     this.customServerName = customServerName; 
    } 
} 

過濾器:

public class RequestWrapperFilter implements Filter { 

    private final String serverName; 

    public void init(FilterConfig filterConfig) { 
     this.serverName = filterConfig.getInitParameter("serverName"); 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 
     WrappedRequest wrapped = new WrappedRequest(request); 
     wrapper.setServerName(this.serverName); 

     chain.doFilter(wrapped, response); 
    } 

    public void destroy() { } 
} 
0

你可以嘗試爲您與此Tomcat實例服務的每個子域設置虛擬主機。

相關問題