Tomcat部署IDEA项目
idea 整合 Tomcat
基本流程
创建JavaWeb项目
版本选择
不同JavaEE版本对应的Tomcat版本和Servlet版本如下:
JavaEE版本 | Tomcat版本 | Servlet版本 | 运行环境 |
---|---|---|---|
1.3 | 4.1 | 2.3/1.2 | JDK1.3 |
1.4 | 5.0 | 2.4/2.0 | JDK1.4 |
5.0 | 5.5/6.0 | 2.5/2.1 | JDK5.0 |
6.0 | 7.0 | 3.0/2.2 | JDK6.0 |
7.0 | 8.0 | 3.1/2.3 | JDK7.0 |
8.0 | 9.0 | 4.0 | JDK8.0 |
低版本的Tomcat不支持高版本的JavaEE。高版本的Tomcat支持低版本的JavaEE,可能会出现问题,所以最好一一对应。
我们JDK8支持对应的JavaEE 8.0,Tomcat9.0,Servlet4.0为例。从Servlet3.0开始就支持注解配置了,所以我们可以不勾选web.xml。
安装完项目之后,我们会得到以下目录结构,src存放我们的java代码,而web目录下存放HTML,CSS,JS等前端资源,还有jar包依赖。
部署项目
按照图示依次选择:
- 右上角的ADD CONFIGURATIONS
- +号
- Tomcat Server 的Local
部署项目
如果你点击了Artifact不是直接到了这个界面,而是有一个选择框。一般会有两个同名但是后缀不一样的war打包方式,我们选择后缀名为exploded的生产环境方式部署。生产环境部署支持热部署,就是在程序运行的时候修改项目也能立刻生效,而另一种打包方式是发布方式,只能重启服务器来更改配置。
Application context为虚拟路径,建议把后缀名去掉,即改为项目名。如果你把虚拟路径设置为/
,那么我们直接访问localhost:8080/
即可直接访问项目,但是对于多个项目的部署不推荐,个人学习的时候部署单个项目可以这么做。
选择部署方式
如图:
- Application server:表示tomcat服务器版本,如果你电脑配合正确,这里可以直接看到你安装的Tomcat
- Tomcat启动完毕之后,克可以选择弹出浏览器,并且浏览器自动打开你配置的虚拟目录,方便立刻查看结果,可以选择浏览器,点击After lauch关闭此功能
- On Update action :我们的服务器控制界面有一个Update按钮,默认情况下是Restart Server,如果我们选择Update classes and resource则我们使用热部署的范式部署更新我们的更改。
- HTTP port:端口号,默认8080.如果改为HTTP的默认端口80,则我们访问目录是可以直接:
/localhost/项目名
,不需要输入localhost:80/项目名
示例
这里我部署了一个简单的前端界面
启动tomcat
右上角启动(快捷方式)
下方菜单栏启动
这时候会看到控制台疯狂打印红色字,这不是错误,而是日志信息,稍微等待几秒只有,看到以下内容就说明启动成功了!
由于之前设置虚拟路径为/JavaWeb,成功访问项目
部署非JavaWeb项目
有点时候我们已经有一个普通的Java项目,如果要是用tomcat服务器,暴力的方式是复制粘贴到新的JavaWeb项目中,但是这不好的,我们的IDEA支持我们在已有的项目基础上添加新的模块
添加web模块
点击右上角的项目结构按钮,点击Module。点击+号,然后选择Web模块,就叫Web不要选JavaEE什么的。然后他会提示你会生成一个web文件夹和web.xml文件,路径你可以自己修改。如果不需要web.xml可以web.xml的-
号删除web.xml文件夹的创建。
我们看到新增加的web目录,以及自动生成的web.xml文件。
添加打包方式
生成了web目录还不过,还要添加一下war打包。
弹出对话框选出你要添加的war的打包项目,对于一个项目有多个子模块时,这里有多重选择,选自己要打包的。
去tomcat部署项目,此时可以正常部署
常见问题
端口被占用
我们可以杀死8080线程,也可以切换端口,一台计算机可以开启多个tomcat,但是端口不能冲突
部署项目之后,后序做出的更改没有生效
比如我们部署了一个项目,可能我们进行大量代码的修改,下一次启动服务器时,还是之前的效果。这个问题和打包和缓存有关系,解决方法是重新打包,方法也很简单,直接把out文件或者叫target文件删除,让JVM重新编译一遍即可。
jar包没找到
在我们之前的项目中,我们导入jar包都是直接加入到lib目录中的,在web项目中,我们需要把这个lib转移到web目录下,不然报类型找不到异常。
添加到lib目录下即可