zoukankan      html  css  js  c++  java
  • IDEA 部署Tomcat教程(透彻理解操作)

    本文只讲 IDEA 部署 Tomcat 的各项设置,帮助你了解全流程,不再是网上那种只讲怎么做不讲为什么的教程。
    图都是在 Linux 下用 frameshot 截的,所以不要好奇为什么是 /home/ 而不是 D:
    本文作者 yucloud.cnblogs.com,转载请在明显位置注明出处和转载自哪里






    在 IDEA 上控制 Tomcat 部署,我们就必须了解各项选项的详细作用:

    首先我们看一下 IDEA 里的当前项目结构配置

    File -》 Project Structure

    设置 Web 资源目录和 Tomcat读取的 web.xml 配置文件

    然后为了让 Tomcat 读取到我们需要的 Web 资源
    要设置一下 Web资源路径和 web.xml 配置文件

    -> Facets -> 点加号添加 -> Web

    注意:这里把 Web 资源目录设置为根目录"/" ,其实是指 设置为部署目录的根目录(即下下张图里,提到的那个 目录的下面)

    再点 Artifacts ,这里熟悉吧?这里就是 Tomcat 部署设置的一部分

    如果你还需要 module(当然Eclipse里叫项目) 里的一些文件,可以右击 Available Elements下的模块(如右击图中的 servlet2Spring,选择 Put Into Output Root

    Tomcat 的 Run/Debug 配置

    点击菜单栏下的 Edit Configurations... (我缩小了窗口,所以在左边,但是一般都是在右边的)

    这里可以点加号,添加一个 External Source... (额外的资源目录作为服务器部署目录)









    处理常见问题

    让我们来处理一些常见问题

    Web资源找不到

    如 html jsp css js 等文件没有在 IDEA 部署目录里

    检查 Facets 里是否有 Web,并且各种路径配置是否正确

    我想把项目下的 README.md 也放到部署目录

    可以右击 Available Elements下的模块(如右击图中的 servlet2Spring,选择 Put Into Output Root更多详见标题2

    上传文件失败 404 错误

    不止是上传文件错误,很多 404 问题都应该按如下步骤检查
    检查一下你设置的 http 路径是否可以访问,用 GET/POST 工具试一下

    比较有可能是你设置的 Tomcat 路径是 例如http://localhost:8080/Demo_war_exploded 但是你用的上传路径是 http://localhost:8080/upload

    • 这时候要么把上传路径改为http://localhost:8080/Demo_war_exploded/upload
    • 要么把 Tomcat Run/Debug 配置的 URL 改为 http://localhost:8080/ 并设置 Application Context 为"/" 更多详见标题3

    html 超链接打开错误

    检测一下地址栏上的地址,是不是变了
    假如当前 http 路径是 localhost:45/Demo_war_exploded/ ,点击链接之后变成了 localhost:45/testa

    写超链接时要注意 "/testa" "./testa" "testa" 的区别

    • /testa 是指域名根路径 ,如 localhost:45/testa
    • ./testa 和 testa 都是指当前的 http 路径 ,如 localhost:45/Demo_war_exploded/testa

    附表

    路径 详解
    / 域名根路径
    ./ 当前路径
    ../ 当前路径的上一层

    可以看出路径是符合 Unix 规范
    另外,域名根路径和部署目录不一定是对应的,这里拿上面的示例讲一下

    上面示例的部署目录对应的 http路径 是 localhost:45/Demo_war_exploded
    而域名是 localhost:45
    域名根路径是 localhost:45/
    可见这里的域名根路径访问的不是 JavaWeb 项目的部署路径

    这里你可能有疑惑,为什么我们打开域名localhost:45和域名根路径localhost:45/是一样的?

    • 其实,这都是浏览器或服务器的功劳,是它们帮忙搞定了这些路径补全、重定向、转发的问题






    Tomcat 常见报错

    检查 web.xml 里的过滤路径是否正确
    错误代码

    <url-pattern>test</url-pattern>
    

    改正:

    <url-pattern>/test</url-pattern>
    

    url-pattern 这个元素好像没有相对路径的写法
    就我知道的,它只支持

    写法示例 写法解释
    *.jk 匹配后缀名为 jk 的文件
    /go/ 精确绝对路径
    /go/* 模糊路径匹配

    但是混合写法是错的: /go/*.do/go* 都是非法的

    另外匹配的原则是:详细的路径优先,后缀名匹配优先级最低
    备注:在 Tomcat 或 Spring 的 XML 配置文件里,HTTP URL 的 "/" 根路径都是域名根路径如 localhost:8081/

    如果有不想被拦截的静态资源,可以用 servlet-name 为default的默认拦截器(这个拦截器会放行你设置的 url ),如

    <servlet-mapping>
        <servlet-name>default</servlet-name>
            <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    

    详见: https://blog.csdn.net/hello5orld/article/details/9407905

    部署原理见: Intellij idea 的tomcat原理讲解
    写完文章才看到这篇,早知道不自己截图了....





    最后,Tomcat 的部署目录和Home目录变量为什么是

    图中为知乎陈龙的回答

    --------蓝天上的云_转载请注明出处.
  • 相关阅读:
    mongoDB
    昆仑会员此打印方式只针对用会员卡结账的消费,放开限制解决方案
    用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 .pack.gz
    ffmpeg
    关于golang-mod的使用方法
    组件&Props
    元素渲染
    JSX 简介
    React-HelloWorld
    Vue与REACT两个框架的区别和优势对比
  • 原文地址:https://www.cnblogs.com/yucloud/p/11291607.html
Copyright © 2011-2022 走看看