IDEA 部署Tomcat教程(透彻理解操作)
本文只讲 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教程(透彻理解操作)的更多相关文章
- SpringBoot项目打war包部署Tomcat教程
一.简介 正常来说SpringBoot项目就直接用jar包来启动,使用它内部的tomcat实现微服务,但有些时候可能有部署到外部tomcat的需求,本教程就讲解一下如何操作 二.修改pom.xml 将 ...
- Linux系统下部署Tomcat服务器
详细步骤如下: 1.下载xshell5和xftp5并安装,登录连接服务器,新建会话窗口: 2.安装配置JDK1.8,具体操作方法如下: (1)下载JDK地址:http://www.oracle.com ...
- maven自动部署到远程tomcat教程
使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...
- renren-fast部署发布教程(tomcat)
renren-fast部署发布教程(tomcat) 说明:renren的开发文档需要付费,官方的生产部署介绍相对比较简单,因此记录自己的部署过程 为了方便,前后端我都部署在同一台linux服务器上,其 ...
- spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】
1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...
- Solr 4.0 部署实例教程
Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...
- Windows 8实例教程系列 - 理解应用框架
原文:Windows 8实例教程系列 - 理解应用框架 Windows 操作系统之所以风靡世界,是因为其“易学易用”,从用户的角度出发,让数以万计的非IT人员使用计算机实现娱乐,工作等目的.Windo ...
- Jenkins自动部署Tomcat项目
Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:
- linux环境下部署tomcat
服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...
随机推荐
- .NET Core 使用NPOI读取Excel返回泛型List集合
我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 网上有很多关于npoi ...
- 高性能TcpServer(C#) - 3.命令通道(处理:掉包,粘包,垃圾包)
高性能TcpServer(C#) - 1.网络通信协议 高性能TcpServer(C#) - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpS ...
- 邮箱图标的css样式
<div> <div style="position:relative; height:40px;width: 70px;border:2px solid black; m ...
- angular获取时间
获取24小时制的时间<h1> {{time}} </h1> <script> angular.module('app', []) .controller('ctrl ...
- 如何将LNMP拆分为LNP+MySQL
1.备份172.16.1.7上的数据库信息 [root@web01 ~]# mysqldump -uroot -p'oldxu.com' --all-databases > mysql-all. ...
- windows7系统 执行应用程序报 Error accessing specified device (Error: 2)
--------------------------- ---------------------------Error accessing specified device (Error: 2) - ...
- 入职一个月后 对.net的感想
我本来应该找Java工程师的岗位的,因种种原因进入了.net开发工程师.然后,我进入了一扇新世界的大门. 1.语法不同,思想相同. 刚入职那几天,每天都好蒙,.net代码语法啥的都和Java不一样,a ...
- Window平台下的静默下载并安装软件脚本bat
一,隐藏命令窗口 当我们运行bat脚本的时候,弹出CMD窗口.如果要隐藏窗口可以在bat脚本开头处写一下代码: @echo off if "%1" == "h" ...
- java Random类生成随机数
封装一个方法: import java.util.Random; public class RandomUtil { /** * nextInt(num) 产生[0 ~ (num-1)]的随机数, 闭 ...
- Django 练习班级管理系统六 -- 编辑老师列表
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...