最近有小伙伴反映在最近面试过程中,有面试官提到关于Tomcat服务器中目录的作用及其部署项目的方式,有的小伙伴天天在使用Tomcat服务器,但是可能没有注意这些细微的知识点,所以今天我就写一份资料供大家学习,多多交流。
<Context docBase="…" path="…" />
docBase:项目存放的路径
path:虚拟目录,自己任意设置
<Context docBase="d:\work\testweb\web" path="/testweb" reloadable="true"/>
3.
<Context docBase="C:\work\testweb\web/>
Vue 作为数据驱动的前端框架,目前比较流行,因此我们公司最新的项目开发都选择 “SpringBoot 后台 + Vue 前端” 这个技术组合。如果一开始就选择这个技术组合,完全没问题。
但是,如果前端技术最初是传统的 html ,加上 Vue 后,旧的 web.xml 配置的欢迎页面为 ../index.html ,导致访问首页报错,本文来分析下这个问题。
一个基于 SpringBoot 的 web 应用,工程最初选择的前端技术是 html 和 jsp 所以有 webapp 目录,且指定了 web.xml 文件:
webapps 目录下有默认首页 index.html
前端使用 Vue ,配置 vue.config.js 中 build 目录为
module.exports = {
outputDir: './src/main/resources/static',
publicPath: './',
devServer: {
port: 8080, // 端口
},
};
maven 打包时,执行前端打包命令,完成前后台内容统一打包:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>exec-npm-install</id>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>npm</executable>
<arguments>
<argument>install</argument>
</arguments>
<workingDirectory>./</workingDirectory>
</configuration>
</execution>
<execution>
<id>exec-npm-run-build</id>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>npm</executable>
<arguments>
<argument>run</argument>
<argument>build</argument>
</arguments>
<workingDirectory>./</workingDirectory>
</configuration>
</execution>
</executions>
使用了 webapp 目录,同时又有 vue 时,打包生成的 xxx.war 包部署到 Tomcat 后,直接访问应用,由于 web.xml 中指定了路径 ../index.html,后台报错:
catalina.out 异常:
22-Nov-2020 07:36:52.993 严重 [http-nio-8080-exec-5]
org.apache.coyote.http11.Http11Processor.service 错误的处理请求
java.lang.IllegalArgumentException:
资源路径[/../index.html]已规范化为无效的[null]
第一种,static/index.html
删掉 webapps 目录下的 index.html 和 web.xml 这两个文件后,重启应用,能正常访问到 static 目录下的 index.html 页面:
第二种,如果保留 webapp 下的 index.html 和 web.xml 文件后,SpringBoot 默认的 web.xml 配置文件失效。此时,修改自定义的 web.xml 修正路径为 index.html 去掉相对路径后,再次访问,能正常:
第三种, 编辑 web.xml 配置文件路径为 ./index.html 效果和 index.html 一样。这就会走 SpringBoot 默认的静态文件查找逻辑。
第一点,自定义的 web.xml 会覆盖掉 SpringBoot 的默认配置。
第二点,web.xml 中指定了相对路径 ./index.html 或 index.html ,相对查找顺序是先 /static ,再是 / ,所以都能成功查到首页。
第三点,web.xml 中只指定一个 welcome-file 文件 ../index.html 文件,访问报错,但是如果再随便加一行配置,就能走默认查找到 static 的文件。
通过各种配置测试,发现没有办法通过自定义的 web.xml 修改 SpringBoot 的应用的首页,这点也挺让笔者捉摸不透的!
、JSP简介
JSP:Java Server Pages。在传统的HTML文件(*htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页。
二、学习重点:
三、使用tomcat软件在本地搭建服务器:
Tomcat是Apache组织的Jakarta项目中的一个重要子项目,是Sun公司推荐的运行Servlet和JSP的容器(引擎),其源代码完全公开。有了这个服务器,就相当于在本地的计算机有了一个网站,然后我们可以通过浏览器来访问这个网站。
下载Tomcat
下载之后,将压缩包解压:
Tomcat文件
注意目录名不能有中文和空格。目录介绍如下:
软件运行之前要保证Java环境变量已经配置:
jdk环境变量
上图中,变量名为JAVA_HOME,变量值为:JDK安装的绝对路径。
注:Catalina_Home环境变量:指定tomcat在启动时启动哪个tomcat,一般不推荐配置。
回到tomcat的bin目录中, 双击startup.bat:
启动Tomcat文件
之后弹出如下界面:
启动成功
这个时候,本地的服务器就已经搭建起来了。如果想关闭服务器,可以直接关闭上面的窗口,或者在里面输入Ctrl+C禁止服务。
首先查看自己电脑的ip地址,我的计算机的ip地址为:192.168.1.112。
在浏览器中输入http://192.168.1.112:8080/(或者输入http://localhost:8080/也是可以的)。如果弹出如下界面,进入本地服务器的首页,表示tomcat安装成功并且启动起来了:
Toncat启动表示成功
三、将Tomcat和eclipse相关联:
1.打开eclipse for Java EE ,选择菜单栏Windows-->preferences,弹出如下界面:
*请认真填写需求信息,我们会在24小时内与您取得联系。