现代网络开发

在过去的几年中,网络技术经历了快速增长和重大变化。 我们从框架到表格布局,再到列布局,再到响应式布局。 从html4到xhtml和Flash到html5。 从重型服务器到富客户端。 从rpc到肥皂休息。 从sql到nosql和大数据。 从MVC到MVP等。 在以下文章中,我想从我的角度描述什么已成为最新技术。

后端是REST API

每个后端应被视为REST api,每个控制器应被视为另一资源。 您想分析问题领域,找到您的资源并为其设计适当的路径。 它们成为您的MVC架构中的M。 首先开发一个Web应用程序,然后再添加一个额外的REST api被认为是一种反模式。 如果您确实制作了REST api,那么您希望自己使用它,从而使前端成为第一个使用者。 此过程使您以后可以平滑地添加不同种类的客户端,例如移动应用程序或什至是桌面应用程序。 这也是将您的应用程序功能集成到其他应用程序中的基础。

分离您的前端

使用带有jstl表单验证的jsp构成表单的时代正在逐渐消失。 您不想再将客户端与服务器技术混合使用。 MVC的V和C已转移到客户端,您的后端仅代表模型。 您希望仅使用客户端技术(html / css / js)并使用REST api将前端完全分开。 GUI逻辑,构建和对齐适当的html元素可以在javascript中实现。 在后端和前端之间进行信息交换的最合适的内容类型是json或xml。

富客户端和冰雹JavaScript

如今,MVC模式是在客户端使用javascript及其同类框架实现的。 没有现成的功能完备的完整javascript框架,但是有很多较小的库可以解决原子任务。 这不应被认为是坏的或压倒性的,而是有利的。 它导致了各种各样的工具,这些工具专注于彻底解决单个问题。 Backbone是基于underscore构建的流行的mvc框架,这是一个js库,具有强大的实用程序和出色的功能编程功能。 可以添加诸如胡子或把手之类的模板引擎, requirejs将管理模块内的依赖项。 当然,不能遗漏像jQuery这样的dom操纵器。 这种趋势正导致SPA (单页应用程序)使用大量的AJAJ / AJAX ,并通过表示可添加书签的视图状态的html #anchors进行路由。

为您的前端实施构建过程

随着浏览器不断提高javascript性能并为html5添加越来越多的支持,前端变得越来越复杂。 现在,您要为前端添加一个构建过程,以编译所有js和css文件。 您只想将一个缩小的js文件传送到浏览器。 除此之外,我们不再破坏DRY原理的写作风格。 我们使用更少的动态样式表语言来使样式更智能,更简洁,并在构建过程中将其编译为CSS。 Node和rhino可能是构建前端的引擎候选者。 尽管节点要快得多,但它需要在构建服务器上轻松安装。 Rhino在jvm中运行,因此不需要安装。 您可以将其作为Maven依赖项添加到项目中。

移动网络与响应设计

在硬件方面,移动设备变得越来越强大,而对HTML5的支持也在移动浏览器中Swift增加。 HTML5可能有一天使本地移动应用程序过时。 本地存储,SQL,地理位置,多媒体,摄像头访问,Web套接字,图形,触摸事件,WebGL,文件系统访问,通知等等,所有这些功能有一天将完全可用于移动html5 Web应用程序,希望能在所有设备上正常工作。 到目前为止,我们一直在为android / ios / windows mobile等开发多个应用程序,这是一场经济噩梦。
移动客户端已经在Web消费中获得了可观的收益,因此不再被忽视。 因此,您希望使GUI 响应 ,从而能够缩小到较小的显示分辨率。 明智的公司甚至在考虑台式机分辨率之前就已经开始设计最小分辨率的用户界面。 这使扩展更加容易,因为反之则更困难,并且往往会导致痛苦的解决方法。 Bootstrap是许多可帮助您使GUI响应的库之一。 您可以使用initializr入门。

都不使用!

