独立运行spring boot应用程序时映射不起作用

时间:2015-11-24 13:06:00

标签: java spring spring-boot

我在项目中使用了spring boot。当我使用ide启动应用程序时一切正常,但是当我运行jar文件并在浏览器中打开第一页时,我看到了这个文本:

file://
http://
https://
ftp://
webdav://

Spring启动配置类是:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

There was an unexpected error (type=Not Found, status=404).
/login.html

如何解决这个问题?

编辑 - >项目树

@EnableAutoConfiguration
@EnableTransactionManagement
@EnableJpaAuditing
@EnableCaching
@EnableWebMvc
@EnableWebMvcSecurity
@Import({SecurityLauncher.class})
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class Launcher extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(Launcher.class);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
    }

    @Bean
    public DispatcherServlet dispatcherServlet() {
        return new DispatcherServlet();
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

编辑2 - > Spring安全配置:

├── src
│   ├── main
│   │   ├── java
│   │   ├── resources
│   │   └── webapp
│   │       ├── app
│   │       │   ├── css
│   │       │   ├── js
│   │       │   │   ├── controllers
│   │       │   │   ├── directives
│   │       │   │   ├── factory
│   │       │   │   ├── filters
│   │       │   │   └── services
│   │       │   ├── lib
│   │       │   ├── resources
│   │       │   ├── templates
│   │       │   └── view
│   │       └── WEB-INF
|   |       |__ index and login files
│   └── test
│       └── java

5 个答案:

答案 0 :(得分:2)

@SpringBootApplication正在错误的软件包中扫描控制器,但找不到控制器,所以你必须删除@SpringBootApplication并让@ComponentScan(basePackages =" ...")查找控制器得到正确的扫描。当您启动login.html时,您是否在日志中看到了映射消息?

答案 1 :(得分:1)

通常,在Spring Boot应用程序中,您将静态文件放在src/main/resources/staticsrc/main/resources/publicsrc/main/resources/resourcessrc/main/resources/META-INF/resources下。您的模板属于src/main/resources/templates

官方documentation说:

  

如果您的应用程序将打包为jar,请不要使用src / main / webapp目录。虽然这个目录是一个通用标准,但它只适用于war包装,如果你生成一个jar,它将被大多数构建工具默默忽略。

答案 2 :(得分:0)

如果它只是一个html文件,则需要添加到路径 src / main / resources / static

src/main/resources/static/index.html

并称之为

http://{IP}:{port}/index.html

答案 3 :(得分:0)

问题在于contextPath。 有两种方法可以解决它:

  1. 在没有任何contextPath的情况下运行您的应用。例如http://localhost:8080/hello
  2. 或将application.properties中的contextPath设置为server.contextPath = / myapp 然后访问网址:http://localhost:8080/myapp/hello

答案 4 :(得分:0)

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content

默认情况下,Spring Boot将从类路径中的/ static(或/ public或/ resources或/ META-INF / resources)目录或ServletContext的根目录中提供静态内容。它使用Spring MVC中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMvcConfigurerAdapter并覆盖addResourceHandlers方法来修改该行为。

在独立的Web应用程序中,还启用了容器中的默认servlet,并充当后备,如果Spring决定不处理它,则从ServletContext的根目录提供内容。大多数情况下,这不会发生(除非您修改默认的MVC配置),因为Spring总是能够通过DispatcherServlet处理请求。

默认情况下,资源映射到/ **,但您可以通过spring.mvc.static-path-pattern调整它。例如,可以按如下方式将所有资源重新定位到/ resources / **:

spring.mvc.static路径图案= /资源/ **

希望有帮助!!!