当前位置: 首页 > news >正文

JavaWeb项目部署到Tomcat的三种方法

JavaWeb项目部署到Tomcat

  • Tomcat 的目录结构
  • 手动打包成 WAR 文件并部署
    • 部署一个基于 sevlet 技术栈的JavaWeb项目
    • 部署一个基于 SSM 技术栈的JavaWeb项目
  • 修改 conf/server.xml 文件
  • conf/Catalina 方式

Tomcat 的目录结构

Tomcat 的目录结构如下图

在这里插入图片描述

  • bin目录:二进制执行脚本目录,存放windows或Linux平台上启动和关闭Tomcat的脚本文件,可以直接开启关闭tomcat服务;
  • conf目录:存放Tomcat服务器的各种全局配置文件,其中包括 :server.xml(Tomcat的主要配置文件)和web.xml等配置文件;
  • lib目录:存放Tomcat服务器以及所有web应用都可以访问的jar文件;
  • logs目录:存放Tomcat执行时的日志文件,记录tomcat的运行状态和运行信息;
  • temp目录:存放Tomcat运行时所产生的临时文件;
  • webapps:Tomcat 的默认应用部署目录,将 Web 项目放入此目录,Tomcat 会自动部署并运行(支持 WAR 包、解压后的项目文件夹两种形式);
  • work:Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录下;
  • 其他文件:许可证和说明文件。

手动打包成 WAR 文件并部署

部署一个基于 sevlet 技术栈的JavaWeb项目

在 Eclipse 的 Project Explorer 中,右键点击需要部署的 JavaWeb 项目,选择 Export,在弹出的对话框中点击 WAR file

在这里插入图片描述

在 Web project 下拉菜单中,确认是需要打包的项目,在 Destination 处点击 Browse,选择一个你希望保存 .war 文件的位置,确保 Export source files 选项没有被勾选(除非你需要部署源码),点击 Finish,Eclipse 会开始打包,完成后会在指定位置找到生成的 .war 文件。

在这里插入图片描述

如果你的 Tomcat 正在运行请先将其停止,再将上一步生成的 web.war 文件复制到本地 Tomcat 安装目录下的 webapps 文件夹中,如下

在这里插入图片描述

进入 Tomcat 的 bin 目录点击 Windows: startup.ba t或 Linux/macOS: ./startup.sh 运行启动脚本,当 Tomcat 启动时,它会自动检测到 webapps 目录下的新 .war 文件,并将其解压成一个同名的文件夹,web.war 会被解压成 web 文件夹,如下

在这里插入图片描述

打开浏览器,通过 http://localhost:8080/项目名/访问的文件名 即可访问该项目

在这里插入图片描述

部署一个基于 SSM 技术栈的JavaWeb项目

这种部署项目的方式对于这两种技术栈的步骤只有打包方式不同,其余操作均相同

在 pom.xml 文件中 packaging 标签用于设置打包方式
执行 package或 install 命令,执行成功控制台输出 BUILD SUCCESS

在这里插入图片描述

执行成功后 Maven 会在项目根目录下创建一个 target 文件夹,在 target 目录下找到打包项目 WAR 文件,文件名通常是 项目名-版本号.war

在这里插入图片描述

将打包好的文件复制到 Tomcat 安装目录下的 webapps 文件夹下

在这里插入图片描述

Tomcat 在启动时会自动检测 webapps 目录下的新 WAR 文件,并将其解压成一个同名文件夹,然后部署它

打开浏览器,通过 http://localhost:8080/项目名/访问的文件名 即可访问该项目

在这里插入图片描述

需要注意的是这里可能会需要一个非常常见的部署问题,测试的时候正常,但部署之后再点击页面里的超链接可能会报404,还需要在地址栏中加上项目路径才可以访问成功,这是因为开发环境和部署环境的上下文路径不一致导致的。

在这里插入图片描述

在 IDE(如 IDEA/Eclipse)中测试时,如上图项目被部署在根上下文路径,此时项目的访问根路径是 http://localhost:8080/。部署到独立 Tomcat 后,解压后的WAR文件夹名会被 Tomcat 直接作为项目的默认上下文路径,所以该项目访问地址是 http://localhost:8080/ssmDemo-1.0-SNAPSHOT,浏览器解析 /account/findAll.do 时,/ 开头的路径是浏览器级别的绝对路径,它的解析规则是从 域名 / IP对应的最顶层地址 开始拼接,而不是从项目根目录开始,依然拼成 http://localhost:8080/account/findAll.do,并不是 http://localhost:8080/项目名/访问的文件名,找不到 account/findAll.do 对应的项目,所以返回 404。

解决方式:不要在代码中硬编码上下文路径,而是让程序在运行时动态获取上下文路径
使用 JSTL 的 <c:url> 标签
确保 JSP 页面顶部引入了 JSTL 标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
修改超链接和表单提交地址,将原来的相对路径用 <c:url> 标签包裹起来:<a href="<c:url value='/account/findAll.do' />">查询所有账户</a>