GWT / ZK正在尝试提供一个框架,该框架使仅使用Java开发现代的ajax Web应用程序成为可能。 因此,他们基本上是在为前端技术构建Java包装器。 除此之外,它们还提供了大量的组件。 但是……出于多种原因,我想质疑他们的哲学。

  • 它们都产生非常糟糕的html代码,使您陷入元素和dom-id噩梦的境地,这些噩梦变得很难甚至无法测试,调试和样式化。 HTML5允许编写简短,干净且可读的代码,更好地组织起来。 您想自己编写html。
  • 他们的AJAX调用不基于您需要的REST api。 如果要使用REST API,则可能必须再次编写。 RPC是GWT的主要通信技术,我对此确实感到担心。 但是,如果愿意,您仍然可以使REST api与GWT一起使用。
  • 它们使您远离实际生产的技术。 最终,微小的自定义设置可能变得很难甚至不可能。 您基本上是在放弃控制并限制您的可能性。 在许多情况下,这可能会导致死胡同,而死胡同是基于框架而不是技术。 GWT提供了JSNI,可帮助克服此问题。
  • 他们永远不会更新。 随着浏览器的发展日新月异,必须在Java包装程序中实现新功能,然后才能使用它们,这会延迟您的更新时间。
  • 我怀疑包装本机前端技术是否是个好主意,而且我看不出这样做的理由。 一个专业的GWT争论可能是:它正在生成优化的JS代码。

最后,它们使为以前的java.awt / swing开发人员构建Web应用程序变得更加容易,他们几乎不了解html / css / js。
他们现在肯定有自己的位置,并且在某些情况下不是一个坏选择。

参考: “ 成为更好的开发者”博客上的JCG合作伙伴 Gregor Riegler提供的现代Web开发 。

翻译自: https://www.javacodegeeks.com/2013/07/modern-web-development.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php脚本来创建一个表,PHP - SQL脚本创建器

我需要的:一个高效的SQL脚本生成器来替换下面的。的背景。一个非常简单的程序,但我需要一个更有效的方式来生成它,我有这个代码的原因是我需要其他开发人员能够在我的平台和数据库表上创建“模块”,但我阻止他们拥有完全访问权限到…

openLayers 4 canvas图例绘制,canvas循环添加图片,解决图片闪烁问题

一、问题来源: 接触Openlayers 一段时间了,最近做了一个农业产业系统,项目中涉及到产业图例,最后考虑用canvas来绘制图例图像。当中带图片的图例移动时,图片会实现闪烁留白情况。闪烁是因为绘制图片本身的复杂性&#…

Akka应用模式:分布式应用程序设计实践指南pdf

下载地址:网盘下载 对于想要学习Akka的Java 和 Scala 开发者们,有很多技术资源可供参考,但是如要想知道如何去应用这些技术就需要不同的思维方式了。为了帮助你正确地使用Akka,《Akka应用模式:分布式应用程序设计实践指…

使用番石榴的5个理由

Guava是一个开放源代码库,其中包含许多Java类,由Google编写。 它是杂项实用程序函数和类的潜在有用来源,我敢肯定,许多开发人员以前已经写过自己,或者只是想要并且从来没有时间编写它们。 这是使用它的5个充分理由&…

哈密尔顿算法matlab,复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc

摘要:当今的工业制造过程越来越复杂,产品生产批量化,单个产品组成零部件数量庞大,加工需要多道工序,且工序间连续性强,整个制造过程属于离散制造,这样必然会使生产制造过程复杂化。在这种情况下…

Python 编程核心知识体系(REF)

Python 编程核心知识体系: https://woaielf.github.io/2017/06/13/python3-all/ https://woaielf.github.io/page2/ 转载于:https://www.cnblogs.com/hopesun/p/8340514.html

为input输入框添加圆角并去除阴影

<input type"text" name"bianhao" value"" placeholder"请输入商品编号" maxlength"10" size"10" style"width:105px; margin:0px 0px 0px 12px;height:22px;border-radius:4px;border:1px solid #DBDBD…

flask基础之jinja2模板-语法定义

懂得MVC的人都知道&#xff0c;模型、视图、控制&#xff0c;下面要要介绍的jinja就是视图层的一个渲染模板&#xff0c;类似于jsp&#xff0c;下面来学习 一、jinja2基本语法 jinja2模板可以保存在任何基于文本的文件中&#xff0c;比如XML、HTML、CSV等&#xff0c;所以模板文…

Java DB嵌入式模式

Java DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项&#xff1a; Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌入式模式下&…

php 多线程处理redis,redis的多线程

目录先说明下redis也是多线程的.但是redis的主线程处理业务.而其他三个线程跟主要功能是关系不到的redis的三个线程主要是做什么初始化入口void initServer(void) {...bioInit();...}初始化后redis其他后台线程.void bioInit(void) {pthread_attr_t attr;pthread_t thread;size…

linux内核删不掉,linux 删除内核文件,未能启动,修复方法 CDROM与网络法

当缺少 /boot 内核文件vmlinuz-2….initramfs-2…此时只能借助 光盘 CDROM 来引导生成进入 RESCUE 模式1 chroot /mnt/sysimagemount /dev/cdrom /mnt/cdromcd /mnt/cdromcd isolinux cp vmlinuz /boot/按照…

阿卡vs风暴

我最近在Twitter的Storm上工作了一段时间&#xff0c;这让我想知道&#xff0c;它与另一个高性能的并发数据处理框架Akka相比如何 。 什么是Akka和Storm&#xff1f; 让我们从两个系统的简短描述开始。 Storm是一个分布式实时计算系统。 在Storm集群上&#xff0c;您执行拓扑 …

清除浮动方法解析

清除浮动方法解析 清除浮动带来的额外影响 如果对于浮动不熟悉的同学&#xff0c;可以看看介绍float的文章。传送门&#xff1a;CSS float 我们知道&#xff0c;在一个父元素内如果遇到某个浮动元素&#xff0c;此时父元素的高度会发生塌陷。针对父元素高度塌陷的问题&#xff…

进程间的通信----管道

前提&#xff1a;本文是基于Linux系统下的学习 用户态的进程是如何组织的呢&#xff1f;所有的用户态进构成了一棵树。进程树。 进程树的树根是init.也就是1号进程。是用户态进程的祖宗进程。如何查看进程树&#xff1f;pstree 进程之间的关系 父子进程和兄弟进程查看进程的信息…

web项目启动时,自动执行代码的几种方式

在项目开发过程中&#xff0c;往往需要一些功能随着项目启动而优先启动&#xff0c;下面我总结几种方式&#xff08;非spring boot&#xff09; spring boot的参考 spring boot 学习之路9 (项目启动后就执行特定方法) 方式一&#xff1a; ServletContextListener监听器&#…

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分&#xff0c;在其中我将提供有关需要应用该模式的情况&#xff0c;它所具有的利弊以及用法示例的信息。 有时&#xff0c;当对象的内部状态更改时&#…

Linux内核锁实现原理,linux 大内核锁原理

大内核锁(BKL)的设计是在kernel hacker们对多处理器的同步还没有十足把握时&#xff0c;引入的大粒度锁。他的设计思想是&#xff0c;一旦某个内核路径获取了这把锁&#xff0c;那么其他所有的内核路径都不能再获取到这把锁。自旋锁加锁的对象一般是一个全局变量&#xff0c;大…

Sass学习日志

一、什么是SASS SASS是一中CSS的开发工具&#xff0c;提供了许多便利的写法&#xff0c;大大节约了设计者们的时间&#xff0c;使得CSS的开发&#xff0c;变得简单和可维护。本文总结了SASS的主要方法。我们的目标是&#xff0c;有了这篇文章&#xff0c;日常的一般使用就不需…

ptyhon中文本挖掘精简版

import xlrd import jieba import sys import importlib import os #python内置的包&#xff0c;用于进行文件目录操作&#xff0c;我们将会用到os.listdir函数 import pickle #导入cPickle包并且取一个别名pickle #持久化类 import random import numpy as np …

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9)&#xff1a;UI指南 原文:[UWP]了解模板化控件(9)&#xff1a;UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性&#xff0c;用于在新建ControlTemplate时使用这些约定的属性。 譬如&#xff0c;修改HeaderedContentControl的Co…