java-使用war将spring-boot和angular 7应用程序部署到tomcat 8.5中
程序员文章站
2023-12-30 18:38:52
...
我正在尝试使用war将Angular 7 Spring Boot应用程序部署到tomcat中.我遵循了一些步骤来用角度代码发动战争.使用UI代码成功创建了战争.但是我无法调用UI代码.
当我尝试打电话时
>本地主机:8080 / war-name
>本地主机:8080 / war-name / index.html
>本地主机:8080 / index.html
它显示404.
Web服务正常运行.我可以打电话给他们.
如何调用应用程序的index.html?
注意:-我没有使用spring-boot-starter-web
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 http://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.1.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.hackthon</groupId>
<artifactId>pmoconnect</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>pmoconnect</name>
<description>PMO Connect</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<start-class>com.hackthon.HackthonApplication</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- excel 2007 over -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<nodeVersion>v8.11.3</nodeVersion>
<npmVersion>6.3.0</npmVersion>
<workingDirectory>src/main/ngapp/</workingDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
<execution>
<id>prod</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run-script build</arguments>
</configuration>
<phase>generate-resources</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/static/</outputDirectory>
<!-- <outputDirectory>${project.build.directory}/../src/main/resources/static/</outputDirectory> -->
<resources>
<resource>
<directory>/src/main/ngapp/dist/</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
<warName>pmoconnect</warName>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.properties
spring.datasource.url = jdbc:mysql://localhost:3306/elite_db?allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username = <username>
spring.datasource.password = <password>
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
org.hibernate.envers.audit_table_suffix = _AUDIT_LOG
HackthonApplication.java
@SpringBootApplication
@ComponentScan
public class HackthonApplication {
public static void main(String[] args) {
SpringApplication.run(HackthonApplication.class, args);
}
}
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>PMO Connect</title>
<base href="./">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="es2015-polyfills.js" nomodule></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="styles.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
战争档案
Tomcat日志
2019-03-27 10:34:19.134 INFO 18464 --- [ost-startStop-2] com.hackthon.HackthonApplication : No active profile set, falling back to default profiles: default
2019-03-27 10:34:19.291 INFO 18464 --- [ost-startStop-2] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2019-03-27 10:34:22.558 INFO 18464 --- [ost-startStop-2] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-03-27 10:34:22.977 INFO 18464 --- [ost-startStop-2] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 372ms. Found 6 repository interfaces.
2019-03-27 10:34:24.386 INFO 18464 --- [ost-startStop-2] o.a.c.c.C.[.[localhost].[/pmoconnect] : Initializing Spring embedded WebApplicationContext
2019-03-27 10:34:24.386 INFO 18464 --- [ost-startStop-2] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 5094 ms
2019-03-27 10:34:24.809 INFO 18464 --- [ost-startStop-2] o.s.b.a.jersey.JerseyAutoConfiguration : Configuring existing registration for Jersey servlet 'com.hackthon.config.JerseyConfiguration'
2019-03-27 10:34:25.046 INFO 18464 --- [ost-startStop-2] o.s.boot.web.servlet.RegistrationBean : Servlet com.hackthon.config.JerseyConfiguration was not registered (possibly already registered?)
2019-03-27 10:34:25.628 INFO 18464 --- [ost-startStop-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-03-27 10:34:26.473 INFO 18464 --- [ost-startStop-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-03-27 10:34:26.815 INFO 18464 --- [ost-startStop-2] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2019-03-27 10:34:27.465 INFO 18464 --- [ost-startStop-2] org.hibernate.Version : HHH000412: Hibernate Core {5.3.7.Final}
2019-03-27 10:34:27.472 INFO 18464 --- [ost-startStop-2] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-03-27 10:34:28.996 INFO 18464 --- [ost-startStop-2] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-03-27 10:34:30.597 INFO 18464 --- [ost-startStop-2] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
2019-03-27 10:34:30.951 INFO 18464 --- [ost-startStop-2] o.h.e.boot.internal.EnversServiceImpl : Envers integration enabled? : true
2019-03-27 10:34:41.272 INFO 18464 --- [ost-startStop-2] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-03-27 10:34:43.158 INFO 18464 --- [ost-startStop-2] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
2019-03-27 10:34:46.554 INFO 18464 --- [ost-startStop-2] com.hackthon.HackthonApplication : Started HackthonApplication in 29.239 seconds (JVM running for 143.14)
2019-03-27 10:34:46.944 INFO 18464 --- [ost-startStop-2] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2019-03-27 10:34:50.219 WARN 18464 --- [ost-startStop-2] org.glassfish.jersey.internal.Errors : The following warnings have been detected: WARNING: A HTTP GET method, public javax.ws.rs.core.Response com.hackthon.service.WSFGMapping.getMappings(java.lang.String), should not consume any entity.
2019-03-27 10:34:50.348 INFO 18464 --- [ost-startStop-2] org.apache.catalina.startup.HostConfig : Deployment of web application archive [C:\Users\kaukhare\myWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\webapps\pmoconnect.war] has finished in [68,229] ms
最佳答案
我也遇到了同样的问题,并通过在index.html中添加以下脚本来解决
<base href="/" id="baseHref">
<script>
(function() {
document.getElementById('baseHref').href = '/' + window.location.pathname.split('/')[1] + "/";
})();
</script>
我认为它将解决您的问题.