修改 conf/server.xml 文件

打开 tomcat 下 conf/server.xml 文件,在 <Host> 标签内输入项目配置信息,这种方法无需将项目复制到 Tomcat 的 webapps 目录,灵活性更高

Tomcat 的 server.xml 是核心配置文件,负责定义服务器的端口、引擎、虚拟主机(Host)等核心组件。其中 Host 标签代表一个虚拟主机(默认是 localhost),所有 Web 项目的部署配置都需嵌套在 <Host> 内。

在这里插入图片描述

<Context path="/web" docBase="C:/Users/HP/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web" reloadable="true" />

通过添加 <Context> 元素,我们告诉 Tomcat 当浏览器访问 http://主机名:端口/[path] 时,实际去 docBase 指定的路径加载 Web 项目资源。

path:浏览器访问时的路径名
docBase:Web 项目的根目录在磁盘上的实际位置,即编译后的项目路径
reloadble: 项目文件修改后,Tomcat 是否自动重新加载项目

启动 Tomcat 后打开浏览器,通过 http://localhost:8080/项目名/访问的文件名 即可访问该项目

在这里插入图片描述

部署前面那个基于 SSM 技术栈的JavaWeb项目使用的是

<Context path="/ssm" docBase="D:/javacode/ssmDemo/target/ssmDemo-1.0-SNAPSHOT" reloadable="false" />

打开浏览器,通过 http://localhost:8080/项目名/访问的文件名 即可访问该项目

在这里插入图片描述

由于使用了 JSTL 的 <c:url> 标签,访问地址不再出错

conf/Catalina 方式

进入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目录,新建一个 项目名.xml 文件 ,在这个新建的 xml 文件中,增加下面配置语句

在这里插入图片描述

<Context path="/web" docBase="C:/Users/HP/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web" reloadable="true" />

在这种部署方式下,path 属性可以省略,因为 Tomcat 会自动使用 XML 文件名作为 path,如果同时指定了文件名和 path 属性,path 属性会覆盖文件名。

这种方法的本质是将每个 Web 项目的部署配置(<Context>元素)从 Tomcat 的核心配置文件 server.xml 中分离出来,每个项目使用一个独立的 XML 文件进行配置。
配置文件存放位置为 Tomcat安装目录/conf/Catalina/localhost/,配置文件内部只包含该项目的 <Context> 元素,当 Tomcat 启动时,它会自动扫描 conf/Catalina/localhost/ 目录下的所有 .xml 文件,每找到一个文件,它就会根据文件名和文件内的配置来部署一个 Web 应用。

启动 Tomcat 后打开浏览器,通过 http://localhost:8080/项目名/访问的文件名 即可访问该项目

在这里插入图片描述

部署前面那个基于 SSM 技术栈的JavaWeb项目使用的是

<Context docBase="D:/javacode/ssmDemo/target/ssmDemo-1.0-SNAPSHOT" reloadable="false" />

在这里插入图片描述

由于使用了 JSTL 的 <c:url> 标签,访问地址不再出错

http://www.dtcms.com/a/460999.html

相关文章:

  • MyBatis配置全解析:核心要点详解
  • apache-tomcat 安装部署
  • 如何为卫生中心构建安全高效的网络系统?
  • 抖音代运营业务介绍seo文案范例
  • 珠海网站排名提升昆明网站建设frf
  • 使用 Loki + Promtail + Grafana 实现 Docker 容器日志采集与可视化
  • Dockerfile实战案例详解
  • Paimon系列:主键表流读之changelog producer
  • 本地 Docker 镜像送上云:腾讯云无服务器与容器化全栈迁移实战
  • win10安装spark3.1详细流程(小白用)
  • Spark on k8s部署
  • Kotlin 内联函数、高阶函数、扩展函数
  • 用化学方法nmp溶剂从佳能cmos传感器上剥离拜耳矩阵和微透镜
  • Apache Tomcat 详解
  • 矩阵奇异值分解(SVD)中Golub–Kahan 双对角化 + 对双对角矩阵的隐式QR详解
  • QT MVC中Model的特点及使用注意事项
  • wordpress最快仿站宁波网络营销服务
  • 徕卡RTC360助力铝单板设计效率提升
  • EasyExcel 读取 Excel 文件指南
  • LabVIEW光栅旋转式光谱仪
  • 上海营销网站设计去设计公司还是去企业
  • 怎么查询自己注册的商标东营网站建设课程定位优化
  • 【rabbitmq 高级特性】RabbitMQ 延迟队列全面解析
  • linux学习笔记(22)线程同步——线程信号量
  • 如何用营销自动化提升开信率与转化率
  • 人形机器人安全研究
  • 比斯特自动化|为什么焊接18650电池离不开点焊机?
  • 多字节串口收发IP设计(二)串口通信扫盲
  • 人工智能基础知识笔记十七:微调方法
  • 北京企业免费建站农八师建设兵团社保网站