阶段性的对Web开发的一个总结

这是我年初写的一篇文章,当时用webwork+Spring+Hibernate开发一个web应用,一种很流行的J2EE开发模式,在开发了两周后,对Web开发的一个总结,我觉得对新手还是有一定帮助的。很模糊的记得在Javaeye有人写过类似的文章,在此表示感谢了。

发布到这儿,因为觉得Javaeye的blog比其它的好用,以后就在这儿安家啦。

作为一个表示层框架,无论是Struts、Webwork,还是SpringMVC、JSF,它们都是解决同一类问题。

表示层框架,从分层的角度考虑,它的核心是作为一个Front Controller,在Struts里面是ActionSerlvet+RequestProcessor+Action,前两个是框架本身的,只有 Action需要我们处理。它的职责也就是协调用户的输入,将请求dispatch给后端business,由后端business系统处理后,将相应的结果返回给Controller,再由Controller处理返回给用户。

对于开发来说,特别需要注意的是职责分配的问题,这是我们开发过程中最容易犯的毛病,也是最需要注意的地方。Front Controller只是一个Controller,也就是Call别的接口,自己本身不应该有处理业务的职责,它应该尽量的thin。如果不遵守这个原则呢?那带来的将是系统难以测试,难以重用,难以维护。

具体来说,我们的业务系统是可以重用的,可以提供Service接口给Web层调用,也可以提供给其它系统通过Web Services接口调用,还可以给分布式client调用。它们的调用方式,一般有三种:

最普通的调用。在web系统中,就是表示层Controller直接调用服务层。

依赖注入式调用(Dependency Injection)。它需要IoC容器支持,如Spring,picoContainer,它对解耦和测试非常有用

依赖查找式调用(Dependency Lookup)。也就是EJB里面的JNDI,它最大的好处是支持分布式开发和组件开发。

我们一定要牢牢记住表示层的职责。表示层框架很容易变,但系统业务还是相对固定,如果你接触过物流系统,你就会明白什么叫业务了,那时候在表示层里处理业务会非常可怕,因为我的业务要同时支持几种客户端:桌面client、Brower、移动client,难道你需要在每种client里面写业务吗?而且,表示层框架的开发人员可以不需要懂太多的业务就可以利用自己的技术优势,来调用业务相关接口。

下面我再具体谈谈表示层需要处理的几个部分:

[b]整体说明[/b]

举个例子,我现在想对updateUser.do?userId=19做出请求,然后在一个UpdateUserAction里处理用户预更新,然后将结果导向到updateUser.jsp页面。这大概是我们所希望的最简单的处理方式吧。

上面那三个元素的相互关系在web框架的配置文件里面定义。现在的framework都倾向于config和metadata oriented,因为这样的框架会比较灵活、好维护,试试直接用JSP和Serlvet开发你就知道要做多少重复工作和hard code了。

在webwork里面,是xwork..xml,在Struts里面,是struts-config.xml,在JSF里面,是faces- config.xml。所以说,框架都是相通的。我这里需要特别指出的是,上面那些文件和文件名都是默认的,实际上,为了支持组件开发和团队协作开发,保持开发模块之间的松耦合,我们应该将配置文件分解成一个个的segment。

对于action,也就是前面提到的Front Controller。 在Struts里面,是通过继承基类的Action,在webwork,是通过实现Action接口。

在Struts里面,通过继承方式来实现Action,那么我们代码是和框架紧密耦合的。而且,只支持JSP,不支持模板语言,如Velocity、 FreeMaker,而这些可以脱离Servlet容器,最大的好处是,我们的网页设计人员可以专心做html界面。分工就意味着效率和质量。但 Struts这种框架就支持不够。

而webwork就很好地做到了这种解耦,action和前端表示完全分离,如表示页面还可以直接发布成pdf文档。

那么,继承基类和实现接口,对于我们开发人员意味着什么呢?灵活性、容易测试,这让我开发更容易一些。

Scenario 1 我们一些简单的CRUD操作,完全可以在一个action里面处理。虽然Struts也可以这样,因为它有一个DispatchAction,但你会发现,项目中,我们经常引入一个BaseAction,而这个BaseAction是继承DispatchAction还是Action,往往很难决择,因为我们这两种需要都有,虽然DispathAction也是继承Action。而webwork的处理就方便多了,你需要验证、国际化、安全等等很多操作,你都可以通过实现一个接口实现。

