我在一个问题上苦苦挣扎,其中spring-boot不在8080上提供(通过angular创建的)前端文件。我运行ng build
,将.ts ng组件文件转换为.js并在outputPath中生成:/ resource / static文件夹(我在angular.json文件中设置了outputPath)。
创建了一个控制器来提供资源/静态内容。
@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>
注意:这是一个gradle项目。前端代码位于:src / main / java / webapp / frontend dir
/ resources中的Application.yml
server:
servlet:
context-path: /
port: 8080
在tomcat上启动:
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 ''
我什至尝试在/ resources下添加html文件,以查看tomcat是否提供此文件夹中的任何内容。我也无法访问page1.html,因此不确定在tomcat启动并运行时无法提供的angular / ng内容会有什么不同。
我是否需要任何其他配置以使spring-boot服务于有角度的前端代码?任何建议表示赞赏。
@DavidT对您的问题的回答:
是
build.gradle:compile('org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE')
静态内容在这里: MYPROJECT / MYPROJECT-web / src / main / resources / static /
由于spring-boot没有从路径中选择角度静态内容,因此我 参考了建议添加控制器的在线资源 专门为它服务。 [我有3 ng组件可访问- 登录:http://localhost:4200/,家庭:http://localhost:4200/home,销售:http://localhost:4200/sale。但 访问我想将文件置于静态下的tomcat端口;休息 角将负责布线。]
从frotnend目录运行ng build
时,会在frontend / src目录下生成角度文件。我可以手动复制,手动粘贴以放置在静态文件夹中,也可以更改outputPath
以指向angular.json中的resources / static,将其直接放在运行ng build cmd的位置。精确
以上资源/静态屏幕截图中的文件。
我还没有使用JavaScript控制台,而是使用浏览器打开index.html IntellijIdea中的选项,请在网页上检查我是否看到错误-
拒绝执行“”中的脚本,因为其MIME类型 ('text / html')不可执行,并且严格的MIME类型检查是 启用。
替换<script type to "text/html"
可以从检查中删除这些错误,但http://localhost:8080/上仍然没有UI。
奇怪的是,当我从该演示项目中粘贴相同的index.html文件以将其粘贴到静态文件夹中时,浏览至http://localhost:8080时它什么也不显示。但是注意到在IntellijIdea中从浏览器选项打开此文件时(浏览器中的此URI:http://localhost:63342/MY-PROJ/MY-PROJ-WEB-main/static/index.html,然后显示了内容
<base href="/">
是问题还是脚本标记?
答案 0 :(得分:0)
这是因为您正在使用@RestController注释,该注释隐式包括@ResponseBody。您必须使用@Controller进行Spring启动才能自动加载html模板。
@Controller
public class AppController {
@GetMapping("/")
public String index() {
return "index";
}
}
答案 1 :(得分:0)
迈向成功的步骤,而不必像上面的链接那样复杂:
demo
demo
更改名称)<html><body>YOU ARE IN!</body></html>
./gradlew bootRun
目录中发出以下命令以运行您的应用程序:http://localhost:8080/
MY PROJECT/src/main/resources/static/
您现在有证据证明,将某些内容放入compile('org.springframework.boot:spring-boot-starter-web')
中将产生HTML文件的内容。
所以我有以下问题:
您是否使用/
之类的东西将SpringMVC添加到Spring Boot项目中?
您是否已将静态内容放入“我的项目” / src / main / resources / static /?
MY PROJECT/src/main/resources/static/
的那个?runtime.js
文件中?https://spring.io/guides/gs/serving-web-content/
?请参阅“添加主页”部分中的https://stackoverflow.com/questions/24661289/spring-boot-not-serving-static-content
请参见https://www.quora.com/How-can-spring-boot-serve-angular-static-files/answer/David-Talalayevsky
内容,了解有关不执行操作(以及原因)的其他想法。
此信息最初发布于{{1}}
答案 2 :(得分:0)
在Controller方法上,尝试将@RequestMapping批注仅作为建议
赞:
@Controller
@RequestMapping("/")
public class AppController{
}
在ComponentScan上(basepackages {“模态类的com.packagename”})
答案 3 :(得分:0)
发生这种情况是因为spring尝试处理您的请求,但它不知道它们应该变为静态。尝试添加以下配置:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/ui/**").setViewName("/");
}
}
addViewController("/ui/**")
是访问有角页面的模式