Я борюсь с проблемой, когда spring-boot не обслуживает интерфейсные файлы (созданные с помощью angular) на 8080. Я запустил ng build
, который преобразовал файлы компонентов .ts ng в .js и сгенерировал в outputPath: / папка resource / static (я устанавливаю outputPath в файле angular.json).
Создан контроллер для обслуживания контента из ресурсов / статических.
@Controller
public class AppController {
@GetMapping("/")
public String index() {
return "index";
}
}
основной класс (src / mainjava / webapp / app):
@Configuration
@EnableAutoConfiguration
@ComponentScan({"webapp"})
public class Application extends WebMvcAutoConfiguration {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
}
}
Ran ng build --base-href .
создает файлы, как показано на рисунке ниже.
index.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome app</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="runtime.js"></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>
Примечание. Это простой проект. Код переднего конца находится по адресу: src / main / java / webapp / frontend dir
Application.yml в / resources
server:
servlet:
context-path: /
port: 8080
На старте кота:
Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-13 12:45:34.372 INFO 96027 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-13 12:45:34.384 INFO 96027 --- [ main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandle
2018-09-13 12:45:34.405 INFO 96027 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html]
2018-09-13 12:45:34.566 INFO 96027 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-09-13 12:45:34.568 INFO 96027 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'dataSource' has been autodetected for JMX exposure
2018-09-13 12:45:34.575 INFO 96027 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2018-09-13 12:45:34.620 INFO 96027 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
Я даже пытался добавить html-файл в / resources, чтобы посмотреть, обслуживает ли tomcat какое-либо содержимое из этой папки. Я также не могу получить доступ к page1.html, так что не уверен, чем будет отличаться контент angular / ng от того, который он не сможет обслуживать, когда tomcat запущен и работает.
ресурсы / статический
Нужна ли какая-либо другая конфигурация, чтобы иметь код углового внешнего интерфейса с пружинной загрузкой? Любое предложение приветствуется.
@ DavidT Ответы на ваши вопросы:
Да, в
build.gradle: compile('org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE')
статический контент здесь:
MyProject / MyProject-Web / SRC / главная / ресурсы / статический /
Поскольку подпружиненный загрузчик не выбирает угловое статическое содержимое из пути, я
ссылаются на онлайн-ресурсы, которые предлагают добавить контроллер
специально, чтобы служить ему. [У меня есть 3 нг компонентов
логин : http://localhost:4200/,home: http://localhost:4200/home,sale: http://localhost:4200/sale. Но
чтобы получить доступ к порту Tomcat, я думал, чтобы положить файлы под статические; остальное
угловые позаботятся о маршрутизации.]
При запуске ng build
из frotnend dir генерирует угловые файлы в frontend / src dir. Либо я могу вручную скопировать, вставить вручную, чтобы поместить в статическую папку, либо изменить outputPath
, чтобы он указывал на ресурсы / статические в angular.json, которые непосредственно помещают его туда при запуске ng build cmd. точная
файлы на вышеуказанных ресурсах / статический скриншот.
Я не использовал консоль javascript, но открыл index.html в браузере
вариант от IntellijIdea, проверить на веб-странице я вижу ошибку-
Отказался от выполнения скрипта из '', потому что его MIME-тип
('text / html') не является исполняемым, и строгая проверка типов MIME
включен.
Замена <script type to "text/html"
удаляет эти ошибки из проверки, но пользовательский интерфейс по-прежнему отсутствует http://localhost:8080/.
Странная часть, когда я вставил тот же файл index.html из этого демонстрационного проекта в мой в статической папке, он ничего не отображает при просмотре http://localhost:8080. Но заметил, когда открывал этот файл из браузера в IntellijIdea (этот URI в браузере: http://localhost:63342/MY-PROJ/MY-PROJ-WEB-main/static/index.html, затем он показывает содержимое
Является ли <base href="/">
проблемой или тегами сценариев?