向朋友要了项目,尝试在自己的电脑上运行时,自动打开的 “localhost/login.jsp” 显示404错误。
背景
项目是在朋友那直接压缩发过来的,所以项目的配置文件也保留了,用自己的电脑需要修改部分配置。主要修改了Maven相关的路径以及本地tomcat的路径(版本不一致)。
问题
在修改完报错的配置之后,直接运行项目。自动打开的网址为 “localhost/login.jsp”,但是显示404错误,即路径不对。
于是我初步检查了一下,把原来的端口80改成8080,用Maven清理之后重新打包了。重新运行仍然显示404错误。然后百度了一下,检查了target文件夹下的资源都齐全,运行时部署的确实是当前项目,但结果一样。毫无头绪,只能从日志里找线索。对日志里的CATALINA_BASE的路径”C:\Users\Admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\login_jsp_project”感到疑惑,于是继续搜索相关资料。
最后发现了,朋友是在他的电脑上可以用 “localhost/xxx” 直接访问项目资源,意味着他的项目是部署到tomcat的根目录下了。而我的项目部署在 “/project_war” 下,需要访问 “localhost/project_war/xxx” 才可以,所以接下来就是找出哪里设置就可以了。
解决方法
1.target目录下没有对应资源(不是我遇到的问题,也记录了)
在Idea上直接运行tomcat或者用Maven打包均会在项目根目录生成target文件夹,target文件夹下的project-1.0-SNATSHOT 和 project-1.0-SNATSHOT.war 就是在tomcat上运行的项目文件夹
文件名字在 pom.xml 里面定义
检查上面提到的项目文件夹里是否存在你要访问的资源,如果没有就从 webapps 里面复制过去就可以了。
2.配置虚拟目录(我遇到的问题)
根据日志信息中 CATALINA_BASE 路径,打开文件夹
Using CATALINA_BASE:”C:\Users\Admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\login_jsp_project”
Using CATALINA_HOME:”D:\Apache-tomcat-9.0.20″
( 其中日志信息中的 CATALINA_HOME 代表tomcat的安装目录,CATALINA_BASE代表工作目录或者项目目录)
再打开 “conf\Catalina\localhost” 下的 xxx.xml ,能看到内容如下
context标签可以用于将本地系统中一个目录映射为可供web浏览器访问的虚拟目录。path属性指定web应用的虚拟路径。docBase属性用于指定该虚拟目录所在本地系统中的目录地址,可以用绝对地址或者相对于webapps目录的相对地址。
拿上面的内容举例,就是访问 “localhost/project_war/xxx” 会访问电脑上”D:\project\target\project-1.0-SNAPSHOT.war” 这个目录下的xxx资源。
那找到了地方就可以检查对应的path是否正确。
这个path在 Idea 的 Run -> Edit Configurations 里面设置,点击Deployment
下面的 Application context 就是我们在运行项目时,idea会在上述context标签里path属性里写的内容,当值为空的时候,就会把项目设置为默认项目,即访问 “localhost/xxx” 即可,此时 context标签的 path=””
再次运行项目,效果就和朋友打开的一样了。
额外补充
context代表虚拟主机host上运行的单个web应用,通过配置context元素可以灵活的发布web应用。context可以在很多地方配置,但是tomcat会以一定顺序的查找该元素,如果找到就使用该元素不会继续查下去。因此不同地方的context元素有优先级。查找顺序如下:
- 到/conf/context.xml文件中查找context元素,该文件适用于所有web应用
- 到/conf/[enginename]/[hostname]/context.xml.default中查找context元素。适用于所有web应用。
- 到/conf/[enginename]/[hostname]/[contextpath].xml文件中查找,只适用于单个web应用。
- 到web应用的META-INF/context.xml文件中查找context元素,只适用于当前web应用。
- 到/conf/server.xml文件中的host元素中查找context元素。可以在serverl.xml中配置所有的web应用的context元素,但是由于优先级最低,极有可能会被其他context元素覆盖。
参考及引用
IDEA中maven项目成功启动tomcat 但jsp页面显示404_idea启动tomcat404_好好学习yyy的博客-CSDN博客
Idea配置tomcat的一些细节 – 简书 (jianshu.com)
tomcat中Context的path和docBase属性_context docbase_千霜的博客-CSDN博客
tomcat基础_tomcat host context 优先级_千霜的博客-CSDN博客
侵权联系删
欢迎指出错误