使用Tomcat部署静态项目并处理BUG

--听讲的习惯

Tomcat介绍

tomcat what_Arenaschi的博客-CSDN博客

 

 

Tomcat安装及配置教程(超详细)

那些年我们用过的tomcat_Arenaschi的博客-CSDN博客

 简单使用tomcat查看版本信息等·_windows查看tomcat版本命令-CSDN博客

 

Tomcat部署html静态网站的五种方式

 

注:这里的操作是建立在java jdk和tomcat已安装好并且已经配置好环境变量的情况下

方式一:直接把静态项目复制到Tomcat安装目录的webapps目录中。

例如:我们新建一个test文件夹,在文件夹里新建一个test.html文件,然后将整个test文件夹复制到Tomcat安装目录的webapps目录中,启动tomcat后在浏览器输入ip:port/test/test.html即可访问了。

方式二:在tomcat安装目录中有一个conf文件夹,打开此文件夹,其中包含配置文件server.xml,打开配置文件,并在<host>和</host>之间插入如下语句

<Context path="test" docBase="D:\test" debug="0" reloadable="true" crossContext="true"/>

其中,path为虚拟路径,docBase为项目的路径,启动tomcat后在浏览器输入ip:port/test/页面名.html即可访问了。


方式三:在conf目录中,在Catalina\localhost(此处需要注意目录的大小写)目录下新建一个XML文件,任意命名(例如:aaa),只要和当前文件中的文件名不重复即可,代码如下
<Context path="" docBase="D:\test" debug="0" reloadable="true" crossContext="true"/>

其中,path属性可以不写,docBase为项目的路径,启动tomcat后在浏览器输入ip:port/aaa/页面名.html即可访问了。

方式四:配置虚拟主机

在Tomcat8/conf/server.xml文件的host元素中配置

例如:<Context path="/WJ" docBase="D://WJ"/>

<Context psth="浏览器要访问的目录地址" docBase="网站所在磁盘目录"/>

访问方式:localhost:8080/WJ/hello.html

方式五:配置Tomcat8/conf/localhost/xxx.xml

提示:如果在Tomcat8/conf目录下没有Catalina/localhost,可以自己去创建文件夹

在Tomcat8/conf/Catalina/localhost目录下新建一个xml文件,xml的名字就是我们要访问的路径的名字。比如WJ.xml

在WJ.xml中写入:<Context docBase="D://TaoBao"/>

推荐第一种最简单
 

Tomcat配置域名

一、修改端口

tomcat默认监听端口是8080,我们如果想不带端口的直接访问项目,就必须监听80端口。

打开tomcat中conf文件夹下的service.xml

vi/usr/local/tomcat/apache-tomcat-8.5.38/conf/service.xml

将:

<Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8443”

/>

改为:

<Connector port="80"protocol=“HTTP/1.1” connectionTimeout="20000"redirectPort=“8443” />

 

二、配置

  1. <Host appBase="webapps"autoDeploy=“true” name="localhost"unpackWARs=“true” xmlNamespaceAware="false"xmlValidation=“false”>
  2. 至于 <Engine> 标签中的属性可以不修改,修改了 <host> 即可

    <!--没有改动defaultHost 修改其下的host即可-->
    <Engine name="Catalina" defaultHost="localhost">

把name的值修改成你的域名,这样就可以通过你的域名+目录+后缀访问了

<!--原本的标签-->
<!--<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
-->
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
        <!--
        <Context docBase="" reloadable="" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
<!--        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>-->
      
     <!--自己添加的标签,配置域名解析-->
     <Host name="www.song.net"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" xmlValidation="" xmlNamespaceAware="">

        <!--配置默认打开项目-->
        <Context docBase="/usr/local/tomcat/apache-tomcat-8.5.55/newwebapps/QingHeWeb" path="" debug="0"   reloadable="true" />

          <Value className="org.apache.catalina.valves.AccessLogValue"    directory="logs"    
                        prefix="qinghejiaoyu.net_access_log."    suffix=".txt"    
                        pattern="%h %l %u %c &quot;%r&quot; %s %b" />
      </Host>

 

