(Linux)Centos7.*版本安装配置Java环境、Tomcat、Nginx并打包部署SSM框架web系统

news2024/11/25 15:56:47

目录

一、准备软件与安装包

(一)、必须的软件

1、点击下载Xshell

2、点击下载FileZilla

(二)、准备安装包

1、点击下载JDK1.8Linux版本

2、点击下载Nginx

3、点击下载Tomcat  

二、关于FileZilla软件的使用说明

(一)、FileZilla软件的打开和说明

(二)、配置服务器地址去连接服务器 

三、Xshell的配置连接和基本命令

(一)、使用Xshell软件

(二)、Xshell的相关配置和连接

四、Xshell相关快捷键和CentOs7.*版本相关命令说明

(一)、Xshell中快捷键说明

(二)、Xshell设置

(三)、(Linux)CentOs7.*简单命令

1、我在哪儿?(我在系统中的当前位置)

2、我要去哪儿?(我要去到目标位置)

3、我当前所在的路径下有什么内容?

4、创建一个文件或文件夹

5、删除一个文件或文件夹

6、修改文件或文件夹名称:

7、解压文件:

8、查看CentOs的系统版本号:

9、查看某个进程或端口号是否正在运行以及停止该进程或服务

五、在CentOs7.*系统中安装并配置Java环境

(一)、上传JDK安装包到服务器对应目录下

(二)、解压JDK压缩包

(三)、配置JDK环境变量

1、使用vi或vim目录编辑/etc目录下的profile系统文件.

2、在/etc/profile文件的末尾添加如下内容:

3、使刚刚修改的环境配置生效

4、检测JDK是否配置成功

六、在CentOs7.*系统中安装并配置Tomcat环境

(一)、解压tomcat

(二)、修改tomcat配置文件server.xml

(三)、进入tomcat安装目录下的bin目录并启动tomcat服务

(四)、启动和停止tomcat服务

七、使用IDEA打包web项目为war包并上传至服务器进行部署和访问

(一)、web项目需要在pom.xml配置打包方式、打包名字及打包规则

(二)、pom.xml

(三)、使用IDEA进行clear、install、compile、package的过程

(四)、使用FileZilla将demo.war上传至服务器的/usr/local/tomcat/apache-tomcat-8.5.87/webapps目录下

(五)、修改/usr/local/tomcat/apache-tomcat-8.5.87/conf/目录下的server.xml配置文件.

(六)、启动tomcat服务

(七)、使用IP:PORT进行访问

(八)、停止tomcat服务出错

八、配置tomcat为服务器开机启动服务

(一)、关闭tomcat服务

(二)、在/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下创建setenv.sh文件并添加内容

(三)、配置/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下的catalina.sh文件

(四)、配置/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下的setclasspath.sh文件

(五)、配置系统文件

(六)、重启服务并查看相关服务状态


一、准备软件与安装包

懒人版,可以直接点击从CSDN下载我上传的资源包(免费):

软件安装包和Linux所需安装包 for CSDN

也可以点下面的连接用百度网盘下载:

软件安装包和Linux所需安装包 for 百度网盘

提取码:1234

资源包结构:

 如果对版本有不同要求的去下面的对应连接里面找相关的版本:

(一)、必须的软件

1、点击下载Xshell

作用:Xshell主要是远程连接服务器,写Linux命令操作服务器等。

2、点击下载FileZilla

作用:使用FileZilla上传文件或文件夹到服务器上。

(二)、准备安装包

1、点击下载JDK1.8Linux版本

2、点击下载Nginx

3、点击下载Tomcat  

综上,所需软件及安装包准备完毕!

二、关于FileZilla软件的使用说明

(一)、FileZilla软件的打开和说明

1、双击打开:

2、打开后是这样:

(二)、配置服务器地址去连接服务器 

1、点击左上角的文件,点击站点管理器

2、站点管理器打开后如下,点新站点

3、配置服务器IP地址(公有地址)、访问的协议为SFTP、端口号:22、用户名:root 

配置好以后是这样:

注意:如果点击连接显示连接失败或超时,请检查:

1、服务器的端口22是否为打开状态

2、协议是否选择的是SFTP

