如何在开发时部署和运行前后端分离的 JavaWeb 项目

本贴最后更新于 2799 天前,其中的信息可能已经天翻地覆

在开发中大型的JavaEE项目时,前后端分离的框架逐渐成为业界的主流,传统的单机部署前后端在同一个项目中的工程项目越来越少。这类JavaWeb项目的后端通常都采用微服务的架构,后端会被分解为诸多个小项目,然后使用dubbo+zookeeper或者springCloud来构建微服务,前端则会是一个单独的项目,前台的请求通过微服务来调用。但是,不同与传统的web项目,这类前后端分离的项目如何在开发中部署和运行呢?

当前后端分离时,后端项目一定会被加载到tomcat的webapp目录下面,但是前端的资源院该如何被访问到呢?这里以tomcat这个中间件为例,探讨在开发这类项目的时候,如何让前后端分离的项目部署并且运行起来,即后端项目部署在tomcat之后如何在运行时访问静态资源(非上线部署)。

主要有两种方案:1.在本地通过Nginx来处理这些静态资源。2、将静态资源统一放入一个javaweb应用中,并将自动生成的war包随后端项目一期丢入tomcat。下面详细介绍

一、使用Nginx来访问静态资源。

在本地安装nginx并且修改nginx.conf,修改相关配置,将web访问的端口的资源进行更改,配置如下:

server { listen 80; server_name localhost; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">charset</span> utf-<span class="hljs-number" style="box-sizing: border-box; color: teal;">8</span>; <span class="hljs-comment" style="box-sizing: border-box; color: #999988; font-style: italic;">#access_log logs/host.access.log main;</span> <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">location</span> / { <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_pass</span> <span class="hljs-url" style="box-sizing: border-box;">http://tomcat_pool</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_redirect</span> <span class="hljs-built_in" style="box-sizing: border-box; color: #0086b3;">off</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_set_header</span> HOST <span class="hljs-variable" style="box-sizing: border-box; color: teal;">$host</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_set_header</span> X-Real-IP <span class="hljs-variable" style="box-sizing: border-box; color: teal;">$remote_addr</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable" style="box-sizing: border-box; color: teal;">$proxy_add_x_forwarded_for</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">client_max_body_size</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">10m</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">client_body_buffer_size</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">128k</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_connect_timeout</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">90</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_send_timeout</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">90</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_read_timeout</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">90</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_buffer_size</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">4k</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_buffers</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">4</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">32k</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_busy_buffers_size</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">64k</span>; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">proxy_temp_file_write_size</span> <span class="hljs-number" style="box-sizing: border-box; color: teal;">64k</span>; } <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">location</span> <span class="hljs-regexp" style="box-sizing: border-box; color: #009926;">~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|woff|woff2|ttf|eot|map)$</span> { <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">root</span> D:\Workspaces\esop-html; <span class="hljs-title" style="box-sizing: border-box; color: #990000; font-weight: bold;">index</span> index.html; }</code></pre> ​ listen对象改为本地的tomcat访问端口,最下面location中的root改为前端项目中静态资源的位置,这样就可以实现只部署后端的项目就能访问前端的页面了。 二、将前端项目转换为动态的web项目,随后端项目一起丢入tomcat 这个方案省去了在本地安装和配置nginx,但是也只适用于开发阶段项目的部署运行和调试,真正在生产环境通常前后端项目会部署在不同的服务器。 如果是Intellij Idea,在导入前端项目之后,右键项目 add framework support --> web application,这时将会把前端项目转换为一个javaweb项目,然后将静态资源放在生成的web目录下即可。 如果是eclipse,可以新建一个javaweb项目然后将静态资源放入web或者webcontent目录下,或者直接先导入前端项目,然后通过 project facts 将项目转换为dynamic web项目并勾选 js等相关配置。 然后,运行项目时把后端的war包和前端的war包一同添加到 deployment中运行即可。
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 7 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 700 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 44 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 140 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 11 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 257 关注
  • 笔记

    好记性不如烂笔头。

    311 引用 • 796 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 604 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 168 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 170 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 787 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖
  • Follow
    4 引用 • 12 回帖 • 8 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 253 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 213 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    150 引用 • 257 回帖 • 2 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注