• 部署一个件简简单单的项目竟然会遇到这么多事?


    需求:

      服务器已经存在了很多PHP项目,现在我新写的javaWeb项目要部署到同一服务器中新安装的Tomcat里面去,并且可以用域名进行访问。

    准备:

      1.先安装jdk,tomcat,mysql(不管windows系统,还是linux系统,推荐使用宝塔控制面板,可视化,优秀,很nice!!!)

      2.Springboot项目打war包,放入Tomcat中

    问题1:

      Springboot项目到底用内嵌的tomcat启动,还是用外部的?

    解决1:

    我先去看了Spring Boot:内置tomcat启动和外部tomcat部署总结文章,先用内嵌的打了jar包,放进linux系统里,反正我是死活启动不了,报一堆错哟,我也不清楚我的jar包是不是有问题

    果断决定使用外部tomcat打war包方式,这种方法好赖我使用过-->那就开搞。

    问题2:

      Springboot需不需要把内嵌的tomcat注释掉?

    解决2:

      我一开始照着SpringBoot使用IDEA设置的外部Tomcat启动

    springboot如何使用外部tomcat容器,这类文章进行修改:

    1.先修改pom文件:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
    

      改为

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 移除嵌入式tomcat插件 -->
    	<exclusions>
    	  <exclusion>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-tomcat</artifactId>
    	  </exclusion>
    	</exclusions>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId>
    	<version>3.1.0</version>
    	<scope>provided</scope>
    </dependency>
    

      javax.servlet-api 也需要加,不然session会报错

    2.修改Springboot启动类

    • 外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法:

    @SpringBootApplication
    @ServletComponentScan
    @ComponentScan(basePackages = {"com.example.controller", "com.example.service"})
    @MapperScan(basePackages = {"com.example.dao"})
    public class SpringbootdemoApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(SpringbootdemoApplication.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootdemoApplication.class, args);
        }
    }

    后来我发现,不注释内嵌tomcat也没啥关系,之后就不再管了,直接把打war包,往tomcat里面扔,哈哈哈哈!

    但是,要知道有这么个事!

    问题3:

    因为我是使用Springboot写的项目,Springboot内嵌了Tomcat,所以本地启动进行访问,不需要加项目名就可以

    但是放进外部的Tomcat进行启动,必须要加项目名,Tomcat才能知道你要访问哪一个项目,解决方案如下:

    解决3:

    Tomcat里面的server.xml文件需要在<Host>标签里加上一个<Context>标签,里面写好项目名

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Context path="" docBase="项目名" debug="0" reloadable="true" caseSensitive="true" />
    </Host>
    docBase里添写项目名

    问题4:

    因为服务器里面已经有别的PHP项目了,用Apache环境的80端口启动的,但是我新加的tomcat是8080端口,启动项目要是用域名+端口号就显得很low,但是80端口已经被占用了,却不能关闭它,这个怎么办呢?

    解决4:

    1.nginx可以实现,缺点:如果安装nginx之前,服务器就有了其他项目,那么需要删除掉站点,安装好了再重新建立站点,怕不是在逗我玩?

    2.IIS下建立站点?这种方法只是写一个html,我试了许久,不知道这个htm该放在哪里,所以没成功。

    3.最后还是用了这个方法:Apache和Tomcat公用80端口

    其实这面方法是一个意思,都是反向代理的意思。

     

  • 相关阅读:
    修改Mysql5.7的root密码
    PHP---练习-----留言板
    PHP----练习------球队列表
    PHP---------ajax
    PHP------Jquery的用法
    PHP-----JSOM类型数据
    PHP-------- JQUERY方式
    PHP-------PDO:数据访问抽象层
    PHP-----练习-------租房子-----增删改查,多条件查询
    PHP------练习------投票
  • 原文地址:https://www.cnblogs.com/HelloXTF/p/11983932.html
Copyright © 2020-2023  润新知