3、用户名密码是否正确,如果是阿里云等厂商服务器,可以去对应网站的实例找到服务器并修改实例密码

 4、连接成功后可以点击服务器站点查看相应挂载点中的文件夹及文件

 

 

说明:到这一步以后,您的/usr/local下面是没有对应的java、nginx、tomcat文件夹的,需要使用Xshell去创建对应文件夹,这一部分的操作请看第三部分。 

5、连接成功后可以点击服务器站点查看相应挂载点中的文件夹及文件

将jdk、tomcat、nginx和mysql对应的安装包传到对应目录下,以传输jdk为例:

综上、FileZilla的配置和连接完成!

三、Xshell的配置连接和基本命令

(一)、使用Xshell软件

1、打开Xshell 

                

2、打开后是这样

(二)、Xshell的相关配置和连接

1、新建会话

 2、点击连接

 3、点击用户身份验证

4、双击会话管理器进行连接服务器

5、连接成功

6、连接失败处理 

说明:如果连接失败或者有错误提示信息,请一次点开会话管理器---》aliyun----》属性

 点开属性后是这样,着重检查IP地址,用户名和密码是否是服务器的账号密码等配置信息:

 综上、Xshell相关配置和连接完成!

四、Xshell相关快捷键和CentOs7.*版本相关命令说明

(一)、Xshell中快捷键说明

通常我们用到复制外面的内容到Xshell中比较多,使用shift + insert复制内容进去;

要把Xshell中的内容复制出来需要先选中内容,按ctrl + insert进行复制。

ctrl + insert # 复制Xshell中的选中内容
shift + insert # 将外面的内容复制到Xshell中

(二)、Xshell设置

许多朋友喜欢简洁的Xshell,可以进行设置:

①设置主题及颜色

②设置透明度

 ③设置简单界面

(三)、(Linux)CentOs7.*简单命令

经验之谈:学习Linux操作系统或是它的命令都是很枯燥的事情,最好的学习方法是对比windows系统来进行针对性的练习。

比如在Windows中我们时刻关注我自己当前在哪个文件夹下?我要去到哪个文件夹?我要执行什么操作?

1、我在哪儿?(我在系统中的当前位置)

windows:

        我在C盘--->Program Files--->Bonjour这个路径下。

Linux:    

pwd #输完pwd后回车就会显示出当前所在目录位置 /root即您当前所在的位置

 Linux中没有盘符这个说法,没有Windows中所谓的C盘、D盘这样的概念,Linux是以根节点为树顶的一棵倒过来的树形目录,如图:

因此我们必须时刻清楚我们在这颗倒着的树的哪个位置,即需要查看当前所在的位置就使用:pwd命令

2、我要去哪儿?(我要去到目标位置)

windows:

        我从C盘到D盘某个文件夹,只要去点击对应的D盘对应的文件就可以进入了。

Linux:

        cd 目标路径 这个命令指的是你要去到哪个目标位置。

cd / # 去到根节点
cd /usr # 去到根节点下的usr目录
cd /root # 去到根节点下的root目录
cd /usr/local # 去到根节点下的usr目录下的local目录
cd .. #返回上一级,比如:先执行cd /usr/local/tomcat那我现在的位置在/usr/local/tomcat下,执行cd ..就会返回到/usr/local目录下

运用举例:

3、我当前所在的路径下有什么内容?

windows(有什么内容是一眼可以看到的):

        

Linux:

ls # 查看当前文件夹下面有哪些内容,仅显示文件或文件夹名字

ls -l # 查看当前文件夹下面有哪些内容,显示文件或文件夹名字以及对应权限等

# 根据个人喜好决定使用ls还是ls -l

运用举例:

4、创建一个文件或文件夹

cd /usr/local # 进入usr目录下的local目录
mkdir java    # 创建java目录
mkdir tomcat  # 创建tomcat目录
mkdir nginx   # 创建nginx目录
mkdir mysql   # 创建mysql目录

5、删除一个文件或文件夹

删除文件或文件夹时需要注意细节,rm命令只能删除文件,不能删除空文件夹或者文件夹中有内容的目录。

rm t.java # 删除t.java文件
rm test1 # 尝试删除test1文件夹,无论test1文件夹中是否有内容,都无法删除
rm -rf test1 # 这样可以删除test1这个文件夹,连带删除它内部的所有内容

6、修改文件或文件夹名称:

