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

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

在开发中大型的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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 3 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Sphinx

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

    1 引用 • 229 关注
  • Git

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

    211 引用 • 358 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 438 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 242 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26030 引用 • 108021 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 59 回帖 • 5 关注
  • Excel
    31 引用 • 28 回帖 • 2 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 280 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 675 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 504 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 4 关注
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • sts
    2 引用 • 2 回帖 • 243 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 6 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 737 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 28 关注
  • CodeMirror
    2 引用 • 17 回帖 • 166 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 363 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 541 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 5 关注