上操作tomcats答案,如果是的話:如何?我可以通過server.xml中的配置在request.getServerName()或request.getLocalAddr()
我需要這個,因爲服務器在不同的子網中的不同IP下已知。
上操作tomcats答案,如果是的話:如何?我可以通過server.xml中的配置在request.getServerName()或request.getLocalAddr()
我需要這個,因爲服務器在不同的子網中的不同IP下已知。
據我所知,只有在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() { }
}
你可以嘗試爲您與此Tomcat實例服務的每個子域設置虛擬主機。
只能由不同的IP或不同的主機名? – Gandalf 2009-06-17 18:44:37