7、解压文件:

tar -zxvf jdk-8u361-linux-x64.tar.gz  # 解压JDK压缩包

8、查看CentOs的系统版本号:

cat /etc/centos-release

9、查看某个进程或端口号是否正在运行以及停止该进程或服务

你可以使用以下命令来查询tomcat是否真正运行:
1. 检查Tomcat进程是否存在

ps -ef | grep tomcat

2. 查看Tomcat是否监听了端口8080

netstat -an | grep 8080

如果Tomcat进程存在并且监听了端口8080,则说明Tomcat正在运行

综上、关于Xshell和CentOs7.*版本的简单命令讲完!

五、在CentOs7.*系统中安装并配置Java环境

(一)、上传JDK安装包到服务器对应目录下

使用FileZilla连接服务器,找到服务器的/usr/local/java目录,这里的java是我们自己使用mkdir java创建的,如果没有可以创建一个。

(二)、解压JDK压缩包

使用Xshell连接到服务器,使用cd 命令进入/usr/local/java目录,使用tar -zxvf jdk-8u361-linux-x64.tar.gz 解压JDK压缩包。

(三)、配置JDK环境变量

1、使用vi或vim目录编辑/etc目录下的profile系统文件.

vim /etc/profile # 编辑系统文件

 接着按下回车:

 可以使用:set nu显示文件行号:

 将输入法调整为英文状态,按i对系统文件进行编辑:

2、在/etc/profile文件的末尾添加如下内容:

cd /etc/profile # 编辑系统文件

# 在打开的文件最末端添加如下内容
 78 # 配置jdk全局变量-灰灰老师
 79 JAVA_HOME=/usr/local/java/jdk1.8.0_361
 80 CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
 81 PATH=$PATH:$JAVA_HOME/bin
 82 export PATH JAVA_HOME CLASSPATH

其中JAVA_HOME=后面的内容是你服务器的JDK解压后的位置,可以通过如下命令找到JDK所在位置:

① 已知JDK所在位置时,如下:

 ② 忘记JDK安装路径时,如下:

 配置好的系统文件如下:

编辑完成后按esc键退出编辑模式,输入:wq进行保存,如果保存失败则使用:wq!强制保存,如下:

出现红色:

那就使用 :wq!强制保存.

 

 确认一下刚刚修改的内容是否保存成功:

使用vim /etc/profile进入刚刚编辑的文件核对最后是否有关于JDK的配置内容了,有即已保存成功,如果没有重新执行上面的编辑操作即可。

3、使刚刚修改的环境配置生效

source /etc/profile # 使刚刚配置的系统文件生效

4、检测JDK是否配置成功

java -version # 查看JDK版本

java # java编译命令
javac # javac编译命令

 综上、CentOs7.*系统中就已经安装和配置好JDK的环境了。

六、在CentOs7.*系统中安装并配置Tomcat环境

(一)、解压tomcat

cd /usr/local/tomcat/  # 去到放apache-tomcat-8.5.87.tar.gz安装包的目录下
ls -l                  # 显示目录下的内容
tar -zxvf apache-tomcat-8.5.87 # 执行解压

(二)、修改tomcat配置文件server.xml

cd apache-tomcat-8.5.87/        # 去到tomcat文件目录下
ls -l                           # 查看目录文件
cd conf/                        # 去到conf文件目录下
ls -l                           # 查看目录文件

 编辑配置文件:

 显示行号:

:set nu

按i键进入编辑模式,大约在69行的位置将端口号进行修改,并执行 :wq!强制保存:

(三)、进入tomcat安装目录下的bin目录并启动tomcat服务

cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/ # 进入tomcat解压文件
ls -l # 查看目录

(四)、启动和停止tomcat服务

cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/ # 去到tomcat的bin目录下
./startup.sh  # 启动tomcat服务
./shutdown.sh # 停止tomcat服务

 注意:启动命令前面是点杠, 这个 ./ 不能少,./的意思类似于双击鼠标运行windows里面的.exe文件

在浏览器中输入IP:port,即IP地址冒号端口号进行访问:

此时看到一只汤姆猫就证明你的tomcat服务是能够正常使用的。

 

tomcat相关命令:

./startup.sh  # 启动tomcat服务
./shutdown.sh # 停止tomcat服务