静态网页在Tomcat上发布时去掉8080及后缀名.html

我的项目目录: /project/test.html
从 http://localhost:8080/project/test.html 到 http://localhost

一、去掉8080

因为浏览器默认端口是80,将8080端口改为80即可不用输入端口
打开tomcat文件夹–>找到conf–>server.xml–>用记事本打开
找到下面这段

将8080 改为80

重启tomcat即可完成端口修改,再次访问就可使用 http://localhost/project/test.html不加端口访问

去掉后面的/project

还是编辑server.xml,
找到 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
在这行下面添加

<Context path="/" docBase="C:\tomcat\webapps\ROOT\project" reloadable="false" ></Context >

docBase为项目目录

保存重启tomcat后即可使用 http://localhost/test.html 不加项目目录进行访问

去掉test.html

编辑conf下web.xml文件
一直拖到最后我们可以看到这几行

 

在下面增加自己的文件名,如图:

重启Tomcat后即可使用 http://localhost 直接进行访问

tomcat和jdk版本兼容(Tomcat版本要比jdk高)

用的tomcat是低版本的,但是用的jdk却是高版本的,用Servlet做的项目运行都没有问题,但是直接运行jsp却死活都运行失败。

最后发现是tomcat和jdk的版本问题造成的。

总结如下:

tomcat v7.0-------support-------->Java EE 5 and 6

tomcat v8.0-------support-------->Java EE 5,6 and 7

tomcat v8.5-------support-------->Java EE 5,6 and 7

tomcat v9.0-------support-------->Java EE 5,6,7 and 8

(Tomcat版本要比jdk高)

所以 jdk1.8 需要运行在tomcat v9.0才不会出现上述问题

例如运行环境是:jdk1.8.0.1+tomcat8.5.1(实际上不应该会报错),但是还是报了版本不兼容问题。最后升级了tomcat为9.0成功。
一般是和jdk版本保持一致的,也就是说tomcat7对用jdk7版本;tomcat8对用jdk8版本(猜测:但是如果maven中的servlet-api高于tomcat中的servlet-api会出现不兼容的问题,解决这一问题:1、将pom.xml文件中的servlet-api版本与tomcat中的servlet-api保持一致。2、升级tomcat为9.0)。

通常情况下,可以依次类推的。
tomcat8.0最低可以兼容jdk1.7,jdk1.7以上的版本都可以

tomcat版本不能低于兼容的jdk的最低版本:

 
最优配置:
下载tomcat的官网,有兼容列表的;
tomcat v7.0-------support-------->Java EE 6 and 6以上
tomcat v8.0-------support-------->Java EE 7 and 7以上
tomcat v9.0-------support-------->Java EE 8 and 8以上

 

 

Tomcat启动闪退问题整理

Tomcat启动闪退一般有以下几个原因:

1、JDK环境变量配置错误;

2、JDK版本与tomcat版本不匹配(一般jdk1.6,tomcat8.**这样可能会出现类似问题)

3、tomcat内存配置有误(Catalina文件内存配置有误)

4、端口被占用

解决方案: 1、JDK环境变量配置错误;

     排查:

        1)检查环境变量:cmd启动命令行窗口→通过cd命令到tomcat的bin目录下→运行startup.bat。可以帮助查看变量正确性;

        2)打开startup.bat文件,在最后面加上:pause 然后,直接点击运行。也同样可以查看变量

如果是变量问题:

   1.1)配置变量方法一:

在桌面上右键 我的电脑à属性à高级à环境变量à系统变量à新建/编辑 JAVA_HOME\ Path\ CLASSPATH三个环境变量:

        1)JAVA_HOME: D:\Program Files\Java\jdk1.8

        2)Path: %JAVA_HOME%\bin; %JAVA_HOME%\jre\bin;

        3)CLASSPATH:D:\ProgramFiles\Java\jdk1.8\lib\tools.jar;D:\Program Files\Java\jdk1.8\lib\dt.jar;

Step3、检测配置是否成功:开始à运行à输入命令:java –version,显示具体的jdk版本,那么说明jdk安装成功.

   1.2)配置变量方法二:

右键:startup.bat文件-》编辑,在最顶层加上环境变量代码:

        set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181

        set JRE_HOME=C:\Program Files\Java\jdk1.8.0_181\jre

        set CATALINA_HOME=D:\apache-tomcat-7.0.92-windows-x64\apache-tomcat-7.0.92

2、JDK版本与tomcat版本不匹配

        解决方案:升级JDK

3、tomcat内存配置有误(Catalina文件内存配置有误)

        找到配置内存的语句,删除重新配置。

        本人配置的语句为:set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=378m

4、端口被占用

        netstat -ano | findstr “8080”

查看此端口是否被占用。如果被占,则:1)修改tomcat端口;2)将现在使用端口的程序kill掉。

tomcat部署多个域名https

tomcat部署多个域名https

注:tomcat服务器需要8.5以上的版本

说明:

  • port:端口号;
  • certificateKeystoreFile:证书路径(例如:conf/1xxxx.jks);
  • certificateKeystorePassword:证书密码;
  • certificateKeyAlias:证书别名

多个项目配置多个域名

<Host name="xxx.xxx1.com" appBase="webapps/xxx.xxx1.com"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase ="xxx.xxx1.com"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="xxx.xxx1.com_access_log" suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host> 
<Host name="xxx.xxx2.com" appBase="webapps/xxx.xxx2.com"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase ="xxx.xxx2.com"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="xxx.xxx2.com_access_log" suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

一个项目对应多个域名
<Host name="xxx.xxx1.com" appBase="webapps、xxx.xxx1.com" unpackWARs="false" 
 	autoDeploy="true" defaultHost="xxx.xxx1.com">
<!--多个域名别名-->
<Alias>xxx.xxx1.com</Alias>
<Alias>xxx.xxx1.com</Alias>
<!--默认项目访问路径-->
<Context path="" docBase="" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
     prefix="localhost_access_log" suffix=".txt"
     pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/230388.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红海云eHR 任意文件上传漏洞复现

0x01 产品简介 红海eHR是大中型企业广泛采用人力资源管理系统。红海云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 红海云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:…

Leetcode 17 电话号码的字母组合

理解题意&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合 本质上&#xff1a;数字代表着一个字母集合 数字的个数决定了递归的深度&#xff0c;即树的深度 数字代表的字母组合决定了当前树的宽度。 1.暴力回溯 这里没有什么剪枝…

拆解大语言模型 RLHF 中的PPO算法

为什么大多数介绍大语言模型 RLHF 的文章&#xff0c;一讲到 PPO 算法的细节就戛然而止了呢&#xff1f;要么直接略过&#xff0c;要么就只扔出一个 PPO 的链接。然而 LLM x PPO 跟传统的 PPO 还是有些不同的呀。 其实在 ChatGPT 推出后的相当一段时间内&#xff0c;我一直在等…

【数据结构】顺序表的定义和运算

目录 1.初始化 2.插入 3.删除 4.查找 5.修改 6.长度 7.遍历 8.完整代码 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &…

SpringBoot+线程池实现高频调用http接口并多线程解析json数据

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)&#xff1a; SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…

swiftUi——颜色

在SwiftUI中&#xff0c;您可以使用Color结构来表示颜色。Color可以直接使用预定义的颜色&#xff0c;例如.red、.blue、.green等&#xff0c;也可以使用自定义的RGB值、十六进制颜色代码或者系统提供的颜色。 1. 预定义颜色 Text("预定义颜色").foregroundColor(.…

使用STM32 HAL库进行GPIO控制的实例

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进&#xff0c; 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;…

人工智能学习9(LightGBM)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm lightGBM原理lightGBM的基础使用案例1&#xff1a;鸢尾花案例2&#xff1a;绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

调用win32 api获取电脑名字和系统目录

学习一下几个函数的功能&#xff0c;和调用方式&#xff1b; void CBasenameView::OnDraw(CDC* pDC) {CBasenameDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;TCHAR myname1[50], myname2[50], mydirname1[50], myd…

class061 最小生成树【算法】