Scenario 2 我们测试Action的时候,总是要启动容器,启动一般要花将近半分钟,这会让我们很多时间都花在等待之中,由于Action和容器脱离,我们的测试会更迅速和直接。

我现在就按照整个页面流程来分类说明,在一个web框架下开发,或是开发web应用,或者开发Web Framework必须考虑到的各个方面:

[b]1. 表单提取[/b]

我们开发web MIS系统,从技术角度考虑,第一步就是在页面输入数据,然后将它们保存到后端数据库。

框架应该自动提取表单数据,将这些String类型的数据转换成对应的数据类型,并封装为值对象(Value Object),提供给Controller,作为Controller的输入。

Struts是通过ActionForm,非常笨拙,而且对类型转换都支持不够。Webwork在这方面做得优雅多了,它将请求参数封装为一个Map对象。其实,请求本来就是key-value对。然后当数据传入到action后,就和Serlvet容器,web脱离了关系,这带来的解耦的好处就是还可以支持多种客户端,支持容器外测试。

具体实现上,Struts通过BeanUtil工具对ActionForm进行反射;webwork是通过一个拦截器Parameters Interceptor来获取,而action实现该接口,然后在配置文件里申明一下就ok了。

[b]2. 表单验证[/b]

我们输入数据,一般需要符合一定的规范,如必须输入数字,不能为空,必须为邮政编码等等。

解决这个问题,如果不用framework,我们需要在jsp页面上用javascript验证,还要在servlet里面获取参数,然后验证,对于不合理的数据,需要将之保存,并附上错误说明,然后forword到原来jsp页面显示处理,非常烦琐和机械。

Struts框架原来处理还是挺机械的,主要在ActionForm的validate方法里验证,后来加入一个Validation框架,也就是一个plug-in,非常好用。Webwork也沿用了这一点,两者在验证上都不错。

但我们必须注意的一个问题,那就是验证不通过时,怎么保持原来的数据,特别是下拉框里面的数据,Struts处理很麻烦(难道我没用好?), webwork好用多了,不过有个tips,那就是将select的下拉列表保存在session里,不用每次验证不通过都重新从数据库加载。

另外还有一点,那就是和表单重复提交结合时会出现的问题,struts中,处理不当,就会出现在你验证不通过,修改后再次提交时总是被提示重复提交。 Webwork是通过一个Interceptor截获,处理很自然。不过我建议时提交通过后,用redirect,这样就不存在重复提交的缺陷。你总不希望因为网络慢,你的订单由于刷新而提交两遍,收到两份相通的货物吧。

[b]3. 国际化和resource文件[/b]

Web界面是给用户看的。譬如,我们公司内网打算采用一套很知名的blog系统,但它是德国人开发的,但是你总不会希望看到界面是德文吧。这套blog开发商为了全球推广,也不至于为每种语言都开发一套吧,那不累死,维护简直就是恶梦。

我之所以现在要提到国际化,不光是国际化的问题,因为在表单验证时,如果field不通过,都会提示用户,但这些提示语一般都会重用,如create和 update用户时“用户名不能为空!”,我们可以在resource文件里定义一个key: error.user.username.required,然后在各处引用。

Webwork和Struts对这个都处理比较好,这也是一个表示层框架必须处理的。我建议不要在Action-validation.xml文件里hard code这些信息,而是将它们分离出来。

[b]4. 请求路由[/b]

当我们将user成功提交后,我们让它由谁来处理呢?这就是请求路由的问题。

这种关系在配置文件里面定义,我上文都提到过。为了方便,往往将多个请求提交到一个action的不同方法,这是我们应该好好利用的。而它们在 webwork里面都可以很好配置。例如,将saveCreatedUser 路由到UserAction的saveCreatedUser方法里。

[b]5. 请求处理[/b]

当请求发生,并且路由到正确的action后,我们的action就要处理它了,包括初始化,处理,清场。

关于Action需要注意的问题,我现在还要重申的是:一定要注意它的职责:不要处理它不应该处理的事情。

