为啥Java Web框架都没有很好的脚手架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥Java Web框架都没有很好的脚手架相关的知识,希望对你有一定的参考价值。

记得Django和Rails教程都介绍了通过实体生成一个简单的CRUD界面,现在用的ASP.NET MVC这块我觉得做得更好,不仅按照实体字段生成了输入框,对jquery validate集成的也不错。最近看spring mvc或者struts2都没有这块内容。当然可能这么说不合适毕竟spring有spring roo,但是我看过一点roo的教程,我觉得似乎侵入性太强了,可能侵入性这个词不合理,我的意思就是在asp.net mvc中,这个脚手架就是整个开发的一个流程,看spring roo的教程似乎有一种从写html代码换成Dreamware画界面那种感觉。这个应该看使用程度就知道了,使用过ASP.NET MVC中的都会去用脚手架,但是Java web开发中很少人用spring roo。如果说这个功能不需要的话为啥几乎所有web框架都提供。
我开始以为是因为Java本身语言特性的问题,但是我发现php大多框架都支持脚手架,就不太明白了。
我本以为现在国内的开发环境也越来越成熟,越来越正规,就算某种语言有过什么弯路,但是如果不是本质性的问题,比如php很大程度上还算一个面向过程的语言。除此之外现在大家基本功能都应该健全了,毕竟php,Java,.net都是存在超过十年的语言了。
是我某些地方想错了吗?是这些东西真的无所谓吗?我记得以前看某个人的评论说“java是十年前的web技术,php是五年前的,python才是现在的技术”,我还是还觉得是个笑话,Java可是一个oop的多范式语言,语言特性上应该比php好,python虽然某些特性上比较好,但是毕竟是动态语言,好吧php也是动态语言,很多地方静态语言+好的IDE不比动态语言差。
参考技术A 书籍吗?应为框架是属于应用级别的所以框架较少,一般都是看官方的文档来学习的。 参考技术B ES—JavaEE快速开发脚手架
bbossgroups
Wabacus

Grails项目整合nacos和feign

Grails简介


 Java 领域中众多现有的 Web框架 都相对比较复杂,并且大多没有很好的遵循 DRY(不重复自己)规则。像 Rails 和 Django 这样的动态框架帮助了我们以更现代化的方式思考 Web应用程序。Grails 构建于这些概念之上,并极大地降低了在 Java 平台上构建web应用程序的复杂性。但是,它的不同之处在于,它构建在 Spring 和 Hibernate 等已有的 Java技术栈之上。


Grails是一个全栈框架,它试图通过一些核心技术及其相关插件来解决 Web 开发中的诸多难题,比如:

  • GORM - 一个易于使用的 ORM 库,支持 SQL、MongoDB、Neo4j 等

  • 用于渲染 HTML 和 JSON 的视图技术

  • 基于 Spring Boot 的控制器

  • 有数百个插件的插件系统

  • 灵活的 profiles 可创建 与AngularJS,React ,vue等应用程序

  •  基于 Gradle 的可交互的命令行环境和构建系统

  • 一个已配置为热加载的内置 Tomcat 容器


Demo所用到的版本对应关系

Grails Groovy JVM Gradle
4.0.3 3.0.2 1.8.0_171 6.2.2

Grails4所支持的SpringBoot相关版本


Spring  Spring Boot Spring Cloud Spring Cloud Alibaba
 5.1.x   2.1.x  Spring Cloud Greenwich 2.1.x
集成nacos实现服务注册与发现demo
dependencyManagement { dependencies { dependency group: 'com.alibaba.cloud',  name: 'spring-cloud-alibaba-dependencies', version: '2.1.1.RELEASE', ext: 'pom' }}//在dependecis{}中添加compile group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-nacos-discovery',version: '2.1.1.RELEASE'
server: port: 8081 servlet: context-path: /${spring.application.name}spring: application: name: nacos-demo cloud: nacos: discovery: enabled: true server-addr: 127.0.0.1:8848 service: ${spring.application.name}---grails: profile: rest-api

在项目启动类添加@EnableDiscoveryClient注解

@CompileStatic@EnableDiscoveryClientclass Application extends GrailsAutoConfiguration { static void main(String[] args) { GrailsApp.run(Application, args) }}

启动测试



Grails项目整合nacos和feign

Grails项目整合nacos和feign

集成Feign实现服务调用


引用配置

dependencyManagement { dependencies { dependency group: 'org.springframework.cloud',  name: 'spring-cloud-dependencies',  version: 'Greenwich.SR4', ext: 'pom' dependency group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-dependencies', version: '2.1.1.RELEASE', ext: 'pom' }}dependencies { compile group: 'com.alibaba.cloud',  name: 'spring-cloud-alibaba-nacos-discovery',  version: '2.1.1.RELEASE' compile group: 'org.springframework.cloud',  name: 'spring-cloud-starter-openfeign',  version: '2.1.5.RELEASE' ...}

编写服务提供类


在上一个demo里面编写,把上一个demo当作服务提供方

class DemoController { static responseFormats = ['json', 'xml']  def index() { render 'index'    }}

在服务消费者Demo中,编写对应的接口信息

@FeignClient(name="nacos-demo", url ="http://localhost:8081/nacos-demo" )interface DemoFegin { @GetMapping("/demo") String index()}

在服务消费者Demo中,编写消费接口



class TestController { static responseFormats = ['json', 'xml']
@Autowired DemoFegin demoFegin
def index() { render demoFegin.index() }
}

在服务消费启动类上添加Feign注解


@CompileStatic@EnableDiscoveryClient@EnableFeignClients(basePackages = ["nacos.fegin"])class Application extends GrailsAutoConfiguration { static void main(String[] args) { GrailsApp.run(Application, args) }}
server: port: 8082 servlet: context-path: /${spring.application.name}spring: application: name: nacos-fegin cloud: nacos: discovery: enabled: true server-addr: 127.0.0.1:8848 service: ${spring.application.name}zuul: url: http://49.233.35.60/:8848    CICDATAMANAGE: nacos-demo

启动测试

Grails项目整合nacos和feign

Grails项目整合nacos和feign

启动测试如下:

下面是跨服务调用:



http://grails.ejlchina.com/guide/#grails-简介https://gitee.com/huajiangliangliang/grails-demo

以上是关于为啥Java Web框架都没有很好的脚手架的主要内容,如果未能解决你的问题,请参考以下文章

手写Maven的archetype项目脚手架

手写Maven的archetype项目脚手架

为啥脚手架没有按预期工作?

为啥我的应用程序不使用脚手架的身份页面?

iKcamp新书上市《Koa与Node.js开发实战》

iKcamp新书上市《Koa与Node.js开发实战》