Gwt 链接端口80上的apache web服务器和端口8080上的tomcat webapp

Gwt 链接端口80上的apache web服务器和端口8080上的tomcat webapp,gwt,tomcat,Gwt,Tomcat,在端口80上,我有普通的apache web服务器 在端口8080上,我有带有客户端和服务器端的tomcat 我的目标是: www.mydomain.com在加载javascript内容时呈现静态和SEO友好的index.html 在这个index.html的标题中,我加载了www.mydomain.com:8080/myapp/stuff.js stuff.js是用gwt编译的,并调用RootLayoutPanel.get().add(nice_panel),它将删除静态内容并显示动态小部件。

在端口80上,我有普通的apache web服务器

在端口8080上,我有带有客户端和服务器端的tomcat

我的目标是:

www.mydomain.com在加载javascript内容时呈现静态和SEO友好的index.html

在这个index.html的标题中,我加载了www.mydomain.com:8080/myapp/stuff.js

stuff.js是用gwt编译的,并调用RootLayoutPanel.get().add(nice_panel),它将删除静态内容并显示动态小部件。它还调用servlet(服务器端代码)

问题:出于安全原因,浏览器不允许我加载www.mydomain.com:8080/myapp/stuff.js,因为它位于不同的端口上

错误尝试:我试图创建一个从“普通”apache web服务器目录到包含stuff.js的tomcat webapp的符号链接。我现在可以加载stuff.js了,因为它的url是:www.mydomain.com/mysymlink_to_tomcat/stuff.js。但是stuff.js不再能够再次调用服务器端的servlet,因为浏览器的安全规则(“XMLHttpRequest无法加载…origin…访问控制不允许使用Allow origin”)

我希望避免将index.html重定向到带有标题('location:')的tomcat的“疯狂”解决方案。这个解决方案可行,但有很多缺点(SEO…)

最好的方法是什么


谢谢。

我不确定这是否可以避免安全错误,但您可以尝试使用iframe。在apache上,tomcat有索引和iframe,JS在iframe中加载。不知道这是否有助于解决搜索引擎优化问题。

我不确定这是否能避免安全错误,但您可以尝试使用iframe。在apache上,tomcat有索引和iframe,JS在iframe中加载。不知道这是否有助于解决搜索引擎优化问题。

您基本上有两种解决方案:

  • 使用两个源代码:使用GWT中的
    xsiframe
    链接器允许
    :80
    上的页面从
    :8080
    加载脚本(对于读者来说:这不是关于加载,而是关于脚本的功能)。 将以下内容添加到“gwt.xml”中:

    <add-linker name='xsiframe' />
    

  • 使用单一来源:使用Apache的
    mod_proxy
    (或
    mod_jk
    )通过Apache代理Tomcat。没有人会使用
    :8080
    ,一切都会经过
    :80
    。请参阅将Tomcat与ApacheHTTPD和代理一起使用,网址为


当然还有抛弃HTTPD并用Tomcat提供一切服务的解决方案(最近的Java和Tomcat版本已经解决了它们的慢度问题)。

基本上有两种解决方案:

  • 使用两个源代码:使用GWT中的
    xsiframe
    链接器允许
    :80
    上的页面从
    :8080
    加载脚本(对于读者来说:这不是关于加载,而是关于脚本的功能)。 将以下内容添加到“gwt.xml”中:

    <add-linker name='xsiframe' />
    

  • 使用单一来源:使用Apache的
    mod_proxy
    (或
    mod_jk
    )通过Apache代理Tomcat。没有人会使用
    :8080
    ,一切都会经过
    :80
    。请参阅将Tomcat与ApacheHTTPD和代理一起使用,网址为


当然,还有一种解决方案是抛弃HTTPD,用Tomcat为一切服务(最近的Java和Tomcat版本已经解决了它们的慢度问题)。

最好的解决方案是在客户端调用请求Tomcat应用程序时,将apache上的端口80调用重定向到8080

在apache上安装mod_jk,并将其配置为在所需路径上装载上下文 示例:(edit/mods_enabled/jk.conf)


然后应该设置为工作,当出现包含myAppDir的url时,apache服务器将把调用重定向到tomcat,答案将从apache返回。

最好的解决方案是在客户端调用请求tomcat应用程序时,将端口80调用重定向到apache上的8080

在apache上安装mod_jk,并将其配置为在所需路径上装载上下文 示例:(edit/mods_enabled/jk.conf)


然后您应该设置为工作,当出现包含myAppDir的url时,apache服务器将把调用重定向到tomcat,答案将从apache返回。

使用tomcat将evertyhing移动到端口80?使用tomcat将evertyhing移动到端口80?谢谢Thomas。我喜欢“使用单一来源”的方法。我现在正努力做到这一点,并让你尽快知道。不幸的是,我有一个“500内部服务器错误”,我不知道如何摆脱它。完成它!“单一来源”最终效果良好。我必须考虑到:使一切顺利。非常感谢,谢谢你,托马斯。我喜欢“使用单一来源”的方法。我现在正努力做到这一点,并让你尽快知道。不幸的是,我有一个“500内部服务器错误”,我不知道如何摆脱它。完成它!“单一来源”最终效果良好。我必须考虑到:使一切顺利。非常感谢。谢谢你详细的回答。据我所知,我更喜欢使用Tomas Brower建议的mod_代理,因此我不必创建任何连接器,这对于不熟练的人来说不是一件容易的事情。谢谢你的详细回答。据我所知,我更喜欢使用Tomas Brower建议的mod_代理,因此我不必创建任何连接器,这对于不熟练的人来说不是一件容易的事情。
    <VirtualHost *:80>
    . Here is the rest of the
    . of the config of
    . the host
    # Tomcat jk connector settings
    JkMount /*.jsp ajp13_worker
    JkMount /myAppDir/* ajp13_worker
    JkMount /myAppDir* ajp13_worker
    JKMount /manager* ajp13_worker
    JkMount /manager/* ajp13_worker
    </VirtualHost>
<!-- Define an AJP 1.3 Connector on port 8009 -->

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Host name="localhost" appBase="webapps" unpackWARs="true"
   autoDeploy="true" >

          <Context path="/" docBase="/var/lib/tomcat7/webapps/myAppDir/"
                       debug="0" reloadable="true" />
          <!-- please notes on logs down below -->
     <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="/var/lib/tomcat7/logs" prefix="tomcat_access_" 
            suffix=".log" pattern="common" resolveHosts="false" />
  </Host>
worker.myapp2.port=8009
worker.myapp2.host=localhost
worker.myapp2.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker