当前位置: 首页 > 知识库问答 >
问题:

使用AngularJS HTML5模式的Spring Boot

冉永宁
2023-03-14

我用Spring Boot启动我的Web应用程序。它使用一个简单的主类来启动嵌入式tomcat服务器:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

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

}

我想配置服务器的方式,他可以处理angularjs HTML5模式,将激活与

$locationProvider.html5Mode(true);

其他用户的相关帖子显示,您需要重定向到根目录。html5模式从url中删除hashbag。如果你刷新页面,服务器找不到页面,因为他没有处理散列。请参阅:AngularJS-为什么更改url地址时$routeProvider似乎不起作用,而我遇到了404错误

共有3个答案

阳俊德
2023-03-14

我找到了一个我能接受的解决方案

@Controller
public class ViewController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping("/app/**")
    public String app() {
        return "index";
    }
}

angularjs应用程序必须位于子域应用程序下。如果你不想,你可以创建一个类似子域的应用程序。子域。映射到你的子域应用的com。有了这个结构,你就不会与WebJAR、statis内容等产生冲突。

柴凌
2023-03-14

我也有同样的问题。据我所知,在html5模式下,angularjs不解析哈希,而是输入url或通过pushState添加的url。

问题是PathResourceResolver映射目录,而不是文件。因为它打算从目录中服务请求的html" target="_blank">文件,而不是重写网址。对于应用程序来说,这是意味着,如果你刷新浏览器窗口或像http://example.com/mystate一样键入网址,它会从服务器查询“/mystate”。如果Spring不知道网址,他们会返回404。解决方案之一是将每一个可能的状态映射到index.html,就像这里一样(来源,顺便说一句,看看webjars——太棒了!)。但在我的情况下,我可以安全地将 "/**" 映射到index.html,因此我的解决方案是覆盖PathResourceResolver#getResources:

@Configuration
@EnableConfigurationProperties({ ResourceProperties.class })
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private ResourceProperties resourceProperties = new ResourceProperties();

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        Integer cachePeriod = resourceProperties.getCachePeriod();

        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setCachePeriod(cachePeriod);

        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/index.html")
                .setCachePeriod(cachePeriod).resourceChain(true)
                .addResolver(new PathResourceResolver() {
                    @Override
                    protected Resource getResource(String resourcePath,
                            Resource location) throws IOException {
                        return location.exists() && location.isReadable() ? location
                                : null;
                    }
                });
    }
}
翟京
2023-03-14

使用此控制器将URI转发到index.html以保存AngularJS路由。源https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part-vii

@Controller
public class ForwardController {

    @RequestMapping(value = "/**/{[path:[^\\.]*}")
    public String redirect() {
        // Forward to home page so that route is preserved.
        return "forward:/";
    }
} 

在这个解决方案中,ForwardController只转发路径,这些路径在任何其他ControllerRestController中都没有定义。这意味着如果你已经:

@RestController
public class OffersController {

    @RequestMapping(value = "api/offers")
    public Page<OfferDTO> getOffers(@RequestParam("page") int page) {
        return offerService.findPaginated(page, 10);
    }
} 

两个控制器都将正常工作-@RequestMapping(value=“api/offers”)@RequestMapping(value=“/**/{[path:[^\\.]*}”)之前被检查

 类似资料:
  • 我正在为即将到来的期末考试做一个练习测试,这是其中一个问题: 使用和函数创建以下向量: X=-7, -7, -7, 0, 7, 7, 14, 14, 14, 14 我不知道如何创建这种模式。以下是迄今为止我所拥有的,但我不确定这是实现它的最优雅的方式: 任何建议将不胜感激!

  • 本文向大家介绍Redis的使用模式之计数器模式实例,包括了Redis的使用模式之计数器模式实例的使用技巧和注意事项,需要的朋友参考一下 Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧、锋利、实用,特别适合解决一些使用传统关系数据库难以解决的问题。打算写一系列 Redis 使用模式的文章,深入总结介绍 Redis 常见的使用模式,以供大家参考。 常见汇总计数器 汇总计数是系

  • Slime的所有命令都通过slime-mode提供。它是一个与Emacs的lisp-mode配合使用的minor-mode。本章描述slime-mode及其相关事项。 3.1 用户界面须知 要方便地使用Slime,了解一些“全局的”用户界面特性是十分重要的。这一部分描述了最为重要的原则。 3.1.1 临时缓冲区 某些Slime命令会创建临时缓冲区来显示结果。虽然这些缓冲区有它们自己的为了特定目的而

  • 是否可以定义一次regex并重用它?我有几个非常复杂的正则表达式,我想将它们用作模式,用于模式中各种不同对象的大量属性的值。复制粘贴这个看起来像是自找麻烦,但我似乎找不到合适的重用示例。 删去说明我想做什么的模式。 在http://www.jsonschemavalidator.net/中不进行验证,因为“pattern”不是字符串。这是一个重复使用的洞吗。我看过patternProperties

  • MATLAB的figure窗口支持一种指向和点击方式的编辑模式,用它可以自定义图形的外观。以下插图说明打开了作图编辑模式的figure窗口及标明了此模式的主要特点。

  • 由于 PLY 从文档字串中获取信息,语法解析和词法分析信息必须通过正常模式下的 Python 解释器得到(不带 有-O 或者 -OO 选项)。不过,如果你像这样指定 optimize 模式: lex.lex(optimize=1) yacc.yacc(optimize=1) PLY 可以在下次执行,在 Python 的优化模式下执行。但你必须确保第一次执行是在 Python 的正常模式下进行,一旦

  • 问题内容: 如何将带有主体结束标签的reactjs模态窗口追加到带有主体标签的模态定位绝对值中。 这是在另一个组件内添加的示例。 问题答案: 在反应中,这通常称为“层”。看到这个小提琴

  • 问题内容: 关门了 。这个问题是基于观点的。它当前不接受答案。 想要改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 正如我在标题中提到的,我很想知道您(作为经验丰富的开发人员)对DAO模式的使用有何看法,特别是在Web应用程序中。您发现了哪些优势,而又讨厌使用它的后果? 问题答案: 我所见过的DAO的问题在于,它们通常一直都在处理完整的对象。这会