例如,注册用户时,用户姓名可以重复,但用户登录账号却不能重复。论坛发帖子就没有这样要求。再例如,会员系统中,用户积分达到100就是可以下载,但什么时候规则变了,需要积分150才能。这些规则在哪儿处理呢?最简单当然是在Action里:没有满足条件,就forward到输入页面。当规则很多时,你就很难维护了。反问一下,它是web层关心的问题吗?

在任何框架设计,包括web框架设计时,一般都有一个非常核心的模式,那就是template模式,它和一种称为callback的调用方式相关,也就是那个著名的好莱坞原则:don’t call me, I’ll call you! 具体到我们的web框架,也就是action,如webwork里面的ActionSupport,它们都是这种处理方式,我们不知道我们的Action 是被谁调用的(当然是框架了),但我们这样写,然后在xml一配置,就work well。

我们可以研究一下Struts的ActionSerlvet,特别是ReqeustProcessor,后者就是一个典型的template模式, action是作为里面一个command运行的。Command模式也是用callback调用。关于这两种模式,google一下就清楚了。

Spring就是使用Template和callback模式,对底层实现做了统一封装,其中template负责那些通用的功能,如事务、资源管理、异常处理,callback则完成变化的那部分,如处理具体的数据库statement操作。我们最常用的HibernateCallback和 HibernateDaoSupport就体现了这一点,具体可参照其源码。

另外,对于Action,一定要注意线程安全的问题。Struts的action是非线程安全的,大家可以参考一个RequestProcessor中定义的Map类型的actions字段,而Webwork是线程安全的,因为其ActionContext是 ThreadLocal的,也就是说每个线程都有自己的变量,互不干扰。具体体现是Struts的Action里面不能有字段申明,只能有局部变量。而 Webwork可以,这对于获取页面表单数据非常方便。

[b]6. 请求应答[/b]

在Action执行完毕后,我们应该为其导航到结果页面,

在webwork里面,也就是Result Type。它定义了好几种方式。比较有意思的是它处理象freemaker(html模板),XML/XSLT,PDF这些格式输出。而Struts基本上是很单一JSP。

而且webwork还可以自定义Result类型,可以为我们提供Swing、mobile客户端显示。

[b]7. 异常处理[/b]

任何操作都有出错的可能,怎么优雅地处理错误,这也是每个框架都应该考虑的。

有一些异常处理最佳实践,《Effective Java》就专门有一章谈到。在OnJava上也有一篇文章:http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html,非常值得一读。

1.选择Checked还是Unchecked

2.Exception的封装

3.如无必要不要创建自己得Exception

4.不要用Exception来作流程控制

5.不要轻易的忽略捕获的Exception

6.不要简单地捕获顶层的Exception

Struts和Webwork里面都支持异常处理,webwork是通过Interceptor支持的:ExceptionMappingInterceptor。

在我的项目实践中,我喜欢将业务异常封装在业务层,申明为checked Exception,web的Action必须捕获,获取exception的ErrorCode,此ErrorCode就是resource文件里面的 key,也就是说它支持多语言,如ErrorCode.USER_EXISTED=”error.user.userExisted”。这类信息应该是业务层抛出的。如果将它由action处理,这是一种设计上的错误。

[b]8. 灵活性、扩展性、可插入性[/b]

作为框架,就应该保证其灵活,支持不同用户的业务需求;容易扩展其功能,插入系统级的功能。

就Struts而言,在可插入性上还是不错的,这得益于它的plug-in支持,实现其PlugIn接口,然后在其struts-config.xml文件中配置一下,如它的验证框架、网页布局Tiles,内存数据库,都是其典型应用。

另外,以前的Struts还可以扩展它的RequestProcessor,实现一些特有的功能,如日志、安全,因为它预留了一个缺省方法processPreprocess()。

Webwork也是高度可扩展的,它主要是通过实现Interceptor接口。

[b]9. 模块、组件化[/b]

在大型web项目中,模块、组件这些概念就非常适用了,因为一个大的工程,可能由不同公司开发,或是不同项目组、不同成员协作开发,最后要很容易地集成在一起。另外,还有第三方公司开发的组件插入进来,如漂亮的web界面组件,如Tree、table等。