七、使用IDEA打包web项目为war包并上传至服务器进行部署和访问

综述:这部分主要解决的问题是,使用IP:PORT默认访问到的tomcat的首页,也就是有汤姆猫的页面,怎么让它访问到我们的web项目呢?

(一)、web项目需要在pom.xml配置打包方式、打包名字及打包规则

(二)、pom.xml

 为了便于核对,附上版主所用的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sizpx</groupId>
    <artifactId>demo</artifactId>
    <!--    <version></version>-->
    <version>0.0.1-SNAPSHOT</version>
    <!--    指定打包方式为war,方便服务器部署-->
    <packaging>war</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <dependencies>
        <!-- 热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--通用mapper场景启动器-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
        <!--阿里druid数据源启动器-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!--pagehelper-spring-boot-starter依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!--    配置单元测试依赖jar-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        配置json解析类-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.41</version>
        </dependency>
        <!--        导入Jquery依赖包-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.6.4</version>
        </dependency>
        <!--部署成war包时开启【同时支持war和jar启动部署】↓↓↓↓-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>compile</scope>
            <!--            本地编译运行时使用compile,服务器编译运行时使用provided-->
            <!--            <scope>provided</scope>-->
        </dependency>
        <!--部署成war包时开启【同时支持war和jar启动部署】↑↑↑↑-->
    </dependencies>
    <properties>
        <java.version>1.8</java.version>
        <!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!--        添加mybatis加载配置文件-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <!--包含了src/main/java目录下的所有xml资源配置文件-->
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <!--        最终打包的名字与项目名称一致-->
        <finalName>demo</finalName>
    </build>
</project>

(三)、使用IDEA进行clear、install、compile、package的过程

特别说明,在idea中打包顺序按12345执行,特别注意在第2步的install之后需要compile一次,在第4步的package后再执行一次compile进行编译。

打包操作完成后,可以在web目录项目左侧的target中找到demo.war,将demo.war复制到桌面上准备上传至服务器中。

 

(四)、使用FileZilla将demo.war上传至服务器的/usr/local/tomcat/apache-tomcat-8.5.87/webapps目录下

在进行上传之前先停止tomcat服务:

cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/ # 去到tomcat的bin目录下
./shutdown.sh  # 停止tomcat服务

 去到tomcat目录的webapps目录下,查看是否有已经在运行的项目文件:

cd /usr/local/tomcat/apache-tomcat-8.5.87/webapps/ # 放demo.war的目录
ls -l # 查看是否存在*.war结尾的其他项目正在运行的

 如果存在*.war或*.jar的其他项目包,可以进行备份,可以通过修改原有的*.war或*.jar名字进行备份操作:

 最后使用FileZilla将demo.war拖拽到/usr/local/tomcat/apache-tomcat-8.5.87/webapps目录下:

 正在传输:

 传输完成:

(五)、修改/usr/local/tomcat/apache-tomcat-8.5.87/conf/目录下的server.xml配置文件.

显示行号:

 

 修改server.xml的端口号,使其与项目端口号保持一致:

 在server.xml中大约151的位置进行修改tomcat服务文件,将默认访问的地址指向我们自己的web项目demo.war。

附上修改前的整个server.xml文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!-- APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation which always uses
         OpenSSL for TLS.
         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
         configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->

    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <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" />
        -->

        <!-- 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>
    </Engine>
  </Service>
</Server>

原来的整个Host标签的内容如下:

<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" />
        -->

        <!-- 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标签内容如下:

<!--将appBase由webapps改为"" -->
<Host name="localhost"  appBase=""
      unpackWARs="true" autoDeploy="true">
		<!--新增自主项目访问更目录 -->
		<Context path="/" docBase="webapps/demo"  debug="0" privileged="true" reloadable="true"  />	

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- 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>

附上修改后的整个server.xml文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!-- APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8086" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation which always uses
         OpenSSL for TLS.
         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
         configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->

    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!--将appBase由webapps改为"" -->
      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
		<!--新增自主项目访问更目录 -->
		<Context path="/" docBase="webapps/demo"  debug="0" privileged="true" reloadable="true"  />	

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- 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>
    </Engine>
  </Service>
</Server>

修改完成后按esc退出编辑模式,使用:wq或:wq!保存server.xml文件并退出.

