IntelliJ IDEA项目结构配置问题导致的tomcat启动后404错误

背景:朋友扔过来一个小程序服务端,让帮忙看一个问题,从git拉下来后,因为时间紧张,上IDEA后,并没有检查项目结构配置,直接tomcat运行了,结果发现访问一直404,检查web.xml、jsp文件等常现问题点都没问题,很纳闷,就从tomcat开始往后撸,最终定位到是因为IntelliJ IDEA的项目结构配置中 Modules和Artifacts的配置问题。顺便整理下tomcat 404排查点和IntillJ IDEA项目结构配置,提醒自己最基本的东西往往是致命的。

一、tomcat 404 排查点

1、检查端口

404 代表请问的资源不存在,说明tomcat已经启动了,所以先查看访问的连接中端口是不是跟配置的一样,如果不一样就会报404

2、环境变量

如果你本地有两个tomcat。暂且叫A和B,自己分明运行的B,但却启动了A,这种情况的出现是因为在环境变量中可能会有两个属性:CATALINA_HOME 和 CATALINA_BASE 如果这两个值指向的是A,那么就会出现此情况。

解决办法:

(1)删除这两个属性

(2)找一个不受环境变量影响的tomcat来用

3、检查web应用是否成功被加载

通过IDEA日志或者tomcat中的日志文件,可以查看启动过程中是否加载了项目,是否报错,如果报错了,那么报404可能是web应用的问题

4、tomcat 下的webapps目录中的ROOT目录

有时,在server.xml中配置了<context>是以“/”为开头的path,同事webapps目录下还存在一个ROOT目录,这个ROOT目录也是在告诉tomcat, 已“/”为开始路径,然而tomcat只能二选一,就产生了冲突,默认情况下tomcat会选择ROOT目录,所以<context>的配置就无法启动了,导致访问对应的资源时提示404

解决办法就是删除ROOT目录

5、请求地址后面是否带了应用名称

还是<context>的配置,如:<Context path="/ssqa" docBase="/ssqa" debug="0" reloadable="false" />(其中path配置的是虚路径,docBase配置的是你的工作空间,docBase也可以是绝对路径,如:E:\\tlp_cloud\\workspace\\ssqa);

此时访问的时候需要在路径后面跟上“ssqa”,如:http://localhost:8080/ssqa

这里补充一点,生产环境中为了用域名直接访问应用,会省略掉应用名称,此时需要将<Context>中的虚拟路径也就是path属性的值设置为空,即:path=""

6、是否访问对了资源

有的访问路径需要带着资源名称,比如index.jsp,请查看是否因为手误写成了indes.jsp等情况

7、不能访问WEB-INF下的资源

从安全角度出发,tomcat是不允许客户端访问WEB-INF目录下的HTML、JSP文件的,如果你将页面资源文件放到了WEB-INF下,也会报404错误

8、访问路径后面多"/"

比如:http://localhost:8080/ssqa/index.jsp/

 

通过排查,发现tomcat中的web项目中没有发现WEB-INF文件夹,项目结构有问题,去检查了IDEA中的project structure配置,果然是它的问题,回顾一下IntelliJ IDEA的项目配置和Web部署

二、IntelliJ IDEA的项目配置和Web部署

拿到一个项目想要用IDEA跑起来,项目配置必不可少,千万不要犯我那种急于求成的错误

1、Project配置

1、Project name : 定义项目名称

2、Project SDK: 设置项目所使用的JDK版本,可在此选择其他版本的JDK进行配置

3、Project language level: 限定项目编译检查时最低要求的JDK特性。这个和JDK设置类似,区别在于,如果你设置了JDK1.8,却只用到了1.6的特性,那么这里可以设置语言级别为1.6。

4、Project compiler output项目中默认编译输出的总路径,但是每个模块可以自己设置自己的输出目录,在Modules --> 选择项目-->paths -->Use Moudle compile output path

 

2、Modules

2.1 增删子模块