Tapestry就是一种基于组件的开发框架,不过我没有研究,呵呵。

但webwork确实可以支持,如xwork.xml 配置的package就是支持模块申明,其附带的FreeMaker就可以将开发好的模块打包成jar文件,在Servlet容器外加载。

JSF对组件支持是相当到位的。它所设计的目标,就是在IDE里面,直接拖拽web组件,象table,tree,就可以形成漂亮的界面,真正实现所见即所得。实现自己的组件,只要实现其UIComponent接口就行了。应该说JSF是一种非常有前途的Web层框架,它会把Web开发真正达到easy。因为直到现在,还没有一种框架能够很容易做到,它的界面开发始终没法和微软相提并论,虽然它有界面布局框架Tiles和SiteMesh,以及模板语言 Velocity、FreeMaker、Servlet2.4支持的EL。

不过遗憾的是,JSF开发工具还没有达到那么完善,除了Sun自己一直、推广的NetBeans IDE。Sun的官方有其demo,用flash演示,还是蛮cool的。

[b]
关于Ajax和请求模式[/b]

Ajax其实早在五年前就有了,只是没有被人注意罢了,直到2005年google把它应用在google map和gmail上,才开始被人关注。它也是web2.0时代一种重要的技术,ajax强调用户体验(XP)。因为它的本质就是一个异步调用。而我们的一般web页面请求都是同步的,你必须等到服务器全部处理完成。同步变异步,确实是一种革命,虽然它的技术很简单,只是一个XMLHttpRequest 的javascript对象。它让我们的Web版的Rich Client成为可能。Google现在正看到了web office的应用前景,对MS构成巨大威胁,大家可以试试它的Web版的excel和、日历、邮件,不久就会推出正式的web word,很cool。

另外,Ajax更接近实际的web请求,因为一般web请求时,每一次,我们获得的是整个页面内容,无论这个页面有多少数据是冗余的。譬如,我们分页浏览时,整个页面布局是由header,left navigator、footer组成,中间是content,翻页时,应该从服务器返回一个xml的用户列表数据格式,而且不包括html table的tag,这正是ajax另外一个方面:返回的是数据,而不是整个页面。这对于窄带宽,也是非常有益的。

Webwork的2.2.2版本支持ajax,底层是dojo和DWR这两个著名的ajax框架。但是webwork的ajax Tag做得太粗糙,用了ajax后,页面布局,特别是表单位置没法控制,而且对IE浏览器支持不够。我现在几乎都放弃了。

没有好的ajax框架,使得ajax开发起来很困难,也许因为它还不到一周岁吧。

我们现在的web框架,一般都是基于请求的模式,也就是说我们请求时总是会考虑它的目的URL,将提交数据保存在该请求中。这种模式,让我们开发时总在考虑这些所谓的http协议。一种完善的框架,应该尽量去屏蔽这些与底层协议相关的东西。

JSF给我们一种全新的方式,它让我们按照操作桌面应用,如Swing程序的方式处理网络请求,因为它是基于事件的。在Sun的petstore的WAF 框架中就有这种原始的思想。基于事件,让我们开发rich client提供了一种思想,但是,感觉和MS的asp.net相比,还是差很远。

事件驱动有一种核心的模式,那就是Observer模式,所谓的Observer就是listener(只是一个用眼睛,一个用耳朵,呵呵)。 Oberver是一种推(push)模式,也就是说事件Event发生时(如model发生改变),它会通知你,而不是你去取(拉模式)。

在Servlet规范中,也引入了listener的概念,如HttpSessionListener,它对于监视用户上线下线非常有帮助,它们是生命周期lifecycle的范畴。
数字电路与逻辑设计实验二 组合逻辑电路 1.组合逻辑电路功能测试 (1)用 2 片 74LS00 组成图 2.1 所示逻辑电路。为便于接线和检查,在图中要注明 芯片编号及各引脚对应的编号。 (2)图中 A、B、C 接逻辑开关,Y1,Y2 接发光管电平显示。 (3)按表 2.3 要求,改变 A、B、C 输入的状态,填表并写出 Y1,Y2 的逻辑表达式。 (4)将运算结果与实验结果进行比较。 2.测试用异或门(74LS86)和与非门组成的半加器的逻辑功能。 根据半加器的逻辑表达式可知,半加 器 Y 是 A、B 的异或,而进位 Z 是 A 阅读详情