配置说明:

在`server.xml`文件中,需要以下几个步骤来配置Tomcat以使我们能够访问自己的项目:

1. 确认Tomcat是否有配置好正确的端口,可以通过修改`<Connector>`元素来实现:

```
<Connector port="8086" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
```
其中,`port`属性表示访问Tomcat的端口号,可以根据自己的需要进行修改。

2. 在`<Host>`元素中,添加一个`<Context>`元素来指定我们的项目路径:

```
<Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">

      <!-- 添加context -->
      <Context path="/" docBase="webapps/demo" debug="0" privileged="true" />
</Host>
```
其中,`path`属性表示访问自己的项目的URL,`docBase`属性表示自己的项目的路径或者WAR文件的路径,可以修改为你自己的项目路径或WAR文件路径。

3. 保存`server.xml`文件并重启Tomcat,然后就可以通过访问上一步中定义的`path`属性链接来访问我们自己的项目了,比如上面的例子中就可以通过访问`http://localhost:8080/`来访问我们的项目。

注意:修改`server.xml`配置文件需要谨慎操作,并且在重启Tomcat之前务必备份好该文件,以防止配置错误。

(六)、启动tomcat服务

(七)、使用IP:PORT进行访问

此时访问的页面不再是tomcat自带的汤姆猫界面了,而是我们自己的web项目的界面,就说明这个配置是OK的。 

(八)、停止tomcat服务出错

如下图:

原因:端口被占用。造成错误的原因大多是因为未停止tomcat服务就对tomcat的配置文件进行编辑造成的。

解决方案:

①查看哪些服务占用了您配置的端口

 ps -ef | grep tomcat

②可以使用如下命令直接强行杀死占用端口的程序:

kill -9 tomcat

或

kill -9 1458 # 这里的1458就是占用的进程ID

或者重启服务器也可以解决这一类端口占用问题。

八、配置tomcat为服务器开机启动服务

说明:按照上面的方式启动Tomcat,如果我们的虚拟机或者服务器关闭了,重启服务器后Tomcat是关闭的,每次都需要手动启动,比较麻烦。我们希望虚拟机或者服务器重启后,Tomcat可以自己启动,所以我们需要设置Tomcat为开机启动项,具体操作参考下面的操作流程:

(一)、关闭tomcat服务

cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/ # 进入tomcat安装目录的bin目录下

./shutdown.sh # 关闭tomcat服务

(二)、在/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下创建setenv.sh文件并添加内容

进入tomcat的安装目录下的bin目录并创建setenv.sh文件:

# 进入tomcat的bin目录
cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/
# 查看已有文件
ll
# 创建setenv.sh文件
vim setenv.sh

在setenv.sh文件中添加如下内容:

此处CATALINA_PID中的tomcat.pid系统会自动创建。

# 设置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
# 添加JVM选项
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"

(三)、配置/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下的catalina.sh文件

首先使用命令编辑catalina.sh文件:

# 进入tomcat的bin目录
cd /usr/local/tomcat/apache-tomcat-8.5.87/bin/
# 查看目录结构
ll
# 编辑catalina.sh文件
vim catalina.sh

 此文件很长,前面是很多注释,大概在126行的后面添加JDK的环境变量:

export JAVA_HOME=/usr/local/java/jdk1.8.0_361
export JRE_HOME=/usr/local/java/jdk1.8.0_361/jre

(四)、配置/usr/local/tomcat/apache-tomcat-8.5.87/bin/目录下的setclasspath.sh文件

说明:tomcat启动的大致流程是startup.sh->catalina.sh->setclasspath.sh,而setclasspath.sh的作用就是加载环境变量,使用如下命令对setclasspath.sh进行编辑:

vim /usr/local/tomcat/apache-tomcat-8.5.87/bin/setclasspath.sh

在make和if之间,大致24-25行之间添加JDK环境变量:

export JAVA_HOME=/usr/local/java/jdk1.8.0_361

(五)、配置系统文件

在/usr/lib/systemd/system路径下添加tomcat.service文件,命令如下:

# 编辑tomcat.service文件,如果原来没有会新建立一个tomcat.service文件
vim /usr/lib/systemd/system/tomcat.service 

打开后是一个空的文件,在该文件中插入如下代码:

