idea部署springboot项目到外部tomcat

【README】

本文旨在记录idea部署springboot项目到外部tomcat的步骤;

第一次部署会踩很多坑儿,多查google,多重试;

第一次部署,不建议手动录入依赖,因为有可能遗漏;而且网络上资料很多但也很乱,很容易出错和掉坑儿里;


【1】创建项目 


【2】 引入 spring web相关依赖

1)选择依赖

 点击finish

2)项目pom

<?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.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cmc</groupId><artifactId>springbt-04-web-jsp2</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>springbt-04-web-jsp2</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><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-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

使用外部tomcat,而不是内嵌tomcat的方式有两种, 官方文档推荐的就是上面这一种 provided;

官方文档参见  “How-to” Guides

3)整体目录结构


【3】创建web.xml,设置根路径

1)进入 项目结构页面的module页面 (快捷键 ctrl+alt+shift+s)

2) 创建web根目录 src\main\webapp

 双击创建;

3) 创建web.xml文件

根目录(D:\workbench_idea\spring-bucket\springboot\springbt-04-web-jsp2\src\main\webapp)下WEB-INF下创建web.xml 文件

 注意: 路径不要写错了 ;

4)创建完成后的效果


  【4】配置外部tomcat(这个简单)

1)进入配置页面

2)添加tomcat


【5】部署springboot项目到外部tomcat

1)进入部署页面

2)选择 exploded web制品库


【6】编写web页面和controller

1)编写web页面

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello</title>
</head>
<body><h1>hello world.</h1>
</body>
</html>

2)启动tomcat,查看访问效果

3)添加 controller

3.1)MyController

package com.cmc.springbt.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class MyController {@GetMapping("/aaa")public String hello(Model model) {System.out.println("hello aaa");model.addAttribute("msg", "hello aaa");return "success";}
}

3.2)修改hello.jsp 

<body><h1>hello world.</h1><a href="aaa">aaa</a>
</body>

3.3)添加 WEB-INF\success.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>success</title>
</head>
<body><h1>SUCCESS</h1><h1>${msg}</h1>
</body>
</html>

添加视图前后缀

application.properties 
# 设置视图路径前后缀
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
# 设置应用访问根路径
server.servlet.context-path=/springbt_04_web_jsp2

3.4)目录结构 

3.5)访问效果

4)springboot启动主程序

Springbt04WebJsp2Application

public class Springbt04WebJsp2Application {public static void main(String[] args) {SpringApplication.run(Springbt04WebJsp2Application.class, args);}}
ServletInitializer
public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(Springbt04WebJsp2Application.class);}
}


【7】小结

step1)必须创建一个 war项目;

step2)将嵌入式的tomcat设置为provided,表示 不打入 war包;

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

step3)必须编写一个  SpringBootServletInitializer 实现类; 目的调用 configure方法;

public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {// 传入springboot应用主程序return application.sources(Springbt04WebJsp2Application.class);}
}

 

step4)启动tomcat即可

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

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

相关文章

生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘

被这个问题折磨了很久&#xff0c;本人解决方法如下&#xff0c;奉劝一句&#xff0c;该看的官方文档还是要看&#xff0c;但是千万别傻傻地照做&#xff01; 首先编写bootstrap.properties&#xff0c;往里写入&#xff1a; 这些基础配置 然后检查自己是否引入了这个依赖&am…

python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...

“在输入的十个数字中求最大和最小值的 python 代码”这个需求&#xff0c;在不同时间来看&#xff0c;解题思路不同&#xff0c;所需要的 python 知识点不同。 作为萌新的我&#xff0c;为此特意整理了 3 种解法&#xff0c;以及相应的知识点笔记。 解法A&#xff1a;不使用列…

(转)mysql查看连接客户端ip和杀死进程

转自&#xff1a; mysql &#xff1a; show processlist 详解 - _小豪豪 - 博客园最近排查一些MySQL的问题&#xff0c;会经常用到 show processlist&#xff0c;所以在这里把这个命令总结一下&#xff0c;做个备忘&#xff0c;以备不时只需。 首先是几条常用的SQL。 1、按客户…

Java NIO学习笔记之图解ByteBuffer

转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了&#xff0c;实际使用也用了一些&#xff0c;总觉得条理不够清晰。 《程序员的思维修炼》一本书讲过&#xff0c;主动学习&#xff0c;要比单纯看资料效果来的好&#xff0c;所以干脆写个详细点的文章来…

小小涉及OpenFeign原理:Could not extract response: no suitable HttpMessageConverter found for response type

一、问题解释&#xff08;想看总结的去最下面&#xff09; org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class XXX] and content type [XXX;XXX]凡是报这个错误&am…

apache shiro怎么升级_Springboot整合Shiro之授权

第二条为推广文章&#xff0c;阅读一次0.3kuai&#xff0c;收入用于网站服务器及资源索取。Shiro是我们常用的一个权限管理框架&#xff0c;本文的重点是来介绍下在SpringBoot环境下我们怎么来使用Shiro。一、添加相关依赖本案例中我们使用SpringDataJPA和Thymeleaf来配合讲解&…

转: 虚拟IP(VIP)原理

