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

需求:

  服务器已经存在了很多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端口

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

 

 

posted @ 2019-12-04 16:51  谢霆飞  阅读(182)  评论(0编辑  收藏  举报