本文只讲 IDEA 部署 Tomcat 的各项设置,帮助你了解全流程,不再是网上那种只讲怎么做不讲为什么的教程。

图都是在 Linux 下用 frameshot 截的,所以不要好奇为什么是 /home/ 而不是 D:\

本文作者 yucloud.cnblogs.com,转载请在明显位置注明出处和转载自哪里




在 IDEA 上控制 Tomcat 部署,我们就必须了解各项选项的详细作用:

首先我们看一下 IDEA 里的当前项目结构配置

File -》 Project Structure

设置 Web 资源目录和 Tomcat读取的 web.xml 配置文件

然后为了让 Tomcat 读取到我们需要的 Web 资源

要设置一下 Web资源路径和 web.xml 配置文件

-> Facets -> 点加号添加 -> Web

注意:这里把 Web 资源目录设置为根目录"/" ,其实是指 设置为部署目录的根目录(即下下张图里,提到的那个 目录的下面)

再点 Artifacts ,这里熟悉吧?这里就是 Tomcat 部署设置的一部分

如果你还需要 module(当然Eclipse里叫项目) 里的一些文件,可以右击 Available Elements下的模块(如右击图中的 servlet2Spring,选择 Put Into Output Root

Tomcat 的 Run/Debug 配置

点击菜单栏下的 Edit Configurations... (我缩小了窗口,所以在左边,但是一般都是在右边的)

这里可以点加号,添加一个 External Source... (额外的资源目录作为服务器部署目录)


处理常见问题

让我们来处理一些常见问题

Web资源找不到

如 html jsp css js 等文件没有在 IDEA 部署目录里

检查 Facets 里是否有 Web,并且各种路径配置是否正确

我想把项目下的 README.md 也放到部署目录

可以右击 Available Elements下的模块(如右击图中的 servlet2Spring,选择 Put Into Output Root更多详见标题2

上传文件失败 404 错误

不止是上传文件错误,很多 404 问题都应该按如下步骤检查

检查一下你设置的 http 路径是否可以访问,用 GET/POST 工具试一下

比较有可能是你设置的 Tomcat 路径是 例如http://localhost:8080/Demo_war_exploded 但是你用的上传路径是 http://localhost:8080/upload

  • 这时候要么把上传路径改为http://localhost:8080/Demo_war_exploded/upload
  • 要么把 Tomcat Run/Debug 配置的 URL 改为 http://localhost:8080/ 并设置 Application Context 为"/" 更多详见标题3

html 超链接打开错误

检测一下地址栏上的地址,是不是变了

假如当前 http 路径是 localhost:45/Demo_war_exploded/ ,点击链接之后变成了 localhost:45/testa

写超链接时要注意 "/testa" "./testa" "testa" 的区别

  • /testa 是指域名根路径 ,如 localhost:45/testa
  • ./testa 和 testa 都是指当前的 http 路径 ,如 localhost:45/Demo_war_exploded/testa

附表

路径 详解
/ 域名根路径
./ 当前路径
../ 当前路径的上一层

可以看出路径是符合 Unix 规范

另外,域名根路径和部署目录不一定是对应的,这里拿上面的示例讲一下

上面示例的部署目录对应的 http路径 是 localhost:45/Demo_war_exploded

而域名是 localhost:45

域名根路径是 localhost:45/

可见这里的域名根路径访问的不是 JavaWeb 项目的部署路径

这里你可能有疑惑,为什么我们打开域名localhost:45和域名根路径localhost:45/是一样的?

  • 其实,这都是浏览器或服务器的功劳,是它们帮忙搞定了这些路径补全、重定向、转发的问题

Tomcat 常见报错

检查 web.xml 里的过滤路径是否正确

错误代码

<url-pattern>test</url-pattern>

改正:

<url-pattern>/test</url-pattern>

url-pattern 这个元素好像没有相对路径的写法

就我知道的,它只支持

写法示例 写法解释
*.jk 匹配后缀名为 jk 的文件
/go/ 精确绝对路径
/go/* 模糊路径匹配

但是混合写法是错的: /go/*.do/go* 都是非法的

另外匹配的原则是:详细的路径优先,后缀名匹配优先级最低

备注:在 Tomcat 或 Spring 的 XML 配置文件里,HTTP URL 的 "/" 根路径都是域名根路径如 localhost:8081/

如果有不想被拦截的静态资源,可以用 servlet-name 为default的默认拦截器(这个拦截器会放行你设置的 url ),如

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>

详见: https://blog.csdn.net/hello5orld/article/details/9407905

部署原理见: Intellij idea 的tomcat原理讲解

写完文章才看到这篇,早知道不自己截图了....




最后,Tomcat 的部署目录和Home目录变量为什么是



图中为知乎陈龙的回答

IDEA 部署Tomcat教程(透彻理解操作)的更多相关文章

  1. SpringBoot项目打war包部署Tomcat教程

    一.简介 正常来说SpringBoot项目就直接用jar包来启动,使用它内部的tomcat实现微服务,但有些时候可能有部署到外部tomcat的需求,本教程就讲解一下如何操作 二.修改pom.xml 将 ...

  2. Linux系统下部署Tomcat服务器

    详细步骤如下: 1.下载xshell5和xftp5并安装,登录连接服务器,新建会话窗口: 2.安装配置JDK1.8,具体操作方法如下: (1)下载JDK地址:http://www.oracle.com ...

  3. maven自动部署到远程tomcat教程

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...

  4. renren-fast部署发布教程(tomcat)

    renren-fast部署发布教程(tomcat) 说明:renren的开发文档需要付费,官方的生产部署介绍相对比较简单,因此记录自己的部署过程 为了方便,前后端我都部署在同一台linux服务器上,其 ...

  5. spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】

    1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...

  6. Solr 4.0 部署实例教程

    Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...

  7. Windows 8实例教程系列 - 理解应用框架

    原文:Windows 8实例教程系列 - 理解应用框架 Windows 操作系统之所以风靡世界,是因为其“易学易用”,从用户的角度出发,让数以万计的非IT人员使用计算机实现娱乐,工作等目的.Windo ...

  8. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  9. linux环境下部署tomcat

    服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...

随机推荐

  1. JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...

  2. SQL Server中,如何查看每个数据库的Owner是哪个SQL Server账户,也就是谁创建的

    有时候我们作为SQL Server的DBA,会需要查找每个数据库的Owner是哪个SQL Server账户,也就是谁创建的. 我们可以使用系统存储过程"sys.sp_helpdb" ...

  3. convert datatable to List<T>

    public class DataConvert { public static List<T> ConvertDataTable<T>(DataTable dt) { Lis ...

  4. C#与vb.net源码代码互转网站

    该转换器是印度开发团队推出的,推出时间也挺长,仅支持C#和VB.net代码转换.代码转换地址: C# -> VB.NET  http://www.dotnetspider.com/convert ...

  5. 微信分享网页时自定义缩略图和简介(.net版本)

    要实现微信分享网页时自定义缩略图和简介,需开发者在公众平台网站中创建公众号.获取接口权限后,通过微信JS-SDK的分享接口,来实现微信分享功能. 下面来说明实现步骤. 第一部分 准备步骤 步骤一:注册 ...

  6. netcore sdk版本选择

    NetCore sdk并不是每个版本都支持VS2017工具,也不是每个版本的sdk版本号和Runtime版本号都一样,这就需要我们在创建某个版本的net core应用时注意: 使用不同版本的vs时需要 ...

  7. 你不知道的Go unsafe.Pointer uintptr原理和玩法

    unsafe.Pointer 这个类型比较重要,它是实现定位和读写的内存的基础,Go runtime大量使用它.官方文档对该类型有四个重要描述: (1)任何类型的指针都可以被转化为Pointer (2 ...

  8. Delphi - DateTimePicker控件日期格式

    设置成显示年.月.日.时.分.秒 1:将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm:ss',注意日期里月份对应的MM是大写,时间里的分钟对应的 ...

  9. 命令 docker rm | docker rmi | docker prune 的差异

    区别: docker rm : 删除一个或多个 容器 docker rmi : 删除一个或多个 镜像 docker prune : 用来删除不再使用的 docker 对象 一.docker rm 命令 ...

  10. ES6 入门系列 ArrayBuffer

    由来 推荐在这里阅读 js操作二进制数据三兄弟 ArrayBuffer对象, TypeArray视图和DataView视图 它们都以数组的语法处理二进制数据,所以统称为二进制数组 ::: tip 二进 ...