Maven
Maven采用pom概念(project object model)来管理项目。
Pom.xml,用于管理源代码,配置文件开发者信息和角色,项目授权,项目的url,项目的依赖关系等。Dependencies和dependency用于定义依赖关系,dependency通过groupid,artifactid及version来定义所依赖的项目。
Swagger
再前后端开发和分析中,为减少和其他团队的沟通成本,会构建restful api文档来描述所有接口信息。
开源软件框架,帮助开发人员设计,构建,记录和使用restful web应用,将代码和文档融为一体,使开发人员集中精力于业务处理而不是文档。
http://path/swagger-ui.html可以为前端展示相关的api文档,通过web界面进行接口测试。
Java EE的核心技术
JDBC,JNDI,EJB,RMI,SERVLET,JSP,XML,JMS,JAVA IDL,JTS,JTA,JAVAMAIL和jaf。
Jdbc:java数据库连接
Jndi:java命名和目录接口,是Java的目录服务应用程序界面(api),提供目录系统,将服务名称与对象关联,使开发人员可以用名称来访问对象。
Ejb:企业级javabean
Rmi:远程方法调用,用户开发分布式应用程序的api
Servlet:狭义的servlet指Java语言实现的一个接口,广义指任何实现该接口的类。主要功能是交互式的浏览和修改数据,生成动态web内容。
Jsp:部署在网络服务器,响应客户端请求,根据请求内容动态生成html,xml,或其他格式文档的web网页,返回给请求者。
Xml:
Jms:Java消息服务,面向消息的中间件(mom)的api,用于两个程序之间或分布式系统中发送消息,进行异步通信。
Java EE分层模型:5层
Domain object领域对象层:pojo
Dao数据访问对象层:数据库创建,查询,更新和删除等操作
Service业务逻辑层:系统所需的业务逻辑方法
Controller控制器层:拦截用户请求,调用业务逻辑去处理用户请求,根据处理结果向不同的view转发。
View表现层:页面和视图,收集用户请求,显示处理后的结果。
Mvc
3个核心:
模型:携带数据的对象或java pojo。即使模型内的数据改变,它也具有逻辑来更新控制器。
视图:模型包含数据的可视化层
控制器:控制数据流进入模型对象,在数据更改时更新视图
目的:将数据模型和用户界面分开,控制器用于确保m和v同步,一旦m改变v就同步更新。强制性地将程序的输入,处理,输出分开。
Java mvc框架
Struts 1:基于mvc模式定义通用的controller,通过配置文件分离m和v,通过action对用户请求进行封装。
Struts 2:apache根据名为webwork的项目发展而来。本质上相当于servlet,在mvc模式中,struts 2作为控制器俩建立m与v的数据交互。
Spring mvc:spring的子框架,角色划分清晰,分工明细
Jsf:提供了以组件为中心的用户界面构建方法
Tapestry:mvc和模板技术的结合,包含前端的mvc,包含一种v的模板技术,使用tapestry完全与servlet/jsp api分离
在java web容器中运行的小程序,处理一些较为复杂的服务器端的业务逻辑
Servlet的配置
3.0以前在web.xml中配置,3.0之后版本使用注解方式配置
不同版本的servlet需要不同的jdk
Servlet的访问流程
Servlet的接口方法
对应http的8种请求方法
Service()检查对应的http请求类型,从而调用对应的doget,dopost,doput,dodelete等
Init()接口:servlet实例化后,servlet容器调用init方法来初始化该对象,做处理客户请求前的一些工作,如:建立数据库连接,获取配置信息等
Servlet生命周期
Servlet2.3新增的特性,实现对web资源的管理,如权限访问控制,过滤敏感词汇,压缩响应信息等
基于注解:@WebFilter
不推荐使用注解方式,因为web.xml可以控制过滤器的执行顺序
拦截方式:1. 在httpservletrequest到达servlet前,filter拦截,根据需要检查httpservletrequest,也可以修改头和数据。2. 在httpservletresponse到达客户端前
Filter的接口方法
Init()接口:初始化过滤器
Filter生命周期
Java反射机制可以无视类方法,变量去访问权限修饰符(protected,private等),可调用任何类的任意方法,访问并修改成员变量值。
反射是java特征之一,使运行中的java程序能获取自身的信息,可操作类或对象的内部属性。
反射的用途:eclipse开发工具,当我们输入一个对象或欸像调用他的属性或方法时,编译器会自动列出它的属性和方法。Javabean和jsp之间的调用也是反射实现。反射最重要用途是开发各种通用框架,如spring及orm。
反射的基本运用:
1.Forname()获取类对象,只需类名称
2…class直接获取对应的class对象
3.Object类的Getclass()方法获取字节码对象
4.getSystemClassLoader().loadClass()与forname()类似,但forname()的静态方法jvm会装载类,并执行static()中的代码
获取类方法
1.getDeclareMethods方法法案和类或接口声明的所有方法,但不包括继承的方法
2.GetMethods返回类的所有public方法,包括继承类的public方法
3.Getmethod返回一个特定的方法
4.Getdeclaremethod返回特定方法
获取类成员变量
1.Getdeclarefields获得类的成员变量数组,但不包括父类声明字段
2.Getfields
3.Getdeclarefield
4.Getfield
不安全的反射
程序运行时不会一次性加载所有class文件进内存,而是类加载机制进行动态加载,从而转换成java.lang.Class类的一个实例。
ClassLoader是抽象类,通过指定类名称,找到或生成对应的字节码,返回java.lang.Class类的示例。
代理是java的一种设计模式,提供对目标对象另外的访问方式,即通过代理对象访问目标对象。代理对象是对目标对象的扩展。
Java代理的3种方式:静态代理,动态代理和CGLib代理。
静态代理:
当确定代理对象和被代理对象后,无法代理另外的对象。代理类和对代理类实现同样的接口。
优势:允许开发人员在不修改已有代码的前提下完成一些增强功能的需求。
劣势:因为要实现一致的接口,造成过多代理类,冗余。大量使用静态代理,项目不易维护,一旦接口增加方法,目标对象和代理对象都要进行修改。
动态代理:
基于反射机制,通过实现接口方式实现代理,通过proxy类创建代理对象,然后将接口方法“代理”给invocattionHandler接口完成的。
优势:对代理类的函数进行统一处理,而不用修改每个代理类中的方法。
CGLib代理:
第三方代码生成类库,运行时在内存中动态生成子类对象,从而实现 对目标对象的功能扩展。基于ASM机制实现,通过生成业务量的子类作为代理类。
静态编程:类型检查在编译时完成
动态编程:运行时完成
Javassist处理java字节码的类库,最重要的四个类ClassPool,CtClass,CtMethod及CtDField。
Spring security:为基于spring的企业应用系统提供声明式的安全访问控制解决方案。
用户认证:spring security支持主流的认证方式,包括http基本认证,http表单验证,http摘要认证,openid和ladp等。
用户授权:基于角色的访问控制和访问控制列表acl。
Spring security提供了一组可以在spring应用上下文中配置的bean,充分利用了spring ioc(控制反转),di(依赖注入),和aop(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能。
Apache shiro
身份验证,授权,加密和会话管理。
JWT
Json web token,是一种具体的token实现框架,适用于分布式站点的单点登录(sso)场景。
客户端身份经过服务器验证通过后,会生成待遇签名的json对象并返回给客户端,客户端收到json对象后,存储起来。在以后的请求种,客户端将json对象连同请求内容一起发送给服务器。
私钥
记录《java代码审计》书籍的内容