IDEA与Eclipse的一个区别在于,IDEA没有workspace的概念,在IDEA中最顶级的是项目(Project),一个项目可以包括多个子模块(Module)。一般我们的项目只是单独的一个,IntelliJ IDEA默认也是单子模块的形式。如上图,可以在 “1” 位置设置增加或删除模块。

2.2 子模块配置

每个子模块对应主要有三大配置选项,分别四Sources 、 Paths 、Dependencies:

Sources:显示项目的目录资源,那些是项目部署的时候需要的目录,不同颜色代表不同的资源类型;

Paths:可以指定项目的编译输出目录,即项目类和测试类的编译输出地址(替换掉了Project的默认输出地址);

Dependencies:项目依赖

        (1)Module SDK: 你可以选择项目设定的JDK版本,也可以单独为这个字模块设置其他版本的JDK

        (2)Scope(依赖作用域):类似Maven的编译范围,同时默认为Compile。其中:

                     Compile: 对项目类和测试类而言,编译和运行都有效;

                     Test:仅对测试类而言,编译和运行有效;

                      Runtime:对项目类和测试类而言,仅运行时有效;

                      Provided:对项目类而言,仅编译时有效。对测试类来说,构建和运行时都有效

 

 

 

2.3 模块框架的增删

此处重点讲web框架的配置(我的问题就出现在这里,项目没有配置web框架,所以war包中没有web资源,导致404

图中 “1” 位置即ssqa模块的两个框架。

右边分别是配置是配置web.xml文件路径和web资源根目录webapp文件夹路径

 

3、Libraries

这里可以显示项目所依赖的所有jar包,同时可以管理jar包,比如添加,删除;还可以将多个jar包放到一个组里。

默认情况下都是一个jar包一个组。

4、Facets

显示模块框架,选择框架后,右边会展示其相关配置,类似Module 中模块框架管理。

5、Artifacts

项目的打包部署设置,这是项目配置比较重要的一环,需要重点掌握

官网对此设置的解释如下:

An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software solution or its part. Examples are a collection of compiled Java classes or a Java application packaged in a Java archive, a Web application as a directory structure or a Web application archive, etc.

编译后的java类,web资源等的整合,用以测试、部署等工作。换句话说,就是某个module要如何打包,例如:war exploded、war、jar、ear等打包形式,module配置了Artifacts后,就可以部署到应用服务器中了。

介绍常用的打包方式:

jar:Java ARchive, 通常用于聚合大量的java类文件、相关的元数据和资源(图片、文件等)文件到一个文件,以便于分发java平台应用软件或库;

war:Web application ARchive , 一种JAR文件,其中包含用来分发的JSP、java servlet、java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;

exploded:在这里你可以理解为展开,bu不压缩的意思。也就是war、jar等产出物没压缩钱的目录结构。建议在用IDEA开发时采用这种模式,便于文件修改后,更快的进行编译

 

通过配置,打成war包的时候会自动在WEB-INF目录下生成classes,然后把编译后的文件放进去

你可能会有疑惑,之前不是配置过项目文件编译输出路径了吗?怎么这里还有一个整合资源的目录呢?它有做了些什么?

当你点击运行tomcat的时候,默认就开始了一下的步骤:

(1)编译,IDEA在保存/自动保存后不会做编译(不像Eclipse保存会自动编译),因此在运行server前会做一次编译,编译后class文件会放在指定的编译输出目录下(见2.2小节);

(2)根据artifacts中的设定对目录结构进行创建;

(3)拷贝web资源的根目录下的所有文件到artifact的目录下(见2.3小节);

(4)拷贝编译输出目录下的classes目录到artifact下的WEB-INF下(见2.2小节);

(5)拷贝lib下和Maven依赖的所需jar包到artifact下的WEB-INF下;

(6)运行server。

 

配置完artifact,需要在tomcat中进行配置

 

感谢:

参考连接

理解 IntelliJ IDEA 的项目配置和Web部署

Tomcat-404错误问题总结以及解决办法

 

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值