相关推荐

autoware 激光-相机联合标定

autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记。在此,特别感谢佳明师弟,在录制数据集时提供的帮助。 ~~~ 0.系统配置: Ubuntu18.04系统 ROS Melodic opencv 3.2.0 vlp-16 一.安装autoware 这部分网上教程挺多的,但我在编译的过程中仍存在不少bug,唉~_~。 二.安装calibration_camera_lidar,从a...

nuo112的博客 1万+

WEB开发技术 知识点总结

WEB开发技术 知识点总结第一章:(填空判断)1、什么是WWWWWW是World Wide Web的缩写,中文译名“万维网”。Web是Internet提供的一种服务,是基于Internet、采用Internet协议的一种体系结构。2、Web三要素:统一资源定位(URL):解决网上资源在何处的问题。资源访问方式(HTTP):解决用什么方法访问资源的问题。超链接:提供在资源之间自由访问的手段。3、什么...

27Up的博客 1万+

别再让地图加载慢吞吞!GeoServer + GeoWebCache 缓存配置实战(附性能对比)

本文详细介绍了如何通过GeoServer和GeoWebCache优化地图服务性能,实现地图加载速度的显著提升。从缓存机制解析到实战配置流程,再到高级性能调优技巧,帮助开发者构建高效地图缓存系统,解决地图加载慢的问题。

weixin_42525369的博客 407

ajax 在webwork下 动态无刷新更新列表

根据> 示例改编,以适应webwork.总共两个jsp,一个执行请求,另一个作为返回的模型dynamiclists.jsp    pageEncoding="gbk"%>http://java.sun.com/jsp/jstl/core" %>动态下拉列表  var xmlHR; function createXMLHttpRequest()//创建xmlHttpReque

xiaogeasd的专栏 1029

YOLOv12改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

本文针对现有基于IoU的损失函数在目标检测任务中存在的问题,提出了利用Powerful-IoU(PIoU)及其升级版PIoU v2改进YOLOv12的损失函数,以提高模型精度。文章详细介绍了PIoU和PIoU v2的结构原理,并提供了在YOLOv12中实现这些损失函数的具体步骤和代码修改方法。

Limiiiing的博客 931

STM32入门教程:WiFi通信

第四步:初始化串口 在生成的代码中,您可以找到一个名为 "USARTx_Init" 的函数,其中 "x" 是您选择的串口号。然后,我们使用 "AT+CIPSEND" 命令发送UDP数据,接收到服务器的回复,并在终端上显示收到的数据。在配置向导中,您可以选择启用USART串口功能,并根据您的硬件连接,将串口设置为与WiFi模块连接的串口。在上述代码中,我们使用了 "HAL_UART_Receive" 函数来接收串口数据,并使用 printf 来在终端上显示收到的数据。如果有任何问题,请随时向我提问。

2401_85258012的博客 1075

Java web 表示层技术

Java web 表示层技术 第一章:java web 工作原理 1.1解析http协议 HTTP是一种超文本传送协议。HTTP是一种无状态的协议,意思是指在web浏览器和web服务器之间不需要建立持久的连接。HTTP遵循请求/响应模型。 HTTP定义的事务处理由以下四步组成: 1.客户端和web服务器建立连接; 2.客户端发送http请求; 3.服务器端接收客户端的http请求

Clarissatt的博客 2757

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 118

web前端开发阶段性知识点

“技术的优劣不仅限于技术本身,跟大企业支持度、现有市场份额等均有很大关系,而人为因素有时也会起到决定作用。”

Xiaoming's Blog 942

【二】MADDPG多智能体算法实现(parl)【追逐游戏复现】

论文全称:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 论文原文:https://download.youkuaiyun.com/download/sinat_39620217/16203960 论文翻译:https://blog.youkuaiyun.com/qiusuoxiaozi/article/details/79066612 ...

丨汀、的博客 2万+

如何使用 Python 爬虫爬取滴滴打车信息:获取司机和乘客数据

