本文可能略长,请大家通过目录跳转食用
IDEA2021中创建JavaWeb项目
- 一. IDEA中使用Tomcat
- 二. 创建Javaweb项目
- 三. JavaWeb项目结构
- 四. IDEA部署Tomcat的原理
- 五. 手动部署在IDEA中编写好的JavaWeb项目
- 六. 记录一下不知道为什么报错的离谱情况
一. IDEA中使用Tomcat
1. 添加Tomcat的运行方法:
2. 新增一个configuration Templates
3. 选中到Tomcat的安装目录
点击ok以后,我们的Tomcat就在IDEA中配置好了
二. 创建Javaweb项目
对于JavaWeb开发需要使用的是 Ultimate IntelliJ IDEA,创建企业版的javaEE项目
修改一下,每次保存自动更新加载,不用重新启动服务再开(感觉没啥用,有时候还是要重启)
创建完以后看一下目录结构
三. JavaWeb项目结构
创建完以后看一下目录结构,这个是默认的结构,我们可能会改一些java包的名字
在我们编写一些代码,导入一些jar包,引入一些静态文件并运行后,我们的项目目录可能变成了下面这个样子:
为了防止一会标注后看不清,上面先放一个原始图片,下面来看一下分别某些模块会对应在哪里
可能图片会有一些不太清楚(孩子尽力了😭😭😭),这里主要是注意一下jar包和静态文件的位置
清楚了文件的位置关系以后,这可以帮我们应对一些非代码错误(比如导包出错),如果我们修改完代码,但是没有起到效果,我们可以去target对应的地方看看IDEA有没有帮我们把它映射进去,
因为我们最后部署在Tomcat上的是target中的东西,准确说是target下 xxxx-xx-SNAPSHOT 中的文件,就比如我现在这个项目,部署在Tomcat上的就是 \target\webLogin-1.0-SNAPSHOT下的文件,这我是怎么知道的呢,下面我们来看一下IDEA部署Tomcat的原理
四. IDEA部署Tomcat的原理
当我们运行我们的项目后,控制台会输出一些日志信息,我们可以找到这样一项
我们将 Using CATALINA_BASE 后的路径复制进文件资源管理器(就是文件夹)打开这个路径
在 /conf/ Catalina/ localhost/ 下我们可以看到一个.xml文件
通过记事本打开,里面只有一行配置
<Context
path="/webLogin_war_exploded"
docBase="D:\web\webLogin\target\webLogin-1.0-SNAPSHOT"
/>
其中 path 就是我们在浏览器访问的时候的虚拟目录,也就是在tomcat中配置的这个
而 docBase 就是部署在Tomcat中的我们的项目文件的路径,可以打开看一下这个路径中的文件
可以看到这个和我们开始JavaWeb项目结构分析中target的文件是一样的。
了解IDEA怎么帮我们部署的原理后,我们就可以手动将我们的项目部署在Tomcat上去了
五. 手动部署在IDEA中编写好的JavaWeb项目
进入刚才找到的docBase中设置的文件目录,将除了META-INF之外的文件都压缩为.zip文件
注意,这个zip文件的文件名,应该和你项目中设置的虚拟目录的名称相同,否则可能会找不到对应的jsp或servlet文件我这里为了演示,就不改了,这里一定要注意
将zip文件改后缀名为.war ,并复制在Tomcat安装目录下的webapps文件夹下
在bin目录下使用 statup.bat 来启动Tomcat
可以在刚才的webapps中看到,war文件被自动部署,现在我们就可以使用这个文件夹名作为虚拟目录来访问我们的项目了
六. 记录一下不知道为什么报错的离谱情况
- 之前用的包,突然就找不到了
可能是包的版本相互不太匹配,也可能是IDEA抽抽了
我们只需要重新导入对应的包(这里最好是版本匹配的包),然后最好重启一下IDEA - 明明改了js和css但没有效果
这里如果是外联js和css,需要重启Tomcat,重启过后最好看一下target中的文件是不是改了以后的新文件,有时候可能映射过去有延迟,实在不行就手动复制对应的文件到target对应的位置
如果还是没有效果,记得清一下浏览器的缓存,特别是get请求很容易被缓存,然后虽然我们修改了,但是我们请求的是之前的缓存文件 - 明明资源就在那,却找不到
这里涉及到项目路径问题,这里先简单记录一下
如果是在Servlet中进行转发(request.getRequestDispatcher()),我们的路径只用写资源路径就好了不用写虚拟目录,这里是从默认会从webapp下去查找,如果是Servlet中的重定向(response.sendRedirect()),需要写一下虚拟目录,后面再跟资源路径
如果是在jsp/html中进行资源的请求重定向等,都需要加上虚拟路径