Java EE常用框架
2021-04-17 09:49:34 1 举报
AI智能生成
Java EE常用框架
作者其他创作
大纲/内容
WebService
介绍
基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用
希望给第三方应用提供web方式的服务 (http + xml)= web Service
术语
XML. Extensible Markup Language -扩展性标记语言
WSDL – WebService Description Language – Web服务描述语言。
SOAP-Simple Object Access Protocol(简单对象访问协议)
SOAP = 在HTTP的基础上+XML数据
SOA(Service-Oriented Architecture) :面向服务的架构
它是一种思想,IBM大力倡导是即插即用的,IBM大力提倡,希望以组装电脑的方式来开发应用
uddi (Universal Description, Discovery and Integration)统一描述、发现、集成
它是目录服务,通过该服务可以注册和发布webservcie,以便第三方的调用者统一调用
使用:
一、我们可以使用http-get方式访问webservice,由于它使用的是原生Socket来进行访问。会有点复杂。于是我们可以借助Http-Client 框架来访问WebService。Http-Client 框架比HTTP-GET方式会简单一点。但还是都不够简洁
二、我们可以使用Java自带的WsImport来实现本地代理。这种方法会将WebService翻译成Java类,我们使用类一样去访问WebService就行了。非常好用。
三、除了调用别人发布的webService,也可以自己发布WebService服务
四、CXF框架可以与spring无缝连接,就不用我们自己Endpoint了。它还能记录日志之类的
五、我们还可以使用Idea下的webservice,能够使用图形画面的方式获取本地代理和生成WSDL文件。
Activiti
介绍
Activiti5是一个业务流程管理(BPM)框架
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”
如果我们的业务是比较复杂的话,我们才会用到工作流!
使用Activiti的步骤
定义工作流
画一个BPMN图就可以了
部署工作流
执行工作流-->按照我们定义的工作流来执行
工作流在执行的过程中肯定会涉及到很多数据,Activiti是默认提供数据库表给我们使用的
Activiti工作流框架快速入门:
定义工作流,使用插件来把我们的流程图画出来。这个流程图就是我们定义的工作流。
工作流引擎是工作流的核心,能够让我们定义出来的工作流部署起来。
由于我们使用工作流的时候是有很多数据产生的,因此Activiti是将数据保存到数据库表中的。这些数据库表由Actitviti创建,由Activiti维护。
部署完的工作流是需要手动去执行该工作流的。
根据由谁处理当前任务,我们就可以查询出具体的任务信息。
根据任务的id,我们就可以执行任务了。
细节
流程定义:涉及到了四张数据库表
我们可以通过API把我们的流程定义图读取出来
可以根据查询最新版本的流程定义
删除流程定义
部署流程定义的时候也可以是ZIP文件
流程运行:涉及到两个对象,四张数据库表:
流程实例
流程任务
流程实例可以有多个,流程对象只能有一个
基于流程实例和流程任务对象,我们就可以做很多事情了
获取流程实例和任务的历史信息
判断流程实例是否为空来判断流程是否结束了
查看正在运行服务的详细信息
通过流程实例来开启流程
流程变量:它涉及到了两张表。
流 程变量实际上就是我们的条件。
作用
流程变量的作用域只在流程实例中。
我们可以在流程开始的时候设置流程变量,在任务完成的时候设置流程变量。
运行时服务和流程任务都可以设置流程变量。
连线
通过连线我们可以在其中设置条件,根据不同的条件流程走不同的分支
排他网关
如果没有设置默认的条件,当条件不吻合的时候,那么流程就走不下去了,因此需要排他网关来设置一条默认的路径。
SpringData JPA
简介
JPA是一套标准接口,而Hibernate是JPA的实现
SpringData JPA 底层默认实现是使用Hibernate
API
Repository接口
CURDRepository
PagingAndSortingRepository
JpaRepository
分支主题
JpaSpecificationExecutor
过滤条件查询接口
注解
nameQuery注解
SQL命名,调用的时候根据名称调用
query注解
查询注解
@OneToOne的注解
1,targetEntity 属性表示默认关联的实体类型,默认为当前标注的实体类。 2,cascade属性表示与此实体一对一关联的实体的级联样式类型。 3,fetch属性是该实体的加载方式,默认为即时加载EAGER 4,optional属性表示关联的该实体是否能够存在null值,默认为ture,如果设置为false,则该实体不能为null, 5, mapperBy属性:指关系被维护端
@JoinColumn注解
1,@JoinColumn注释是保存表与表之间关系的字段 2,如果不设置name,默认name = 关联表的名称+”-“+关联表主键的字段名
需要注意的问题:
注解写在get方法上
如果写在属性上可能会出现: Could not locate field nor getter method for property named
级联 .ALL慎用
总的来说,如果是单表操作的话,那么SpringData JPA是十分方便的,如果是比较复杂的业务的话,那么使用SpringData JPA就有点麻烦了,因为它返回的是Object[],返回的结果还要手动进行封装,不太方便。灵活性很低...
Lucene
简介
Lucene是根据关健字来搜索的文本搜索工具(全文搜索引擎),只能在某个网站内部搜索文本内容,不能跨网站搜索
全文搜索引擎是在硬盘上的搜索,比传统Mysql数据库是要快的
比传统SQL多的功能:查询的结果有相关的排名,可以有高亮显示
存储数据的地方我们称之为索引库
原始记录表
分词表(倒排序表)
使用
将JavaBean对象封装到Document对象中
后通过IndexWriter把document写入到索引库中
当用户需要查询的时候,就使用IndexSearcher从索引库中读取数据,找到对应的Document对象,从而解析里边的内容
最后将内容封装到JavaBean对象中
索引库优化
合并文件
设置内存索引库
分词器
采用一种算法,将中英文本中的字符拆分开来,形成词汇,以待用户输入关健字后搜索
流程
步一:按分词器拆分出词汇步二:去除停用词和禁用词步三:如果有英文,把英文字母转为小写,即搜索不分大小写
IKAnalyzer分词器:一个比较出名的中文分词器
对搜索结果进行处理
搜索结果高亮
搜索结果排序
搜索结果摘要
条件搜索
SpringBoot
SpringBoot就是为了简化我们的配置:约定大于配置
启动方式
在idea中直接使用启动
使用mvn 命令来启动
使用mvn编译,而后在class目录生成jar包,使用Java命令来启动
使用@configurationProperties和@Value注解来获取SpringBoot配置文件上的信息
使用@SpringBootTest来搭建测试环境,使用@AutoConfigueMockMVC类实现Mock http操作
热部署和热加载
热部署代表的是:我们不需要重启服务器,能够将新war包替换旧的war包。
热加载代表的是:我们不需要重启服务器,就能够类检测得到,重新生成类的字节码文件
无论是热部署或者是热加载、都是基于Java类加载器来完成的。
SpringBoot实现热部署
1、在plugin标签中加入插件
2、启动的加入参数 引用springloaded jar包 -javaagent:'jar包路径' -noverify
3、pom文件加入依赖
Shiro
简介
shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权
传统使用URL拦截的时候,要将所有的URL都配置起来,繁琐、不易维护而我们的Shiro实现系统的权限管理,有效提高开发效率,从而降低开发成本。
RBAC(Resource based access control),基于资源的访问控制
粗粒度和细粒度权限
粗粒度权限管理比如:超级管理员可以访问户添加页面、用户信息等全部页面。部门管理员可以访问用户信息页面包括 页面中所有按钮。
细粒度权限管理:对资源实例的权限管理。资源实例就资源类型的具体化,比如:用户id为001的修改连接,1110班的用户信息、行政部的员工。细粒度权限管理就是数据级别的权限管理。
Shiro认证流程
ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)
ModularRealmAuthenticator进行密码对比(认证过程)。
realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null。
自定义realm
在Shiro中默认是使用ini文件去对比的,但我们开发往往是去数据库比较,因此我们需要自定义realm
自定义也很简单:继承AuthorizingRealm类就好了
自定义的realm支持散列算法
授权方式
编程式:通过写if/else 授权代码块完成
注解式:通过在执行的Java方法上放置相应的注解完成
JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成
Spring与Shiro整合
在web.xml配置拦截器
在Shiro配置文件上配置在web.xml对应的bean
配置安全管理器
配置自定义的realm
静态资源不拦截
Shiro过滤器
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,FormAuthenticationFilter是表单认证,没有参数 perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。user:例如/admins/user/**=user没有参数,表示必须存在用户, 身份认证通过或通过记住我认证通过的可以访问,当登入操作时不做检查
使用过滤器实现登录和退出功能
步骤
当用户没有认证时,请求loginurl进行认证【上边我们已经配置了】,用户身份和用户密码提交数据到loginurl
FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的)
FormAuthenticationFilter 调用realm传入一个token(username和password)
realm认证时根据username查询用户信息(在Activeuser中存储,包括 userid、usercode、username、menus)。
如果查询不到,realm返回null,FormAuthenticationFilter向request域中填充一个参数(记录了异常信息)
查询出用户的信息之后,FormAuthenticationFilter会自动将reaml返回的信息和token中的用户名和密码对比。如果不对,那就返回异常。
退出
不用我们去实现退出,只要去访问一个退出的url(该 url是可以不存在),由LogoutFilter拦截住,清除session。
数据回显
当需要获取用户的数据用于回显的时候,我们可以在SecurityUtils.getSubject()来得到主体,再通过主体拿到身份信息
授权过滤器使用
XML配置方式
1.在配置文件上配置配置filter规则。/items/queryItems.action = perms[item:query]
2.用户请求url,/items/queryItems.action
3.被PermissionsAuthorizationFilter拦截,发现需要“item:query”权限
4.PermissionsAuthorizationFilter 调用realm中的doGetAuthorizationInfo获取数据库中正确的权限
5.PermissionsAuthorizationFilter对item:query 和从realm中获取权限进行对比,如果“item:query”在realm返回的权限列表中,授权通过。
6. realm中获取认证的信息,查询出该用户对应的权限,封装到simpleAuthorizationInfo中,PermissionsAuthorizationFilter会根据对应的权限来比对。
0 条评论
下一页