滴滴打车作为中国最大的打车平台之一,提供了丰富的司机和乘客数据,包括司机的车辆信息、乘客的评价、行程数据等。公开的司机和车辆信息(如司机的名字、车辆类型、评价等)可以通过网页直接获取,而乘客的个人信息和具体行程数据通常会受到隐私保护。在滴滴打车的网页中,司机的信息可能以特定的 HTML 标签存在,例如包含司机名称、车辆类型、车辆等级等信息。我们需要分析网页的 HTML 结构,找到这些数据所在的标签。同时,对于涉及到隐私的用户数据(如乘客的行程信息、用户评价等),我们必须特别谨慎,避免侵犯他人的隐私。

2201_76125261的博客 1918

Web前端最新Vue 电商后台管理项目阶段性总结,开发web前端学习

技术栈比较搭,基本用过的东西都是一模一样的。快手终面喜欢问智力题,校招也是终面问智力题,大家要准备一下一些经典智力题。如果排列组合、概率论这些基础忘了,建议回去补一下。该项目偏向前端更多一点,后端 API 服务是已经搭建好了的,我们只需要用既可以,(但是作为一个 全栈开发人员,它的数据库的表设计,Restful API 的设计是我们要着重学习的!!!

2401_84418883的博客 1040

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 880

web前端开发面试问题有哪些,Vue 电商后台管理项目阶段性总结(1),网页web前端开发培训

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。一个人可以走的很快,但一群人才能走的更远。

2401_83621784的博客 567

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2024年Web前端最新Vue 电商后台管理项目阶段性总结(1),2024年最新web前端开发如何提高页面性能优化

该项目偏向前端更多一点,后端 API 服务是已经搭建好了的,我们只需要用既可以,(但是作为一个 全栈开发人员,它的数据库的表设计,Restful API 的设计是我们要着重学习的!!!这个vue 项目是从 2020 4月开始,一直开发直至 5月23日 部署上线,也算是我的第二个 vue 的实战项目(其实是熟悉 elementUI 的使用),在开发过程中使用 Vue cil4 脚手架进行开发,使用码云作为 Git 管理仓库, 目前已经基本开发完毕,在服务器上也能够正常运行 (nginx 配置整整用了我两天)

2401_84619145的博客 846

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

2024年最全吐血整理,Web自动化测试-项目阶段性总结,一篇策底打通(4),2024年最新软件测试开发必须要会

8)性能优化在这一阶段,需要根据测试结果和性能瓶颈,进行性能优化和问题排查。性能优化可以从多个方面入手,例如优化数据库查询、优化网络传输、优化代码逻辑等。9)测试报告在这一阶段,需要生成测试报告,反馈测试结果和缺陷情况。测试报告应该具有良好的可读性和可扩展性,可以帮助项目组和业务部门了解测试情况和测试结果。10)持续集成在这一阶段,需要将自动化测试集成到持续集成系统中,实现自动化测试的持续化和自动化部署。持续集成系统应该具有良好的可定制性和可扩展性,可以根据项目需求进行定制和扩展。

2401_84140754的博客 794

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

web全栈开发学习-01html基础

最近在付费网站学习web全栈开发,记录一下阶段性学习。今天刚好学完html基础,跟着教程画了个基础的网站。

yannsann的博客 568

18、监测数据采集物联网应用开发步骤(12.3)

前端web UI开发 demo。

yong427的专栏 931

16、监测数据采集物联网应用开发步骤(12.1)

web数据接口服务利用SOCKET TCP服务方式解析http协议内容模式。本章节进行前端web UI开发+web数据接口服务开发。新建web数据接口服务Handler类。新建web数据接口返回格式类。新建web数据接口业务查询类。

yong427的专栏 1088

Python全栈开发学习进阶指南:从零基础到项目实战

