【问题标题】:How to integrate Angular 4 with an existing Spring Boot jsp based web app?如何将 Angular 4 与现有的基于 Spring Boot jsp 的 Web 应用程序集成?
【发布时间】:2018-04-04 13:04:19
【问题描述】:

我有一个现有的 Spring Boot 生产网络应用程序,使用 jsp 和 javascript。我想替换现有页面(一次一个或两个),如果时间允许。我是 Angular 的新手,我遇到的所有文档/帖子似乎都认为 Angular 是一个全有或全无的场景。对于初学者,我将如何替换应用程序中的页面,该页面可以在此地址 /cust/AccountSampleQuery?active=y 找到?用户此时已通过身份验证,并已从菜单中选择此地址。

【问题讨论】:

  • angular 不会在您的项目中作为 jsp 运行。 angular 将独自一人,并向您的 java web 应用程序发出一些请求。所以你需要先构建一个rest api)
  • 是的,我知道 Angular 是客户端,我需要一个 REST api。当用户单击 /cust/AccountSampleQuery 的菜单选项时,我正在苦苦挣扎,该角度“拦截”请求并显示初始页面,用户在页面上输入数据,单击提交,然后角度提交 REST 请求,并且处理响应。

标签: angular jsp spring-boot


【解决方案1】:

Angular 很容易与 Spring RESTful api 集成,如果您正在编写它是新鲜的,但它并非不可能在您的情况下集成。 Angula 的工作原理与 AJAX 相同,但它更像 Java。

您需要将现有的 JSP 方法替换为 REST API 方法,在这种方法中,您有 REST 控制器来处理传入的 Web 请求(用于发布和查询参数和路径变量的 JSON)并使用HttpStatus 代码和 JSON 对象进行响应。

身份验证必须替换为 JWT 或任何类型的基于令牌的身份验证。由于 Angular 很难基于会话运行,更像是基于令牌。因此,如果要发送到 API 的安全部分,每个请求都必须附带一个令牌。

如果您希望将 Angular 应用程序与 Spring API(.jar.war 文件)一起打包,您将需要 WebMvcConfigurerAdapter 来配置静态内容路径。这是一个示例静态内容路径:

public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
        registry.addResourceHandler("**/assets/**")
                .addResourceLocations("classpath:/static/assets");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("redirect:/index.html");
    }
}

const appRoutes: Routes = [
  {path: 'customer', component: CustomerComponent},
  {path: 'admin', component: AdminComponent},
  {path: '**', redirectTo: ''}
];

@NgModule({
  imports: [
    RouterModule.forRoot(appRoutes, {useHash: true})
  ],
  exports: [
    RouterModule
  ]
})
export class AppRoutingModule {

}

【讨论】:

  • 我必须使用 angular index.html,还是可以使用更有意义的东西,比如 customer.html?此外,我有一个应用程序的管理端,我想使用 admin.html,而不是 index.html。
  • 在 Angular 中是一个基于组件的系统;这意味着没有页面。您有单个页面 index.html 并且所有其他 HTML 文件都加载到它上,具体取决于路由器导航。一切都由RouterModule 管理,因此您的ULR 可以类似于http://localhost/adminhttp://localhost/customer 。路由器将对此进行管理。我将添加示例路由器。可以将index.html 更改为某些东西,但我不认为这有什么意义,因为它主要用于加载<app-root></app-root><base href="/">
  • {useHash: true} 拯救了我的夜晚。我在使用类似于 /jsp/myapp/index.jsp 的 JSP 启动我的应用程序时遇到问题。如果没有此选项,我将无法使用预定义的路由(例如 /jsp/myapp/event/123)启动我的应用程序,因为它不知道加载 index.jsp。使用 hash 选项,它可以理解 /jsp/myapp/#/event/123。我在 AngularJS 中知道这一点,但不知道如何在 Angular 5 中打开它。谢谢!
猜你喜欢
  • 2018-01-26
  • 2018-10-19
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2013-03-26
  • 2017-12-11
相关资源
最近更新 更多