IDEA使用Tomcat运行Web项目及其常见报错
一、Project Structure
目的:让IDEA知道这是个Web项目
-
Modules
目的:加载Web相关的配置和资源
右键
目标模块 -Add
-Web
Web配置窗口
-
确认
web.xml
路径是否正确,不正确需要手动修改web.xml即Deployment Descripters下的Path
-
确认
Web资源目录
是否正确,不正确需要手动修改web资源目录
即WEB-INF
上级路径(JSP
等放置的位置)应用程序一般默认为
web
文件夹,但是我的项目为webapp
文件夹,改为正确的webapp
-
-
Artifacts
即编译后的Java类,Web资源等的整合,用以测试、部署等工作
白话一点,就是说某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式
某个module有了 Artifacts 就可以部署到应用服务器中了
+
-Add
-Web Application: Exploded
-From Modules...
- 选择我们的项目or模块区分: (1)jar:Java ARchive,通常聚合Java类文件、相关数据和资源(文本、图片等)到一个文件,以便分发Java平台应用软件或库; (2)war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源; (3)war exploded:展开,不压缩。直接把文件夹、jsp页面 、classes等移到Tomcat 部署文件夹里面 因此这种方式支持热部署,建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来 热部署:对于Java应用程序来说,热部署就是在运行时更新Java类文件。
二、Tomcat配置
-
点击IDEA右上方执行的
Add Configuration...
-
弹出的窗口中点击
+
,出现的选项中往下滑,选择Tomcat Server
-Local
这步添加Tomcat配置
-
点击
Deployement
页签,点击+
,选择Artifact...
这里IDEA会将刚才的
项目
的artifact
放入窗口中但也有可能存在其他的
artifact
,选择我们需要的 -
修改
Application context
,可以只保留一个/
IDEA会自动为我们生成项目根路径
如果其他配置没问题结果访问404很可能是因为这个没改
-
点击
Server
页签,检查URL
处是否与步骤4
中设置的同步IDEA会自动同步
三、Tomcat运行
给我点那个绿色的Run
!!!!
当你点击运行Tomcat时,IDEA在做什么
-
编译。
IDEA在保存后不会做编译,不像Eclipse的保存即编译,
因此在运行server前会做一次编译,
编译后class文件存放在指定的项目编译输出目录下;
-
根据artifact中的设定对目录结构进行创建;
-
拷贝web资源的根目录下的所有文件到artifact的目录下(见1.2.3);
-
拷贝编译输出目录下的classes目录到artifact下的WEB-INF下(见1.2.2);
-
拷贝lib目录下所需的jar包到artifact下的WEB_INF下;
-
运行server,运行成功后,如有需要,会自动打开浏览器访问指定url。
四、一些报错及解决
4.1、org.springframework…xxx不存在
4.1.1、情况一:pom.xml中的maven的dependency没加载好(红色version)
-
方法一:头铁再试一次
右击项目
-Maven
-Reimport
IDEA将通过网络自动下载相关依赖,并存放在Maven的本地仓库中
-
方法二:换个version罢
如果还不行,可能的原因及解决:
原因一:你的maven
配置了从aliyun
镜像下载,而aliyun仓库
中恰好没有对应version
原因二:版本号version
暂时用不了(我也不知道是什么缘故),换个版本号
就好了
解决:访问https://mvnrepository.com/
(需要梯子)
搜索需要的artifact
,复制其他version
的dependency
并粘贴到pom.xml
中 -
方法三:你是不是装过不止一个maven
检查
File
-Settings
-Build,Execution,Deployment
-Maven
Maven home directory
选择你本次项目要用的mavenUser settings file
的settings.xml
里可能配置了从aliyun
下载(自己权衡要不要改) -
方法四:手动下载jar包
如果上面的你都尝试过了,还是不行(哦,可怜的人儿):
你需要baidu.com
搜索对应版本的jar包并下载
把jar包
放到maven
的本地repository文件夹
中的对应位置(这个对应位置要点进一个个小文件夹)
注意删除最里面那个文件夹里以 .lastUpdated为后缀的文件(下载失败的),然后粘贴
刷新一下maven依赖
将Maven的刷新设置为自动,配置方法为:
(1)打开File-Settings-Maven
(2)勾选Import Maven projects automatically
4.2.2、情况二:pom文件相关的依赖明明都下载好了,但运行还是找不到XXX相关的包
**方法一:**删除target文件夹
下所有文件,重新编译运行。
方法二:File
- Settings
- Build,Execution,Deployment
- Maven
- Runner
勾选Delegate IDE build/run actions to Maven
选择自己安装的JRE的路径
4.2、java.io.FileNotFoundException: class path resource [spring/] cannot be resolve
**描述:**此异常是说找不到spring
的配置文件。
**原因:**为了防止mybatis
的mapper
文件被过滤掉,在pom.xml
的build
节点下加入了如下代码
<!--如果不加如下配置maven打包时不会将mapper文件打包进去-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
解决:maven
默认扫描src/main/java
中的文件但并不理会src/main/resources
中的xml文件,
因此,添加resource节点,使其扫描src/main/resources
中的xml文件
<!--如果不加如下配置maven打包时不会将mapper文件打包进去-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<!--修改后的文件-->
<!--如果不加此节点,resources文件中的spring配置文件将会找不到-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
4.3、maven依赖的多个版本依赖冲突
描述:当出现下面问题异常的时候,如果clean jar包之后还是无法成功启动项目,可以考虑是这个问题
1、NoDefClassException
2、ClassNotFoundException
3、NoSuchMethodError
4、NoSuchFieldError
查看:在界面右侧可找到Maven
,点开,小图标里找到Show Dependencies
,
点击后即可查看当前maven模块的依赖结构图
,红色的线即为依赖冲突。
解决:
File
-Settings
-Plugins
- 搜索maven helper
-install
- 打开
pom.xml
,在编辑器下方 控制台上方,点击text旁边的Dependency Analyzer
- 左侧为
冲突的jar包
,挨个点开,把右侧红色的挨个右击exclude
五、参考博客
- IDEA使用Tomcat运行web项目教程:http://t.csdn.cn/44qjF
- idea运行项目 程序包org.springframework…xxx不存在的解决办法:http://t.csdn.cn/kzfyg
- 解决idea打开的项目中maven依赖下载失败问题:http://t.csdn.cn/6nNLs
- 如何将下载到本地的JAR包手动添加到Maven仓库:http://t.csdn.cn/82XIn
- war和war exploded的区别:http://t.csdn.cn/quYCO
- IDEA项目运行项目报404错误——org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。:http://t.csdn.cn/CY4WI
- IDEA部署项目到tomcat运行成功但是页面404的两种原因:http://t.csdn.cn/E3IBU
- java.io.FileNotFoundException: class path resource [spring/] cannot be resolve 《异常信息》:http://t.csdn.cn/5JDz8
- idea如何解决jar包冲突:http://t.csdn.cn/qyKTp