tomcat6升级tomcat8后虚拟目录部署404的解决办法

≡放荡痞女 提交于 2020-02-29 19:33:47

这是宝宝第一次在技术网站上发帖,这次必须要写一下了- -。

之前一直在用tomcat6,由于要用到webSocket无奈把tomcat升级到了8,但是一直提示404,参考了一些网上的资料后试着改了一晚上终于弄好了,下面把方法分享出来,希望小伙伴们少走弯路吧⊙﹏⊙‖∣

1.右键项目(Eclipse)->Propperties->Project Facets->Dynamic Web Module 改成3.1,如果不能修改请优先修改其下方Java对应版本,我用的是1.7的JDK,则改为1.7,否则会提示类似“Dynamic Web Module *.* requires Java *.* or newer.”的错误。
如果依然不能修改,找到如下文件并修改:
"X:\workSpace\projectName\.settings\org.eclipse.wst.common.project.facet.core.xml"

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="java"/>
  <fixed facet="jst.web"/>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="jst.web" version="3.1"/>
  <installed facet="java" version="1.7"/>
</faceted-project>

2.修改Web.xml配置文件,因为之前是tomcat6和JDK1.6创建的,所以我们需要对老版本Web.xml进行修改,老版本头部如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
</web-app>

我们改为:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">

  <!-- 这里放filter -->

  <display-name>[your project name]</display-name>
  <description>
     [your project description]
  </description>

  <!-- 这里放jsp-config和index 404等错误页 -->
</web-app>

注意上面写的时候不要带"[ ]"方括号

3.我们把eclipse中项目close然后从新打开并重新构建~这样再放到tomcat8中部署就正常了

4.(送点小经验⊙﹏⊙)我个人喜欢虚拟目录方式部署,在不修改Server.xml和复制class到tomcat中的同时可以直接看到的最新结果
打开你的Tomcat目录并找到"Tomcat\conf\Catalina\localhost"目录,没有可以自己手动创建文件夹,并在其目录下创建ROOT.xml并编辑,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/" docBase="X:\workSpace\projectName\WebRoot" crossContext="true" debug="3" privileged="true"  reloadable="true" deubt="true">
</Context>

这样我们通过eclipse启动tomcat(非自带tomcat控件,具体可以自己来百度关键词为"com.sysdeo.eclipse.tomcat_3.3.1.jar")的时候就可以直接对eclipse中代码进行断点跟踪了

这里还要补充下:虚拟目录的部署方式是为了模拟生产环境中的url结构,这样可以不用在http://localhost:8080/projectName/的方式进行项目访问,而是http://localhost:8080/,当然如果你把8080端口改成80就跟生产环境一模一样了,但缺点也很明显,顶级域只能部署一个项目,如果需要切换项目,这里也有个小窍门:

将前面创建好的ROOT.xml复制一份改为“ROOT.xml.test”,并将其中的路径指定为第2个项目的WebRoot或WebContent下,因为.test后缀tomcat并不会识别和生效,这样我们切换项目只要打开这个配置文件目录,把后缀一改就可以了。

最后,感谢OSChina 、 JAVA极速WEB+ORM框架 JFinal 项目以及JFinal 2k群中所有帮助过我的小伙伴们!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!