发布网友 发布时间:2024-09-06 05:43
共1个回答
热心网友 时间:2024-09-28 12:32
springBoot必用依赖框架使用Lombok框架
在编写POJO类型(包括实体类、VO、DTO等)时,都有统一的编码规范,例如:
由于以上操作方式非常固定,且涉及的代码量虽然不难,但是篇幅较长,并且,当类中的属性需要修改时(包括修改原有属性、或增加新属性、删除原有属性),对应的其它方法都需要修改(或重新生成),管理起来比较麻烦。
在SpringBoot中,添加Lombok依赖,可以在创建项目时勾选,也可以后期自行添加,依赖项的代码为:
完成后,在各POJO类型中,将不再需要在源代码添加SettersGetters、`equals()`、`hashCode()`、`toString()`这些方法,只需要在POJO类上添加`@Data`注解即可!
当添加`@Data`注解,且删除相关方法后,由于源代码中没有相关方法,则调用了相关代码的方法可能会报错,但是,并不影响程序运行!
为了避免IntelliJIDEA判断失误而提示了警告和错误,推荐安装Lombok插件,可参考:
【注】:无论是否安装插件,都不影响代码的编写和运行!
Slf4j日志框架
在开发实践中,不允许使用`System.out.println()`或类似的输出语句来输出显示关键数据(核心数据、敏感数据等),因为,如果是这样使用,无论是在开发环境,还是测试环境,还是生产环境中,这些输出语句都将输出相关信息,而删除或添加这些输出语句的操作成本比较高,操作可行性低。
推荐的做法是使用日志框架来输出相关信息!
在Slf4j日志框架中,将日志的可显示级别根据其重要程度(严重程度)由低到高分为:
在配置文件中,可以通过`logging.level.包名.类名`来设置当前类的日志显示级别,例如:
当设置了显示的日志级别后,仅显示设置级别和更重要的级别的日志,例如,设置为`info`时,只显示`info`、`warn`、`error`,不会显示`debug`、`trace`级别的日志!
当输出日志时,通过`log`变量调用`trace()`方法输出的日志就是`trace`级别的,调用`debug()`方法输出的日志就是`debug()`级别的,以此类推,可调用的方法还有`info()`、`warn()`、`error()`。
在开发实践中,关键数据和敏感数据都应该通过`trace()`或`debug()`进行输出,在开发环境中,可以将日志的显示级别设置为`trace`,则会显示所有日志,当需要交付到生产环境中时,只需要将日志的显示级别调整为`info`即可!
默认情况下,日志的显示级别是`info`,所以,即使没有在配置文件中进行正确的配置,所有info、warn、error级别的日志都会输出显示。
在使用Slf4j时,通过`log`调用的每种级别的方法都被重载了多次(各级别对应除了方法名称不同,重载的次数和参数列表均相同),推荐使用的方法是参数列表为`(Stringformat,Object...arguments)`的,例如:
以上方法中,第1个参数是将要输出的字符串的模式(模版),在此字符串中,如果需要包含某个变量值,则使用`{}`表示,如果有多个变量值,均是如此,然后,再通过第2个参数(是可变参数)依次表示各`{}`对应的值,例如:
使用这种做法,可以避免多变量时频繁的拼接字符串,另外,日志框架会将第1个参数进行缓存,以此提高后续每一次的执行效率。
在开发实践中,应该对程序执行关键位置添加日志的输出,通常包括:
其实,Slf4j日志框架只是日志的一种标准,并不是具体的实现(感觉上与Java中的接口有点相似),常见有具体实现了日志功能的框架有log4j、logback等,为了统一标准,所以才出现了Slf4j,同时,由于log4j、logback等框架实现功能并不统一,所以,Slf4j提供了对主流日志框架的兼容,在SpringBoot工程中,`spring-boot-starter`就已经依赖了`spring-boot-starter-logging`,而在此依赖下,通常包括Slf4j、具体的日志框架、Slf4j对具体日志框架的兼容。
密码加密(额外知识点)
【这并不是SpringBoot框架的知识点】
对密码进行加密,可以有效的保障密码安全,即使出现数据库泄密,密码安全也不会受到影响!为了实现此目标,需要在对密码进行加密时,使用不可逆的算法进行处理!
通常,不可以使用加密算法对密码进行加密码处理,从严格定义上来看,所有的加密算法都是可以逆向运算的,即同时存在加密和解密这2种操作,加密算法只能用于保证传输过程的安全,并不应该用于保证需要存储下来的密码的安全!
哈希算法都是不可逆的,通常,用于处理密码加密的算法中,典型的是一些消息摘要算法,例如MD5、SHA256或以上位数的算法。
消息摘要算法的主要特征有:
在消息摘要算法中,以MD5为例,其运算结果是一个128位长度的二进制数,通常会转换成十六进制数显示,所以是32位长度的十六进制数,MD5也被称之为128位算法。理论上,会存在2的128次方种类的摘要结果,且对应2的128次方种不同的消息,如果在未超过2的128次方种消息中,存在2个或多个不同的消息对应了相同的摘要,则称之为:发生了碰撞。一个消息摘要算法是否安全,取决其实际的碰撞概率,关于消息摘要算法的破解,也是研究其碰撞概率。
存在穷举消息和摘要的对应关系,并利用摘要在此对应关系进行查询,从而得知消息的做法,但是,由于MD5是128位算法,全部穷举是不可能实现的,所以,只要原始密码(消息)足够复杂,就不会被收录到所记录的对应关系中去!
为了进一步提高密码的安全性,在使用消息摘要算法进行处理时,通常还会加盐!盐值可以是任意的字符串,用于与密码一起作为被消息摘要算法运算的数据即可,例如:
加盐的目的是使得被运算数据变得更加复杂,盐值本身和用法并没有明确要求!
甚至,在某些用法或算法中,还会使用随机的盐值,则可以使用完全相同的原消息对应的摘要却不同!
推荐了解:预计算的哈希链、彩虹表、雪花算法。
为了进一步保证密码安全,还可以使用多重加密,即反复调用消息摘要算法。
除此以外,还可以使用安全系数更高的算法,例如SHA-256是256位算法,SHA-384是384位算法,SHA-512是512位算法。
Validation框架
当客户端向服务器提交请求时,如果请求数据出现明显的问题(例如关键数据为`null`、字符串的长度不在可接受范围内、其它格式错误),应该直接响应错误,而不是将明显错误的请求参数传递到Service!
关于判断错误,只有涉及数据库中的数据才能判断出结果的,都由Service进行判断,而基本的格式判断,都由Controller进行判断。
Validation框架是专门用于解决检查数据基本格式有效性的,最早并不是Spring系列的框架,目前,SpringBoot提供了更好的支持,所以,通常结合在一起使用。
在SpringBoot项目中,需要添加`spring-boot-starter-validation`依赖项,例如:
在控制器中,首先,对需要检查数据格式的请求参数添加`@Valid`或`@Validated`注解(这2个注解没有区别),例如:
真正需要检查的是`AdminAddNewDTO`中各属性的值,所以,接下来需要在此类的各属性上通过注解来配置检查的规则,例如:
重启项目,通过不提交用户名的URL(例如:)进行访问,在浏览器上会出现400错误页面,并且,在IntelliJIDEA的控制台会出现以下警告:
从警告信息中可以看到,当验证失败时(不符合所使用的注解对应的规则时),会出现`org.springframework.validation.BindException`异常,则自行处理此异常即可!
首先,在`State`中添加新的枚举:
然后,在`GlobalExceptionHandler`中添加新的处理异常的方法:
关于错误提示信息,以上内容中出现了`不能为null`的字样,是默认的提示文本,可以通过`@NotNull`注解的`message`属性进行配置,例如:
然后,在处理异常时,通过异常信息获取自定义的提示文本:
再次运行,在不提交用户名和密码的情况下,会随机的提示用户名或密码验证失败的提示文本中的某1条。
在Validation框架中,还有其它许多注解,用于进行不同格式的验证,例如:
以上注解,包括`@NotNull`是允许叠加使用的,即允许在同一个参数属性上添加多个注解!
以上注解均可以配置`message`属性,用于指定验证失败的提示文本。
通常:(开发中)
一图看懂SpringBoot异步框架在SpringBoot的日常开发中,一般都是同步调用的。但经常有特殊业务需要做异步来处理,例如:注册新用户,送100个积分,或下单成功,发送push消息等等。
就拿注册新用户为什么要异步处理?
在SpringBoot中使用异步调用是很简单的,只需要使用@Async注解即可实现方法的异步调用。
采用@EnableAsync来开启异步任务支持,另外需要加入@Configuration来把当前类加入springIOC容器中。
增加一个service类,用来做积分处理。
@Async添加在方法上,代表该方法为异步处理。
@Async注解,在默认情况下用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上的线程池,因为线程不重用,每次调用都会新建一条线程。
可以通过控制台日志输出查看,每次打印的线程名都是[task-1]、[task-2]、[task-3]、[task-4].....递增的。
@Async注解异步框架提供多种线程
SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。
SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方。
ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。
ThreadPoolTaskScheduler:可以使用cron表达式。
ThreadPoolTaskExecutor:最常使用,推荐。其实质是对java.util.concurrent.ThreadPoolExecutor的包装。
springboot是什么框架
springboot是什么框架
1.SpringBoot是什么,解决哪些问题1)SpringBoot使编码变简单2)SpringBoot使配置变简单3)SpringBoot使部署变简单4)SpringBoot使监控变简单5)SpringBoot的不足2.SpringBoot在平台中的定位,相关技术如何融合1)SpringBoot与S...
springboot框架
你说的应该是web容器吧springboot有自带的tomcat和ty
springboot框架怎么搭建
目前java方面,我了解到用jersey框架来搭建restful服务,据说jersey框架对restful服务来说是比较原汁原味的,你可以去了解一下。用springMVC这个也是restful的风格目前springMVC比较流行,看你想用哪个了
如何搭建一个springboot+mybatis+gradle框架
parameter'articleName'notfound.这个引数没有找到,你看是否传进来了,或者是否在配置档案中注入了。
jsp框架是什么
WebWork是由OpenSymphony组织开发的,致力于元件化和程式码重用的拉出式MVC模式J2EE
Web框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard
Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个专案。
Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。
Xwork提供了很多核心功能:前端拦截机(interceptor),执行时表单属性验证,型别转换,强大的表示式语言(OGNL–theObject
GraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。
WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),
session(会话)application(应用程式)范围的对映,request请求引数对映。WebWork2支援多视图表示,检视部分可以使用JSP,
Velocity,FreeMarker,
JasperReports,XML等。在WebWork2.2中添加了对AJAX的支援,这支援是构建在DWR与Dojo这两个框架的基础之上。
2.Struts是一个基于Sun
J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和资讯资源(message
resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
3.EasyJWeb是基于java技术,应用于WEB应用程式快速开发的MVC框架,框架设计构思来源于国内众多专案实践,框架充分借签了当前主要流行的开源Web框架(Struts、JSF、Tapestry
、Webwork),吸取了其优点及精华,利用Velocity作为模板页面引擎,是一个实现了页面及程式码完全分离的MVC开发框架。是一个能实现中小型Web应用系统快速开发的简易Web框架。
通过EasyJWeb
Tools提供的配套开发工具,可以实现基于EasyJWeb框架的Web应用快速开发,包括常用应用软体的程式码自生成、资料库添删改查(CRUD)程式码生成、自动页面模版生成、配置档案管理等。
框架特点:
1、零配档案置支援。接触一个开发框架,开始总都要被它的配置档案折腾一番。EasyJWeb实现零配置支援,可以不写一句配置档案就在框架基础上构建运用。(适合小型网站系统)。
2、简易的模板页面设计支援:放弃使用jsp,使用简单Velocity指令码语言作为页面模板。
3、页面程式完全分离:实现显示页面与程式逻辑的完全分离,克服了传统jsp页面难于维护的问题。
4、基于页面元件的框架。灵活的页面元件配置,可以直接通过配置档案设定栏位级的事件元件。
5、快速开发支援:通过EasyJWeb
Tools,可以自动生成应用软体模板程式码,定制并管理自己的J2EE程式码模板,程式码生成模板支援最流行的实用Java开发框架(如hibernate、Spring等)实现快速开发
Extjs框架是什么
ExtJS是一个Ajax框架,是一个用javascript写的,用于在客户端建立丰富多彩的web应用程式介面。ExtJS可以用来开发RIA也即富客户端的AJAX应用。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员JackSlocum开发,通过参考JavaSwing等机制来组织视觉化元件,无论从UI介面上CSS样式的应用,到资料解析上的异常处理,都可算是一款不可多得的JavaScript客户端技术的精品。
Ext的UI元件模型和开发理念脱胎、成型于Yahoo元件库YUI和Java平台上Swing两者,并为开发者遮蔽了大量跨浏览器方面的处理。相对来说,EXT要比开发者直接针对DOM、W3C物件模型开发UI元件轻松。
title框架是什么
Tiles框架为建立Web页面提供了一种模板机制,它能将网页的布局和内容分离。它允许先建立模板,然后在执行时动态地将内容插入到模板中。Tiles框架建立在JSP的include指令的基础上,但它提供了比JSP的include指令更强大的功能。Tiles框架具有如下特性:
??建立可重用的模板
??动态构建和装载页面
??定义可重用的Tiles元件
??支援国际化
Tiles框架包含以下内容:
??Tiles标签库
??Tiles元件的配置档案
??TilesPlugIn外挂
在开发Web站点时,常常要求同一站点的所有Web页面保持一致的外观,比如有相同的布局、页头、页尾和选单。
采用基本的JSP语句建立复合式网页
建立动态Web页面的最基本的办法是为每个页面建立独立的JSP档案。如果网页的相同部分发生需求变更,必须手工修改所有的JSP档案。可见,采用基本的JSP语句来编写上述网页,会导致JSP程式码的大量冗余,增加开发与维护成本。
采用JSP的include指令建立复合式网页
为了减少程式码的冗余,可以把index.jsp和product.jsp中相同部分放在单独的JSP档案中,然后在index.jsp和product.jsp档案中通过JSPinclude指令把其他JSP档案包含进来。这样提高了程式码的可重用性。但是JSPinclude指令不能完全避免程式码冗余,尽管这种方案减少了重复程式码,但JSP档案的数量增加了,由原来的2个档案增加到7个档案,所以软体的复杂度也增加了。
采用Tiles:Insert标签建立复合式网页
Tiles标签库的tiles:insert标签和JSPinclude指令具有相同的功能,也能把其他的JSP页面插入到当前页面中。用tiles:insert标签取代JSPinclude指令来建立复合式页面,程式码仅有稍微的差别,两者的利弊也很相似。单纯使用tiles:insert标签来建立复合式页面,还没有充分发挥Tiles框架的优势。
以下两条语句的作用是相同的:
jsp:includepage="indexContent.jsp"/
tiles:insertpage="indexContent.jsp"/
采用Tiles模板建立复合式网页
尽管使用了tiles:insert标签,index.jsp和product.jsp档案还是存在很多的重复程式码。为了提高Web页面的可重用性和可维护性,可以引入Tiles的模板机制。通俗的讲,Tiles模板是一种描述页面布局的JSP页面。Tiles模板仅仅定义Web页面的样式,而不指定内容。在Web应用执行时,才把特定内容插入到模板页面中。同一模板可以被多个Web页面共用。使用模板,可以轻松的实现Web应用的所有页面保持相同的外观和布局,无需为每个页面硬编码。在一个应用中,大多数页面使用同一模板,某些页面可能需要不同的外观,使用其他的模板,因此一个应用可能有一个以上模板。
%@tagliburi="/WEB-INF/struts-tiles.tld"prefix="tiles"%
tiles:insertattribute="sidebar"/
tiles:insertattribute="header"/
tiles:insertattribute="content"/
tiles:insertattribute="footer"/
%@pagecontentType="text/;charset=UTF-8"%
%@tagliburi="/WEB-INF/struts-tiles.tld"prefix="tiles"%
tiles:insertpage="layout.jsp"flush="true"
tiles:putname=sidebarvalue="sidebar.jsp"/
tiles:putname=headervalue="header.jsp"/
tiles:putname=contentvalue="indexContent.jsp"/
tiles:putname=footervalue="footer.jsp"/
/tiles:insert
python框架是什么
你说的是,网路框架吧?
简单说:
Django
Grok
Pylons
TurboGears
web2py
Zope2
复杂说:
自己去看:
【整理】Python中常见的Web框架
(此处不给帖地址,请自己用google搜标题,就可以找到帖子地址了)
Junit框架是什么
JUnit是一个开放原始码的Java测试框架,用于编写和执行可重复的测试。他是用于单元测试框架体系xUnit的一个例项(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试资料的测试工具
3、用于方便的组织和执行测试的测试套件
4、图形和文字的测试执行器
(来自百度百科)
dorado是什么框架?
dorado是上海锐道公司开发的展现层中介软体,能与目前的Spring,hibernate等开源框架结合,使开发的速度能大大提高,它可以javaweb开发,前端应用,很容易上手
springboot框架的优点SpringBoot可以轻松创建可以“直接运行”的独立的、生产级的基于Spring的应用程序。
我们对Spring平台和第三方保持固执己见的看法,因此您可以轻松上手。大多数SpringBoot应用程序需要最少的时间Spring配置。
其特征如下:
创建独立的Spring应用程序
直接嵌入Tom