Tomcat 下构建 Web 应用时,常犯的一些通用错误

9 篇文章 0 订阅
83 篇文章 4 订阅

Tomcat 下构建 Web 应用时,常犯的一些通用错误

笔者报错时的运行环境:

  • JDK 13.0.2

  • Maven 3.6.3

  • Tomcat 9.0.41(Servlet 4.0,JSP 2.3)

  • IntelliJ IDEA 2020.1.2 (Ultimate Edition)

  重新开始在 Tomcat 下部署 Web 应用,很容易遇到各种问题。笔者也经常被这些没有技术含量的问题困扰,有时甚至浪费几个小时的时间才得到解决。为了防止自己以后再犯,同时也为了减少其它人的工作量,本文列出了构建 Web 应用时,常犯的一些通用错误以及它们可以引发的问题。

  (通用错误指的是,虽然对于不同的项目,浏览器的报错各不相同,但是它们可能是同一类错误导致的。)

这些错误可以引发的问题

   Tomcat下useBean类属性[…]的值无效

   getInitParameter返回null

   源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示

常犯的通用错误

  • 运行 Web 应用应该使用的 URL 路径为:

    Web 应用的基路径/Web 应用名/Web 应用相对路径

    其中:

    • Web 应用的基路径:指在 Tomcat 中设置的路径。

    • Web 应用名:默认为文件夹 WEB-INF 的上一级文件夹的文件夹名,但有时也可以选择在服务器中设置。

    • Web 应用相对路径:指在 Web 程序中指定的相对路径。如果没有在程序中指定,则默认为打开某文件的路径,即 Web 应用文件夹下的某文件的路径。

    例如:如果通过将 Web 应用放置到本地 Tomcat 安装目录下的文件夹 webapps 中来部署,且 Tomcat 中设置的端口号为 8080,文件夹 webapps 下有一个文件夹 myweb,而文件夹 myweb 中有一个文件 demo.jsp。那么,使用本地浏览器访问文件 demo.jsp 的 URL 路径如下:

    • Web 应用的基路径localhost:8080

    • Web 应用名myweb

    • Web 应用相对路径demo.jsp

    • 完整 URLhttp://localhost:8080/myweb/demo.jsp


  • 文件夹 WEB-INF 的位置:必须为 Web 应用的目录(文件夹)的下一级目录(文件夹)(注意:是下一级,不是下 N 级)。

    • 部署方式为 Tomcat 安装目录下的文件夹 webapps:

      如果通过将 Web 应用放置到 Tomcat 安装目录下的文件夹 webapps 中来部署,且 Web 应用的名称为 myweb,那么,文件夹 myweb 需要放到 webapps 中,而文件夹 WEB-INF 需要放到 myweb 中。如果把文件夹 WEB-INF 放到文件夹 myweb 中更深层次的文件夹,这将导致文件夹 WEB-INF 不被识别。(即 Tomcat 下的 webapps 里放 myweb,myweb 里放 WEB-INF。)

      注意:只有使用这种方式可以同时在一个文件夹下部署多个 Web 应用。使用本文提到的其它方式就只能在一个文件夹下部署一个 Web 应用,因此该文件夹内需直接放置该 Web 应用的相关文件(如文件夹 WEB-INF)。


    • 部署方式为 Tomcat 安装目录下的文件夹 conf 内的 XML 配置文件:

      如果 Web 应用是通过在路径 Tomcat 的安装路径\conf\Catalina\localhost\Web 应用名.xml 中的 XML 文件中配置路径部署的,那么请注意,此 XML 文件指定的路径是 Web 应用的路径不是 Web 应用的路径的上一级文件夹的路径

      • 比方说,如果上述 XML 文件命名为 router.xml ,且在该 XML 文件中指定的路径是 <Context docBase=“D:\Tomcat\myweb” debug=…/> 。那么, Web 应用名是 router不是 myweb ),且文件夹 WEB-INF 需要放到文件夹 myweb 中。如果把文件夹 WEB-INF 放到文件夹 myweb 中更深层次的文件夹,这将导致文件夹 WEB-INF 不被识别。

    • 部署方式为 IntelliJ IDEA 中的 Maven 原型:

      如果 Web 应用是通过在 IntelliJ IDEA 中的 Maven 原型(archetype)中建立的,则应用的部署文件夹为 IntelliJ IDEA 工程中的文件夹 webapp。此时,文件夹 WEB-INF 需要直接放到文件夹 webapp 中。如果把文件夹 WEB-INF 放到文件夹 webapp 中更深层次的文件夹,这将导致文件夹 WEB-INF 不被识别。


  • 文件夹 WEB-INF 中的配置文件只会在 Tomcat 开始启动时才会生效。如果更改了WEB-INF文件夹中的任何内容,则需要重启 Tomcat 服务器。

  • Tomcat 可以处理的是 .class 文件,而不是 .java 文件。如果不使用 IDE,直接使用 Tomcat ,那么需要在文件夹 WEB-INF 下的文件夹 classes 下提供相应的.class文件,其中.class文件还需要按 Java 包名目录的规则存放。

  • 在 Tomcat 9 及之前,在地址栏输入的 URL 需要输入完整的路径名,而不能选择先输入 Web 应用(Web 文件夹)的路径,然后在浏览器中选择要访问的文件( 从 Tomcat 10 开始才可以这么做)。
    总之,在 Tomcat 9 及之前,凡是在地址栏输入没有设置过的路径,浏览器均会报此错误。
  • 31
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗诺星刻

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值