[Unit]
Description=Tomcat
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
TimeoutSec=0
# 其中/usr/local/tomcat/apache-tomcat-8.5.87/是tomcat的安装目录,此部分内容中有这个地址的都要替换
PIDFile=/usr/local/tomcat/apache-tomcat-8.5.87/tomcat.pid
ExecStart=/usr/local/tomcat/apache-tomcat-8.5.87/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

说明:配置TimeoutSec=0的目的是让开机启动不处理tomcat启动超时,保证tomcat耗时过长时不会被系统terminating。

插入内容完成后按est退出编辑模式,执行命令:wq!保存改文件,并使如下命令使修改过的文件生效:

一定要使用次命令让修改后的文件生效!!!

# 使修改过的文件生效
systemctl daemon-reload

将tomcat服务加入开机自启动列表!!!

systemctl enable tomcat.service

(六)、重启服务并查看相关服务状态

重启服务:

reboot # 重启服务

此时会重启所有服务,建议将服务器重启一次。

重启服务和重启服务器完成后可以查看服务列表:

systemctl status tomcat # 查看tomcat服务

查看开机启动列表:

systemctl list-unit-files | grep enabled

此时直接使用IP:端口访问可以看到已经能访问到项目,说明刚刚的配置是成功的、生效的:

综上、Tomcat相关配置完结!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是FIFO?

同步FIFO和异步FIFO 1、FIFO定义 FIFO是英文First In First Out的缩写&#xff0c;是一种先进先出的数据缓存器&#xff0c;他与普通存储器的区别是没有外部读写地址线&#xff0c;这样使用起来非常简单&#xff0c;但缺点就是只能顺序写入数据&#xff0c;顺序的读出数据&am…

C++修炼之筑基期第三层——拷贝构造函数

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;拷贝构造函数的概念&#x1f337;拷贝构造函数的特性 &#x1f490;专栏导读 &#x1f338;作者简介&#xff1a;花想云&#xff0c;在读本科生一枚&#xff0c;致力于 C/C、Linux 学习。 &#x1f338;本文…

Rocky9/Centos stream9 修改静态ip,修改网卡。

目录 需求&#xff1a; 修改ipv4地址为10.10.10.10 子网掩码为255.255.255.0 网关为10.10.10.254 dns为本机ip 当前版本&#xff1a; 前言&#xff1a; 正文&#xff1a; 后续其他方法拓展。 本人新建立一个QQ shell群&#xff0c;感兴趣的可以加入&#xff1a;637257233 …

瑞数5.5逆向笔记(纯扣算法)

瑞数5解密 首先看请求,请求返回202大概率是(瑞数3,4).返回412是瑞数5 还可以看后缀值 MmEwMD4xxxxx 就是4代瑞数&#xff0c;bX3Xf9nD5xxxxx 就是5代瑞数 区别4带上来有1-2个无限debugger,这个直接过掉就好,还会有一个假cookie,5带没有 1.meta content 动态的每次请求都会变…

IDEA如何运行SSM项目(超详细图解)

&#x1f4d6;本篇超级详细案例截图教学 IDEA如何运行SSM(Maven工程)项目&#xff0c;图片点击可放大仔细看 1、查看项目 项目里面一般会包含项目源码、数据库、环境配置教程、运行教程。 项目介绍文件有的是.md文件&#xff0c;这个需要记事本或者typora打开&#xff0c;wor…

【瑞吉外卖开发笔记】

瑞吉外卖开发笔记 源码地址 一、业务开发Day01 1、软件开发整体介绍 软件开发流程 角色分工 软件环境 2、瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3、环境搭建 开发环境搭建 数据库环境搭建 运行对应db_reggie.sql文件Maven项目搭建 新建Springb…

毫米波雷达(mmWave)基本原理

1. 引言 毫米波&#xff08;mmWave&#xff09;是一种特殊的雷达技术&#xff0c;它使用短波长的电磁波。雷达系统发射电磁波信号&#xff0c;然后其路径上的物体将它反射回去。通过捕捉反射信号&#xff0c;雷达系统可以确定目标的距离、速度和角度。毫米波雷达发射的信号波长…

函数(2)

