はい、クライアントファイルは静的なものであるため、任意のWebサーバーでホストできます。実際に必要なのは、index.html、.nocache.js、およびすべての* .cache。(js | html)ファイルを選択して配置することです。それらは任意のWebサーバー(apache、nginx、iis、jettyなど)にあります。
index.htmlをphp、jspなどの他のhtmlジェネレーターに置き換えることもできます。
ただし、もちろん、サーバー側はサーブレットコンテナでホストする必要があります。
注意しなければならないのは、静的ファイルを含むサーバーがサーブレットサーバーとは異なるドメインにある場合、セキュリティ上の制約のためにajaxリクエストが失敗することです(CORSを参照)。
この制限を回避するために、gwtには多くの方法があります(gwtquery-jsonp、gwt-xdmなど)。
私が使用しているのは、オプションリクエストを受信したときにCORSを有効にできるフィルター(上記のコードを参照)です。
サーブレットコンテナのURLを正しく構成するには、クライアントコードも変更する必要があります。これは、RequestFactoryを使用してURLを変更する例です。
RFのクライアント側コード:
myFactory = GWT.create(MyRFFactory.class);
DefaultRequestTransport transport = new DefaultRequestTransport();
transport.setRequestUrl("http://my.servletcontainer.com/gwtRequest");
myFactory.initialize(eventBus, transport);
web.xml構成
<filter>
<filter-name>CORSFilter</filter-name>
<filter-class>my.namespace.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
サーバーフィルター
public class CORSFilter implements Filter {
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String o = req.getHeader("Origin");
if ("options".equalsIgnoreCase(req.getMethod())) {
resp.setHeader("Allow", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
if (o != null) {
resp.addHeader("Access-Control-Allow-Origin", o);
resp.addHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS");
resp.addHeader("Access-Control-Allow-Headers",
"content-type,pageurl,x-gwt-permutation");
resp.setContentType("text/plain");
}
resp.getWriter().flush();
return;
}
if (o != null) {
resp.addHeader("Access-Control-Allow-Origin", o);
}
if (filterChain != null) {
filterChain.doFilter(req, resp);
}
}
@Override public void destroy() {
}
@Override public void init(FilterConfig arg0) throws ServletException {
}
}