Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分离前端和后端Tomcat应用程序?_Java_Javascript_Spring_Tomcat_Single Page Application - Fatal编程技术网

Java 分离前端和后端Tomcat应用程序?

Java 分离前端和后端Tomcat应用程序?,java,javascript,spring,tomcat,single-page-application,Java,Javascript,Spring,Tomcat,Single Page Application,我目前有一个Spring应用程序,可以通过嵌入式Tomcat(通过Spring引导)在本地运行或调试,也可以打包成war文件并作为应用程序部署。它有一些RESTful服务,这些服务由单页应用程序使用 现在,所有静态资产(包括前端javascript)都包含在/src/main/webapp目录中。这允许快速开发后端(嵌入式tomcat可以快速重启以进行后端更改)和前端代码(在应用程序以嵌入式模式运行时,只需刷新即可获取对html/javascript/css所做的任何更改) 然而,由于我无法控制

我目前有一个Spring应用程序,可以通过嵌入式Tomcat(通过Spring引导)在本地运行或调试,也可以打包成war文件并作为应用程序部署。它有一些RESTful服务,这些服务由单页应用程序使用

现在,所有静态资产(包括前端javascript)都包含在/src/main/webapp目录中。这允许快速开发后端(嵌入式tomcat可以快速重启以进行后端更改)和前端代码(在应用程序以嵌入式模式运行时,只需刷新即可获取对html/javascript/css所做的任何更改)

然而,由于我无法控制的各种原因,我将不得不将前端和后端分离为单独的项目,这些项目将分别开发和部署。这就提出了一个问题——如何在同一台开发机器上快速开发后端和前端,从而建立本地开发环境?前端servlet和后端servlet不能在同一个端口上运行,如果我将它们设置为使用不同的端口,那么浏览器不会让前端javascript在不设置CORS的情况下向后端servlet发出请求,我希望避免这种情况

最终,这两个应用程序要么部署到同一个Tomcat实例,要么路由器将流量路由到它们,使它们仍然在同一个域上,这样它们就可以在没有COR的情况下相互通信。但这对本地开发没有帮助。

“前端servlet和后端servlet不能在同一端口上运行” 是的,tomcat可以运行多个servlet,实际上它可以在同一个实例上运行多个应用程序。只需确保应用程序可以在URL级别进行区分 i、 e

也许我没有完全理解你的问题……

我最终使用了nginx:

我在conf/nginx.conf中添加了以下内容:

    location /site1/ {
        proxy_pass http://localhost:8081/;
    }

    location /site2/ {
        proxy_pass http://localhost:8080/;
    }

并将我的两个应用程序(site1和site2)分别配置为在端口8081和8080上运行。这有效地模拟了共享tomcat部署(一个域/端口),同时使用了两个运行中的tomcat embedded实例(在两个端口上)。

即使它们是由两个独立的人开发的,您也希望您的开发环境看起来尽可能像生产环境,因此,您仍然应该在同一个开发服务器中部署它们。假设你做的是前端,那么你可以从你的风投,或者像maven一样的回购协议,或者通过电子邮件访问最新的后端(其实没关系,尽管maven是最简单/最好的)。您应该将其与前端设备一起部署,并继续处理BIT,只在需要时更新服务器端。听起来是开始为静态资产使用不同域的好时机吗?static.domain.com(良好的缓存头,没有cookie等)?无论哪种方式,如果您都想查看具有单独“js客户端”的单个服务器,请在web.xml中设置X域许可证-找到指向该服务器的链接-它们可以很容易地在一个tomcat实例中是同一端口,但不能是两个tomcat嵌入式实例,因为他们将不再处于相同的过程中。
    location /site1/ {
        proxy_pass http://localhost:8081/;
    }

    location /site2/ {
        proxy_pass http://localhost:8080/;
    }