带有Spring Boot的Eclipse RAP

介绍

我喜欢Eclipse :-)。 我已经使用了很多年了。 我认为IDE很棒,它是免费的! 但是Eclipse不仅限于IDE。 它更像是一个由应用程序,插件和项目组成的生态系统。 任何人都可以使用Eclipse框架创建自己的基于Eclipse的应用程序。
它称为Eclipse RCP –胖客户端应用程序。 任何RCP都基于与Eclipse IDE相同的原理:该产品包含一些功能,任何功能都包含一些插件。

Eclipse RAP

我听说有可能将插件直接包含在产品中,但已弃用。

Eclipse Framework中的UI基于两件事:

  • 应用模型
  • SWT –标准小工具工具包

应用程序模型就像一个大的“调解人”(还记得模式吗?),可以在较高的层次上处理许多UI组件的交互。 它以类似XML的格式定义。 它定义了窗口,部件,命令,处理程序,菜单等。

SWT是小部件的集合:按钮,标签,对话框。 这些小部件用于在比应用程序模型更低的级别上创建UI。 例如,零件(MPart类)中的UI是使用SWT创建的。

Eclipse框架也可以用于创建Web应用程序。 它称为Eclipse RAP –远程应用程序平台。 这个想法既简单又令人印象深刻。 UI是使用SWT小部件用Java创建的。 实际上,UI是使用适合RAP的SWT小部件创建的。 然后将其呈现在浏览器中。 有一个特殊的servlet执行RWTServlet的渲染(RWT可能代表Remote Widget Toolkit)。 是RAP开发人员指南的链接。

最后一点。 我们都知道Spring Boot非常棒:-))! 它必须是用于创建Web应用程序的主导平台。 它提供了一些创建UI的技术,例如JSP或Thymeleaf。 但是JSP有点旧,而Thymeleaf的交互性可能不如RAP。 使两者一起工作将是很棒的。

WAR文件中带有Spring Boot的RAP应用程序

第一种选择是使用Spring Boot和RAP创建WAR并将其部署到Tomcat。 这是《开发人员指南》中描述的选项。 是链接。 我复制了重要文件。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <context-param>
    <param-name>org.eclipse.rap.applicationConfiguration</param-name>
    <param-value>com.example.HelloWorldConfiguration</param-value>
  </context-param>

  <listener>
    <listener-class>org.eclipse.rap.rwt.engine.RWTServletContextListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>rwtServlet</servlet-name>
    <servlet-class>org.eclipse.rap.rwt.engine.RWTServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>rwtServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

应用程序配置:

public class HelloWorldConfiguration implements ApplicationConfiguration {
  public void configure( Application application ) {
    application.addEntryPoint( "/hello", HelloWorld.class, null );
  }
}

和班级:

public class HelloWorld extends AbstractEntryPoint {
  public void createContents( Composite parent ) {
    Label label = new Label( parent, SWT.NONE );
    label.setText( "Hello RAP World" );
  }
}

为了使其与Maven WAR打包一起使用,请将web.xml放入src / main / webapp / WEB-INF。 必须在web.xml中为rwtServlet配置应用程序配置中的入口点。

对于Spring Boot,添加以下内容:

@SpringBootApplication
public class SpringApp extends SpringBootServletInitializer {
  public SpringApplicationBuilder configure( SpringApplicationBuilder builder ) {
    return builder.web(WebApplicationType.NONE).sources(<configurations>);
  }
}

在pom.xml中,将包装设置为war。
<packaging>war</packaging>

尽管有一个重要问题。 Eclipse jar在Maven Central中不可用。 也许可以以某种方式使用p2存储库,但我没有尝试过。 毕竟只需要一个罐子。 我使用了最新的可用版本RAP 3.5。 该jar为org.eclipse.rap.rwt_3.5.0.20180613-1038.jar。

我将其手动安装到本地Maven存储库,并在pom中使用了依赖项。

这足以构建一个WAR并在Tomcat 9中使用它。无需黑客。

可执行jar中带有Spring Boot的RAP应用程序

此选项看起来更方便。 能够在Spring Boot中使用RWTServlet真是太好了。 然后,所有功能(如可执行jar和嵌入式Tomcat)将立即可用。

首先将主Spring Boot类恢复正常:

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

实际上,Spring Boot可以使用ServletRegistrationBean添加一个Servlet:

@Bean
public ServletRegistrationBean<RWTServlet> servletRegistrationBean() {
    ServletRegistrationBean<RWTServlet> rwt = new 
ServletRegistrationBean<RWTServlet>(new RWTServlet(),"/hello", "/hello2");
    return rwt;
}

但是不幸的是,这还不够。 此RWTServlet需要将特殊上下文绑定到ServletContext。 先前在WAR示例中,RWTServletContextListener处理了:-(。

但是即使在这种绝望的情况下, Spring Boot也显示出它是值得的 :-)。 它可以通过将自定义侦听器声明为bean来绑定它们! RWTServletContextListener的默认功能需要一些修改,因为事实证明,从Spring Boot内部绑定此侦听器有一些限制。 我最终得到的是:

public class RWTSCLSimple extends RWTServletContextListener {

    private ApplicationRunner applicationRunner;

    @Override
    public void contextInitialized( ServletContextEvent event ) {
        ServletContext servletContext = event.getServletContext();
        ApplicationConfiguration configuration = new 
HelloWorldConfiguration();
        applicationRunner = new ApplicationRunner( configuration, 
servletContext );
        applicationRunner.start();
    }

    @Override
    public void contextDestroyed( ServletContextEvent event ) {
        applicationRunner.stop();
        applicationRunner = null;
    }
}

此类简化了RWTServletContextListener的初始功能,并删除了一些“对于未在web.xml中声明的侦听器不可接受的方法调用” :-))。 该错误消息非常有趣。

现在,必须将此类声明为Bean,仅此而已:

@Bean
public RWTSCLSimple rwtSCListener() {
    return new RWTSCLSimple();
}

所有Spring Boot功能都可以直接使用,甚至是server.servlet.context-path 。 如果读者不介意小小的解决方法,则该选项看起来比第一个更好。

翻译自: https://www.javacodegeeks.com/2018/11/eclipse-rap-spring-boot.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值