class061 最小生成树【算法】 2023-12-8 11:48:12 算法讲解061【必备】最小生成树 code1 P3366 【模板】最小生成树 // Kruskal算法模版&#xff08;洛谷&#xff09; // 静态空间实现 // 测试链接 : https://www.luogu.com.cn/problem/P3366 // 请同学们务必参考如下代码中…

实战:Docker Compose 下 Nginx、Java、Mysql 和 Redis 服务协同部署(包含解决浏览器访问Linux部署服务器本地资源问题)

1. 背景 在该实战中&#xff0c;我们将探讨如何使用Docker Compose协同部署Nginx、Java、Mysql和Redis服务&#xff0c;实现一个视频上传与展示的应用。具体需求如下&#xff1a; Java应用负责上传视频和图片资源到Nginx目录下&#xff0c;作为资源服务器。Nginx服务作为静态…

Redis数据已经删除了,为什么内存占用还是很高?

Redis数据已经删除了&#xff0c;为什么内存占用还是很高&#xff1f; Redis做了数据删除操作&#xff0c;为什么使用top命令时&#xff0c;还是显示Redis占了很多内存&#xff1f; 没做相关功课的人觉得这个问题有问题&#xff0c;删了数据还说占着内存&#xff0c;面试官不…

ubuntu22.04 安装cuda

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由 NVIDIA 开发的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA 的 GPU&#xff08;图形处理单元&#xff09;进行高效的计算处理。CUDA 通过提供一系列的 C、C 和 Fortran 扩展&#xff0c;使得开发…

Navicat 技术指引 | 连接 GaussDB 分布式

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

小程序开发要多少钱

随着智能手机的普及和人们对移动应用的需求不断增长&#xff0c;小程序作为一种轻量级应用形式&#xff0c;在商业领域中备受关注。众多企业都渴望抓住这一机遇&#xff0c;但他们最关心的问题之一是&#xff1a;小程序开发需要多少钱&#xff1f; 一、开发方式选择 在开始小…

【LuatOS】笔记(二)基础框架

开发环境搭建 合宙官方搭建的是&#xff1a;vscodeLuatOS-SOC推荐拓展包(vscode插件)&#xff0c;原文链接&#xff1a;LuatOS开发环境搭建。安装完创建项目文件&#xff0c;创建main.lua文件&#xff0c;就可以开始编写了。 函数与使用 LuatOS-SOC接口文档1&#xff0c;该文档…

MongoDB的插入文档、更新文档语句

本文主要介绍MongoDB的插入文档、更新文档语句。 目录 MongoDB插入文档MongoDB更新文档 MongoDB插入文档 在MongoDB中&#xff0c;可以通过使用insertOne或insertMany方法向集合中插入文档。 insertOne方法可以插入一个文档&#xff0c;例如&#xff1a; db.collection.inse…

【深度学习】一维数组的聚类

在学习聚类算法的过程中&#xff0c;学习到的聚类算法大部分都是针对n维的&#xff0c;针对一维数据的聚类方式较少&#xff0c;今天就来学习下如何给一维的数据进行聚类。 方案一&#xff1a;采用K-Means对一维数据聚类 Python代码如下&#xff1a; from sklearn.cluster im…

【Cisco Packet Tracer】路由器实验 静态路由/RIP/OSPF/BGP

本教程讲解路由器的静态IP配置、RIP、OSPF、BGP等实验内容。 一、基本设置 绘制以下拓扑结构&#xff1a; PC0设置&#xff1a; PC1设置&#xff1a; Router0端口0设置&#xff1a; Router0端口1设置&#xff1a; Router1端口0设置&#xff1a; Router1端口1设置&#xff1a…

Elasticsearch:使用 Elasticsearch 向量搜索及 RAG 来实现 Chatbot

Elasticsearch 的向量搜索为我们的语义搜索提供了可能。而在人工智能的动态格局中&#xff0c;检索增强生成&#xff08;Retrieval Augmented Generation - RAG&#xff09;已经成为游戏规则的改变者&#xff0c;彻底改变了我们生成文本和与文本交互的方式。 RAG 使用大型语言模…
最新文章