文章目录 6. 函数的嵌套调用和链式访问6.1 嵌套调用6.2 链式访问 7. 函数的声明和定义7.1 函数声明7.2 函数定义 8. 函数递归8.1 什么是递归8.2 递归的两个必要条件8.3 递归与迭代 附&#xff1a; 6. 函数的嵌套调用和链式访问 6.1 嵌套调用 #include <stdio.h>int tes…

基于Python的学生成绩管理系统

末尾获取源码 开发语言&#xff1a;python 后端框架&#xff1a;django 数据库&#xff1a;MySQL5.7 开发软件&#xff1a;Pycharm 是否Maven项目&#xff1a;是 目录 一、项目简介 二、系统功能 三、系统项目截图 四、核心代码 4.1登录相关 4.2文件上传 4.3封装 一、项…

12.软考——数据流图

数据流图分层 数据字典 数据流图平衡原则 考试必问根据顶层数据流图补充0层数据流图中缺失的数据流图。 1.父图与子图之间的平衡 主要看系统和外部的联系是否缺失,比如上图数据管理中间件--------->前端应用中的处理后的操作结果这个数据流缺失。 2.子图内平衡 正常的加…

1123 Is It a Complete AVL Tree(72行代码+超详细注释)

1123 Is It a Complete AVL Tree 分数 30 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by…

【原创】ChatGPT访问及内容安全技术设计

作者&#xff1a;黑夜路人 时间&#xff1a;2023/5/15 作为爆火的AIGC产品ChatGPT&#xff0c;以及类似的产品 Cluade、Bard、Newbing 等等&#xff0c;让大家趋之若鹜&#xff0c;如何把这些产品映射到自己的业务产品中&#xff0c;也是很多开发者需要面对的问题。 针对AIGC&…

Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题

Prompt工程师指南[从基础到进阶篇]&#xff1a;用于开发和优化提示&#xff0c;以有效地使用语言模型&#xff08;LMs&#xff09;进行各种应用和研究主题 Prompt工程是一种相对较新的学科&#xff0c;用于开发和优化提示&#xff0c;以有效地使用语言模型&#xff08;LMs&…

基于卷积的图像分类识别(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

LitCTF2023 Reverse 题解及复现

文章目录 一.enbase641.main函数2.换表函数3. check函数4. 解题脚本: 二.snake1. 修复MagicNumber2. 反编译3. 解题脚本 三.For Aiur1. 注意点2. 解包3. 反编译4. 解题脚本 四.程序和人有一个能跑就行了1. fakeflag2. 真flag 五.debase641. encode函数2. 函数逻辑3. 根据程序逻…

PCIe事务层(详细)总结-PCIe专题知识(六)

目录 前言一、简介二、事务层数据传输三、数据格式四、其他相关链接1、PCIe物理层总结-PCIE专题知识&#xff08;一&#xff09;2、PCIe数据链路层图文总结-PCIe专题知识&#xff08;二&#xff09;3、PCIe物理层链路训练和初始化总结-PCIe专题知识&#xff08;三&#xff09;4…

SpringCloud:微服务保护之规则持久化

现在&#xff0c;sentinel的所有规则都是内存存储&#xff0c;重启后所有规则都会丢失。在生产环境下&#xff0c;我们必须确保这些规则的持久化&#xff0c;避免丢失。 1.规则管理模式 规则是否能持久化&#xff0c;取决于规则管理模式&#xff0c;sentinel支持三种规则管理…

基于卷积的图像分类识别(一):AlexNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

机器学习中的监督学习、无监督学习、半监督学习和强化学习,这四种学习方式到底有啥区别?

监督学习、无监督学习、半监督学习和强化学习 人工智能中的机器学习是指让计算机通过学习数据的方式改善性能。在机器学习中&#xff0c;有四种主要的学习方式&#xff1a;监督学习、无监督学习、半监督学习和强化学习。本文将详细介绍这四种学习方式的概念、应用和优缺点。 …

[GXYCTF2019]BabyUpload1

上传文件后提示后缀名不能有ph 那估计都是黑名单过滤&#xff0c;大小写绕过也不行&#xff0c;尝试一下上传.htaccess文件 将文件名称为abc的当做php文件执行 上传后提示上传类型露骨&#xff0c;说明绕过了黑名单但是还有content_type类型坐镇 那就利用burp抓包修改content—…