Python全栈开发学习进阶指南摘要 本文系统介绍了Python从零基础到项目实战的完整学习路径,共分为8个阶段: 环境搭建与基础语法(1-2周):Python安装、IDE配置、变量与数据类型等基础内容 核心语法与数据结构(2-3周):流程控制、列表/字典等容器操作、基础算法 函数与模块(2-3周):函数定义、参数传递、模块化开发和异常处理 面向对象编程(2-3周):类与对象、封装/继承/多态三大特性 文件与数据处理(2-3周):文件读写、JSON/CSV格式处理 领域库与框架(3-4周):Web开发(Fl

漫画之迷学编程 849

【保姆级教程】小白也能懂!Dify大模型应用开发平台本地部署教程

Dify是一款开源的大语言模型应用开发平台,支持快速构建生产级AI应用。本文详细介绍了Dify的本地化部署流程,包括Docker安装、镜像配置、Web端部署及常见问题解决方法。内容涵盖80端口占用处理、自定义配置调整等关键步骤,并提供了完整的学习路径建议。文章还分享了AI大模型学习资源,包含提示词工程、RAG系统开发等核心内容,帮助开发者从入门到精通。最后提供了免费学习资料获取方式,助力读者掌握大模型开发技能。

m0_65555479的博客 2144

基于Web的低代码系统的研究与实现中期检查

该中期报告总结了基于Web的低代码系统的开发进展。系统已完成核心功能模块开发,包括用户端的注册登录、数据操作、消息通知等功能,以及管理员端的用户管理、系统设置、权限控制等功能。报告指出了开发中遇到的技术问题及解决方案,如密码加密、数据一致性等。后续计划包括系统优化、界面改进、安全增强及全面测试,最后完成论文撰写。全文展现了系统开发的阶段性成果和未来规划。

m0_73268882的博客 243

「码」出未来之路:探索测试开发工程师的成长逆袭攻略

在数字化浪潮席卷全球的今天,测试开发工程师作为产品质量的守护者与技术创新的推动者,其职业发展路径如同代码世界中的“通关秘籍”,充满挑战与机遇。他们不仅是问题的发现者,更是解决方案的构建者,这条成长之路,犹如编程语言般严谨而富有创新。以上每个阶段的学习都需要不断实践和反思,理论与实践相结合,以期在职业生涯中步步攀升,成长为一名具有深厚技术底蕴和广阔视野的测试开发专家。

lzq599220的博客 2328

HTML5入门与蓝桥杯Web开发备赛指南

HTML5作为现代Web开发的基石,通过语义化标签和多媒体支持构建网页结构。其核心原理是通过标签定义内容层次,配合CSS实现样式控制,结合JavaScript完成交互逻辑。在工程实践中,语义化HTML能提升SEO效果和无障碍访问体验,特别是在响应式设计和移动端适配中发挥关键作用。以蓝桥杯Web应用开发比赛为例,选手需要掌握HTML5新特性如video标签、Canvas绘图等多媒体集成技术,同时注重表单验证和元信息优化。通过系统学习文档结构、媒体嵌入和语义化标记,开发者能构建符合W3C标准的应用框架,为后续前

weixin_33884611的博客 368

基于Web的房屋租赁信息平台的设计与实现中期检查

本文为本科毕业论文中期自查表,题目为"基于Web的房屋租赁信息平台的设计与实现"。目前已完成文献查阅、开题报告等工作,进度符合计划。教师指导5次(面谈和网授),记录3次。存在文档不规范、系统测试不足、关键功能缺失等问题,拟通过参考高质量论文、加强测试调试、开发预约看房和房源更新功能等措施解决。指导教师已签名确认。

2301_79305643的博客 285

香港 Web3 每日必读:花旗银行拟于明年推出加密货币资产托管服务

花旗银行服务业务全球合作伙伴关系与创新主管 Biswarup Chatterjee 表示,随着华尔街巨头加大数字货币领域布局,该行计划 2026 年推出加密货币资产托管服务,过去两三年开发已取得进展,希望未来几个季度能面向资产管理者等客户,推出可靠、可信的托管方案。即将推出的托管服务,花旗银行会持有原生加密货币。麦通 MSX 研究院认为,融入黄金代币、美股代币等 RWA 资产的升级策略,为 USDe 提供了清晰的进化方向 —— 这不是对现有创新的否定,而是在哈耶克理念指引下的深化与完善。

TechubNews的博客 573
上一篇: 一种快速开发的Java Web架构设计和实现(代码篇)
下一篇: 一种一站式的Java Web框架的设计和实现
zwchen
博客等级 码龄23年 24粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值