转自&#xff1a; 虚拟IP&#xff08;VIP&#xff09;原理_海阔天空sky的博客-CSDN博客_vip 虚拟ip原理高可用性HA&#xff08;High Availability&#xff09;指的是通过尽量缩短因日常维护操作&#xff08;计划&#xff09;和突发的系统崩溃&#xff08;非计划&#xff09;所…

NIO学习–缓冲区

转载自 NIO学习–缓冲区Buffer其实就是是一个容器对象&#xff0c;它包含一些要写入或者刚读出的数据。在NIO中加入Buffer对象&#xff0c;体现了新库与原I/O的一个重要区别。在面向流的I/O中&#xff0c;您将数据直接写入或者将数据直接读到Stream对象中。 在NIO库中&#xff…

谷粒商城RabbitMQ设计思想详解:消息队列双重保险设计

前言 上来先放一张设计图&#xff0c;看这篇文章的前提是一定得写过或者了解这段业务&#xff0c;不然会看不懂&#xff0c;我下面将会给出我的理解&#xff0c;尽量让大家明白 设计思想 TransactionalOverridepublic SubmitOrderResponseVo submitOrder(OrderSubmitVo vo) {…

java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

写在前面的话这篇文章计划是在过年期间完成的&#xff0c;示例代码都写好了&#xff0c;结果亲戚来我家做客&#xff0c;文章没来得及写。已经很久没有更新文章了&#xff0c;小伙伴们&#xff0c;有没有想我啊。言归正传&#xff0c;下面开始&#xff0c;今天的话题。目标写一…

转:elasticsearch nested嵌套查询

转自&#xff1a; 【弄nng - Elasticsearch】DSL入门篇&#xff08;七&#xff09;—— Nested类型查询&#xff0c;聚合_司马缸砸缸了-CSDN博客文章目录1. nested query2. nested 对象聚合项目推荐nested类型就是为了解决object类型在对象数组上丢失关联性的问题的&#xff0…

谷粒商城RabbitMQ锁库存逻辑详解--新理解(长文警告)

前言 不废话&#xff0c;上来就说&#xff0c;代码我会放挺多&#xff0c;写过这个项目的自然能懂&#xff0c;如果真的像理解的请认真看哦 分析 /*出现的问题&#xff1a;扣减库存成功了&#xff0c;但是由于网络原因超时&#xff0c;出现异常&#xff0c;导致订单事务回滚&…

NIO学习–核心概念与基本读写

转载自 NIO学习–核心概念与基本读写这两天花了时间学习了java的nio&#xff0c;看的书是Ron Hitchens著的 《Java NIO》&#xff0c;总的来说&#xff0c;这本书真的写的非常好&#xff0c;而且整本书将java nio的内容从底层讲了个遍&#xff0c;书不厚&#xff0c;但是确实值…

python3安装mysql模块_Python安装MySQL库详解,步骤及错误的解决方法

前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件&#xff0c;而当数据量增加之时&#xff0c;就需要将其存储至本地数据库了。Python访问数据库需要对应的接口程序&#xff0c;我们可以把接口程序理解为Python的一个模块&#xff0c;它提供了数据库客户端的接…

centos8安装docker

【README】本文参考了 docker官方文档安装指南&#xff0c; Install Docker Engine on CentOS | Docker DocumentationInstructions for installing Docker Engine on CentOShttps://docs.docker.com/engine/install/centos/ 【1】安装前的工作 1.需要centos7或8上&#xff1b…

34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)

public int[] searchRange(int[] nums, int target) {//先决条件排除一部分if(target < nums[0] || target > nums[nums.length - 1]){return new int[]{-1,-1};}//初始化左右边界int l 0;int r nums.length - 1;//初始化数组int[] arr {-1,-1};int mid 0;//代表左边…

datagridview绑定数据源不显示_sharding-jdbc系列之 数据源配置(一)

spring boot Yaml方式Bean定义一个Config类&#xff0c;配置数据源&#xff0c;上面的代码很简单&#xff0c;无非就是获取yaml文件&#xff0c;然后通过YmlByteArrayDataSource创建一个dataSource public YmlByteArrayDataSource继承了ShardingDataSource&#xff0c;调用了su…

关于 NIO 你不得不知道的一些“地雷”

转载自 关于 NIO 你不得不知道的一些“地雷”本文是笔者在学习NIO过程中发现的一些比较容易让人忽略的知识的一个总结&#xff0c;而这些让人忽略的小细节恰恰是NIO网络编程中必不可少。虽然现在我们不会直接编写NIO来完成我们的网络层通讯&#xff0c;而是使用成熟的基于NIO的…

转:Centos防火墙设置与端口开放的方法

转自&#xff1a; Centos防火墙设置与端口开放的方法_tianxin的专栏-CSDN博客Centos升级到7之后&#xff0c;内置的防火墙已经从iptables变成了firewalld。所以&#xff0c;端口的开启还是要从两种情况来说明的&#xff0c;即iptables和firewalld。更多关于CentOs防火墙的最新…

583. 两个字符串的删除操作用时6ms的另类解法

开门见山 看见这道题&#xff0c;我的第一反应不是去找出符合这道题的动态规划递推公式&#xff0c;我反而认为可以借用一下1143. 最长公共子序列的题解 class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new int[text1.lengt…