JavaEE
2020-04-02 14:12:32 3 举报
AI智能生成
javaEE知识点
作者其他创作
大纲/内容
JavaEE基础
Servlet
生命周期
init(ServletConfig config)方法,在Servlet初始化时被调用
service(ServletRequest request, ServletResponse response)方法,处理客户端请求
destroy()方法,在Servlet销毁时被调用
配置
web.xml配置servlet和servlet-mapping
@WebServlet注解
ServletConfig
代表当前Servlet
获取Servlet初始化参数init-param
ServletContext
代表当前web应用
获取web应用初始化参数context-param
整个web应用数据共享
ServletRequest
代表客户端请求
请求转发forward,转发前后是同一个请求
ServletResponse
代表服务端响应
请求重定向redirect,前后是两个不同的请求
JSP
九大内置对象
pageContext:PageContext类型,页面上下文对象 request:ServletRequest类型,表示HTTP请求response:ServletResponse类型,表示HTTP响应session:HttpSession类型,表示当前会话application:ServletContext类型,表示当前Web应用exception:Throwable类型out:JspWriter类型,JSP页面输出流page:Object类型,页面对象config:ServletConfig对象,表示当前Servlet
四大作用域
page:表示页面范围 request:表示请求范围session:表示当前会话范围application:表示当前Web应用范围
JSTL
自定义标签
1、继承javax.servlet.jsp.tagext.SimpleTagSupport类,并重写doTag方法 2、在项目WEB-INF目录下创建tld文件(其中描述了标签的语法,如:标签有哪些属性,标签的属性是否支持表达式等内容)
EL表达式
监听器Listener
分类
ServletRequestListener
ServletRequestAttributeListener
HttpSessionListener
HttpSessionAttributeListener
ServletContextListener
ServletContextAttributeListener
配置
web.xml配置listener
@WebListener注解
过滤器Filter
生命周期
init()
初始化,由Servlet容器(如tomcat)创建
doFilter()
处理请求过滤
destroy()
销毁,由servlet容器完成
配置
web.xml配置filter和filter-mapping
@WebFilter注解
Cookie
为了弥补HTTP协议无状态的不足而引入的机制。由服务端创建,但由客户端(浏览器)保存。
应用:客户端记住密码
Session
由服务端创建,并保存到服务端
应用:用户登录验证
四种会话跟踪技术: 1、URL重写:将会话ID写到URL之后,服务端通过会话ID识别不同用户;2、隐藏表单域:将会话ID放到表单的隐藏域中,随着表单提交到服务端;3、Cookie:第一次请求时服务器主动发一小段信息给浏览器(即Cookie),下次请求时浏览器自动附带该段信息发送给服务器,服务器读取Cookie识别用户;4、Session:服务器为每个用户创建一个Session对象保存到内存,并生成一个sessionID放入Cookie发送给浏览器,下次访问时sessionID会随Cookie传回来,服务器再根据sessionID找到对应Session对象。
URL编码
网址路径编码:UTF-8,如xxx.com/title/编码
查询字符串:操作系统默认编码,win7是GBK
GET和POST方法的编码:网页的编码
Ajax调用中的编码:IE总是采用操作系统的默认编码,而Firefox总是采用UTF-8编码
XML
XML基础语法
文档声明
约束
DTD约束
Schema约束
XML解析
DOM
JDOM
Dom4J
SAX
websocket
基于TCP,全双工通信协议。
@OnOpen,@OnMessage,@OnClose,@OnError关键注解
消息服务JMS
API
Message
消息是消息服务器在客户端之间发送的一条条信息。
消息类型
StreamMessage:Java原始值的数据流对象MapMessage:一套名称-值对TextMessage:一个字符串对象 ObjectMessage:一个序列化的 Java对象BytesMessage:一个字节数据流
ConnectionFactory
用于创建Connection对象的工厂,通常通过JNDI获取
Connection
连接对象是和JMS提供者通信的媒介
Destination
目标是受控对象。在JMS中表示一个队列或者一个主题。
点对点模型:Queue子接口
发布/订阅模型:Topic子接口
Session
用于创建消息的生产者、消费者和消息
MessageProducer
消息生产者,也叫做消息发送者
TopicPublisher子接口
MessageConsumer
消息消费者,也叫做消息接受者
TopicSubscriber子接口
开发步骤
1) 用JNDI 得到ConnectionFactory对象; 2) 用ConnectionFactory创建Connection 对象; 3) 用Connection对象创建一个或多个JMS Session;4) 用JNDI 得到目标队列或主题对象,即Destination对象;5) 用Session 和Destination 创建MessageProducer和MessageConsumer;6) 通知Connection 开始传递消息。
两种消息传递方式
PERSISTENT:持久化消息,将使用暂存后再转送的机理投递。 NON_PERSISTENT:非持久化消息,最多只能被投递一次。(默认)
分类
点对点模型(P2P)
消息队列Queue
消息生产者(发送者)MessageProducer
消息消费者(接收者)MessageConsumer
同步、异步(通过监听器MessageListener实现)
发布订阅模型(Pub/Sub)
主题Topic
主题发布者TopicPublisher
主题订阅者TopicSubscriber
框架
ActiveMQ
由Apache开发,实现了JMS规范,包括点对点模型和发布/订阅模型
RokectMQ
RabbitMQ
Kafka
命名服务 JNDI
Java Naming Directory Interface
事务API JTA
Java Transaction API
用于处理分布式事务
持久化API JPA
Java Persistence API
邮件服务
JavaMail
Spring JavaMailSender
服务器中间件
web服务器
Nginx
核心配置文件nginx.conf
常用命令
nginx -v:查看版本
nginx:启动nginx
nginx -s stop:停止nginx
nginx -s reload:重新加载nginx.conf配置文件,使修改生效
主要用途
处理静态资源
Nginx处理静态资源的能力很强,效率也很高
支持静态资源缓存,如图片、js、css等
反向代理
与正向代理相对
正向代理:内网通过代理服务器访问外网,如vpn 反向代理:外网通过代理服务器访问内网,可以保证内网安全性
负载均衡
由于Nginx抗并发能力强,为了减轻Tomcat服务器承受的压力,通常用作Tomcat服务器的负载均衡器
可定制化
可以通过编写Lua脚本进行功能扩展
Apache
应用服务器
Tomcat、Jetty
Servlet容器
底层原理:Socket通信(BIO/NIO)
JBoss、Weblogic、Websphere
开发框架
Spring
ConextLoaderListener监听器
是整个Spring应用启动的关键
Spring启动过程大致如下: 1、在Servlet容器启动后,会创建一个ServletContext(整个Web应用的上下文);2、由于ContextLoaderListener实现了ServletContextListener,因此会在ServletContext创建完成后,其中的contextInitialized方法会自动被调用;contextInitialized方法中将会通过ServletContext实例的getParameter()方法找到Spring配置文件位置,然后根据其中的内容为Spring创建一个根上下文(WebApplicationContext,即通常所说的IOC容器):3、将WebApplicationContext作为ServletContext的一个属性放进去,名称是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
IOC
WebApplicationContext:即Spring IOC容器,由容器创建和管理Bean,使用时直接从容器中获取
配置方式
XML配置文件
@Resource/@Autowired注解配置
Bean的作用域
在Spring4中有以下几个作用域(见ConfigurableBeanFactory和WebApplicationContext接口源码) (1)singleton:默认的作用域,仅为每个Bean对象创建一个实例。 (2)prototype:可以根据需要为每个Bean对象创建多个实例。 (3)request:为每个HTTP请求创建它自有的一个Bean实例,仅在Web相关的ApplicationContext中生效。(4)session:为每个HTTP会话创建一个实例,仅在Web相关的ApplicationContext中生效。 (5)global session:为每个全局的HTTP会话创建一个实例。一般仅在porlet上下文中使用生效。同时仅在Web相关的ApplicationContext中生效。 (6)application:为每个ServletContext创建一个实例。仅在Web相关的ApplicationContext中生效。
Bean的生命周期
依赖注入的几种方式
构造注入
属性注入setter
接口注入
FactoryBean与BeanFactory
AOP
动态代理
JDK动态代理(针对接口,代理类为其兄弟类)
目标对象实现了若干接口
CGLIB动态代理(针对类,代理类为其子类)
目标对象没有实现接口
拦截器
事务管理
五大事务隔离级别
七大事务传播特性
事务管理器
核心接口是PlatformTransactionManager
org.springframework.jdbc.datasource.DataSourceTransactionManager:主要用于jdbc和mybatis数据源
org.springframework.orm.hibernate3.HibernateTransactionManager:主要用于Hibernate数据源
编程式事务
通过使用TransactionTemplate或者PlatformTransactionManager相关事务API来实现事务管理
声明式事务
XML配置标签
@Transactional注解
异常回滚
只会回滚RuntimeException异常
定时任务调度Spring Task
XML配置标签
@Scheduled注解配置
异步任务
XML配置标签
@Async注解配置
缓存支持Spring Cache
Spring 5 新特性
兼容 Java 9
最低要求 Java 8,因为使用了Java 8的一些新特性
响应式编程 WebFlux
即Spring-WebFlux模块,以 Reactor 库为基础,包含了对响应式 HTTP、服务器推送事件(Server-Sent Event)和 WebSocket 的客户端和服务器端的支持。
基于Java注解编程模型
使用方式与Spring MVC基本一样,只是使用的类型不是普通的对象,而是响应式编程中的Mono、Flux对象
Mono对象
表示单个对象,如User,用法与Optional类似
Flux对象
表示一系列的对象,类似于List
基于函数式编程模型
服务器端
HandlerFunction 函数式接口
Mono handle(ServerRequest request)方法用于处理客户端请求
RouterFunction 路由接口
Mono> route(ServerRequest request) 方法用于选择处理对应请求的HandlerFunction对象并返回
只需要使用RouterFunctions.route 方法创建 RouterFunction 类型的 bean,就会被自动注册来处理请求并调用相应的 HandlerFunction
客户端
使用 WebClient.create方法创建客户端发起HTTP请求调用REST API 和 SSE(服务端推送)服务
使用 WebSocketClient 类的API 访问WebSocket
测试
使用 WebTestClient 类进行测试
Spring Boot
用于快速构建及开发Spring应用,可以看成是Spring框架的简化版
”约定优于配置“思想
使用约定的默认配置,减少配置文件编写
配置文件
properties文件
application.properties
yml文件
application.yml
基于注解配置
Spring原有的@Controller、@Service、@Component、@Bean、@Configuration等注解
properties配置文件读取
Spring原有的@Value
与@PropertySource配合使用读取指定配置属性值
缺点: 1、只支持单个属性值读取2、只支持简单数据类型,如String、Boolean及数值类型
Spring Boot新增的@ConfigurationProperties
可以指定配置属性前缀,自动绑定属性值
比@Value功能更强大 1、支持实体属性自动封装;2、支持复杂数据类型的解析,比如数组、列表List
starter简化Maven配置
预先定义好需要的依赖并打包,需要时直接引入即可
所有Spring Boot项目公共的父依赖
spring-boot-starter-parent模块
自动配置AutoConfigurer
为项目添加默认配置
application.properties/application.yml文件中定义的配置会覆盖默认配置
自带的spring-boot-autoconfigure模块
内置Servlet容器
Tomcat、Jetty、Undertow等
ORM框架
Hibernate
HQL
可以看成是面向对象的SQL,它将原生SQL中的表名和列名分别用全类名和属性名替换了
对象的三种状态
transient(瞬时状态),persistent(持久化状态)以及detached(离线状态)
主要组成
Session:提供用户对数据库操作的API
SessionFactory:创建Session对象的工厂
Query:负责执行数据库查询操作,支持SQL、HQL两种方式
缓存机制
一级缓存
二级缓存
Criteria(QBC)
多表映射
注解
JPA提供的注解
javax.persistence包下:@Id,@Column,@Entity,@Table,@OneToMany,@ManyToOne等
Hibernate增加的注解
数据库方言Dialect
它是Hibernate数据库可移植性强的关键所在,不同的数据库使用不同的方言类进行处理,通常需要我们自己指定。 比如:Oracle10gDialect(Oracle数据库方言)、MySQL5Dialect(MySQL数据库方言)等
在方言类中包含了对不同类型数据库差异的处理,比如分页、常用函数的语法
HibernateTemplate
Spring对Hibernate的集成和封装,使用它可以很方便的进行数据库操作
HibernateTemplate的作用是保证session能够正确的打开和关闭,避免手工管理Session带来的问题。
使用 HibernateTemplate 时必须进行事务管理,否则将会报错
Mybatis
主要组成
Configuration MyBatis配置信息
配置方式
XML文件
注解
SqlSession 提供用户对数据库操作的API,完成增删改查
Executor 由SqlSession调用执行数据库操作
StatementHandler 对SQL语句进行操作
ParameterHandler 将用户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler 将JDBC返回的ResultSet结果集对象转换成List集合
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
动态SQL
通过标签的形式大大的减少了条件查询时拼接SQL的难度,提高了SQL的准确率
常用标签
if、where、foreach等
结果映射
resultMap
数据类型转换
插件机制
Interceptor接口
分页插件
缓存机制
一级缓存:Session级别的缓存,Executor对象会维护一个Cache缓存,默认开启
二级缓存:Application级别的缓存,可以看作是作用于整个应用的全局缓存。 一般通过自定义缓存Redis、Memcached等实现
MVC框架
Struts2
核心过滤器StrutsPrepareAndExecuteFilter
PrepareOperations
包括setEncodingAndLocale、createActionContext、findActionMapping等重要操作
ExecuteOperations
包括executeStaticResourceRequest、executeAction操作
ActionMapping
包含Action的基本信息,名称、命名空间、方法名、请求参数以及返回结果Result等信息
拦截器Interceptor
intercept(ActionInvocation invocation)方法用于在调用ActionInvocation.invoke方法前后执行其它操作
控制器Action
由ActionInvocation.invoke方法负责调用执行
值栈ValueStack
模型驱动ModelDriven
1、Action实现ModelDriven接口; 2、在Action中定义实体类属性,并通过getModel方法返回
OGNL(Object-Graph Navigation Language)
OgnlValueStack类
其中的数据分成了两部分: 1、root(栈结构,CompoundRoot,继承于ArrayList)2、context(map形式,OgnlContext)
OGNL表达式:#相当于调用ActionContext.getContext()方法、%用于、$引用OGNL表达式
ActionContext中的属性(和四大域对象类似): ①parameters请求参数、②request请求对象、③session对象、④application对象;⑤attr依次按照request->session->application范围查找属性,与pageContext.findAttribute()类似
struts2标签库
struts2标签统一使用s作为标签前缀,类似
分类
内置标签
常用的有:、、等
自定义标签
1、创建Component类,继承org.apache.struts2.components.Component类,并重写start()、end()方法 2、创建标签类,继承org.apache.struts2.views.jsp.ComponentTagSupport类,并重写getBean()方法和populateParams()方法3、在项目WEB-INF目录下创建tld文件(其中描述了标签的语法,如:标签有哪些属性,标签的属性是否支持表达式等内容)
国际化
文件上传
数据验证
Action中的input、validate方法
请求参数类型转换TypeConverter
SpringMVC
基本组成
DispatcherServlet
找到对应请求的HandlerMapping,将请求转发给对应的HandlerAdapter
处理器映射器HandlerMapping
保存请求的URL与Handler(可以是Controller或Servlet等)的对应关系
处理器适配器HandlerAdapter
调用对应的Handler进行处理,并返回ModelAndView对象给DispatcherServlet
控制器Controller
拦截器HandlerInterceptor
preHandle、postHandle、afterCompletion方法
HandlerExecutionChain
负责Handler执行前后的HandlerInterceptor的调用
模型视图ModelAndView、模型Model/ModelMap
视图解析器ViewResolver
将逻辑视图转换成物理视图
请求参数解析和封装
RequestMappingHandlerAdapter
HandlerMethodArgumentResolver接口
HandlerMethodArgumentResolverComposite类默认定义了26个不同的参数解析器
ServletModelAttributeMethodProcessor 两种情况: ①使用@ModelAttribute注解的类型;②自定义实体POJO:通过特定的DataBinder将请求参数绑定到为实体中的属性上;
其它类型的参数处理:如Map、ServletRequest、ServletResponse、Model等使用内置转换器自动转换
类型转换
Converter接口
自定义类型转换器:实现Converter接口,并重写convert方法
ConversionService接口
方法返回值处理
HandlerMethodReturnValueHandler接口
文件上传
配置 CommonsMultipartResolverr 文件上传解析器
MultipartFile对象作为方法参数接收
全局异常处理
实现HandlerExceptionResolver接口
使用@ControlerAdvice/@RestControllerAdvice注解
其它框架
日志框架
作用
用于Java应用日志记录,通常保存到文件中,方便调试跟踪系统运行情况及排查问题
分类
日志门面
Apache的 commons-logging
Spring等框架依赖其做日志记录
slf4j
slf4j-api-xxx.jar
jboss-logging
Hibernate依赖其做日志记录
桥接器(适配器)
slf4j-log4j:slf4j适配log4j
slf4j-logback:slf4j适配logback
slf4j-jdk14:slf4j适配JDK提供的日志框架(JUL)
具体实现
log4j
log4j2
logback
JUL(java.util.logging)
安全框架
Shiro
主要功能
权限控制
身份认证(登录)Authentication
权限验证(授权)Authorization
会话管理
数据加密
常用的加密算法
API
当前用户(不一定是人,比如爬虫程序)Subject
安全管理器SecurityManager,shiro的核心
SecurityUtils工具类
Realm,域,从中获取用户的角色、权限信息进行身份认证
Spring Security
定时任务框架
Quartz
Spring Task
工作流引擎
JBPM(Java Business Process Management)
Activiti
模板引擎
freemarker、velocity、thymeleaf、beetl(国产)
全文搜索框架
Apache Lucene
主要功能
创建及维护索引,提供全文检索服务。支持结果排序及关键字高亮
主要组成
索引保存目录Directory
FSDirectory:索引存储在磁盘
RAMDirectory:索引存储在内存
索引文档Document
Field:StringField只索引不分词,TextField既索引又分词
分词器Analyzer
对于索引内容进行分词
常用分词器
简单分词器SimpleAnalyzer
标准分词器StandardAnalyzer
中文分词器
SmartChineseAnalyser
IKAnalyzer
庖丁分词器PaodingAnalyzer
索引管理器IndexWriter
负责索引文档的创建、更新、删除
查询分析器QueryParser
构造搜索条件并分析
索引阅读器IndexReader
索引搜索器IndexSearcher
根据搜索条件返回匹配的结果
Compass
基于Lucene,ElasticSearch的前身
提供了Spring、Hibernate框架集成
ElasticSearch
基于Lucene,分布式的,适用于实时、大数据量的搜索场景
Apache Solr
基于Lucene,适用于常规搜索场景
利用Zookeeper进行分布式管理
Hibernate Search
集成了Hibernate、Lucene和ElasticSearch
网络编程框架
HTTP客户端
Apache HttpClient
OkHttp
网络IO框架
Netty
Mina
Hibernate-Validator 参数校验框架
Bean Validation规范的实现
项目构建工具
Maven
坐标
groupId、artifactId、version
仓库
依赖配置
引入依赖:dependencies、dependency节点
排除依赖:exclusions、exclusion节点
聚合与继承,分别是modules、parent节点
生命周期和命令
mvn clean、mvn test、mvn package、mvn install
Archetype
创建Maven项目的基本骨架
自定义Archetype
Maven镜像
阿里云公有镜像http://maven.aliyun.com/nexus/content/groups/public/
Maven私服
Nexus私服配置
Maven插件
Maven功能的扩展
自定义Maven插件
继承AbstractMojo类
Ant/Gradle
版本控制工具
SVN
Git
CI 持续集成工具
jenkins
常用工具
Google Guava
Optional类
避免空指针
MoreObjects工具类
作为java.util.Objects类的扩展
字符串操作,如split、join等操作
Spliter、Joiner类
函数式编程
Apache Commons
commons-beanutils包
用于处理JavaBean相关操作,最常见的就是属性复制。
如 BeanUtils.copyProperties()、ProperUtils.copyProperties()
commons-lang包
如:StringUtils
commons-io包
简化IO操作
如:IOUtils
commons-collections包
简化集合操作
如:CollectionUtils
commons-fileupload包
处理文件上传相关操作
Spring 中的工具类
StringUtils
字符串操作
WebUtils
处理Web相关操作
FileCopyUtils(文件复制)、ResourceUtils(读取文件)等
ObjectUtils
ReflectionUtils
简化反射操作
其它常用工具
lombok
通过注解简化Java代码编写,使代码看起来更简洁。可以自动生成类的getter、setter、toString、hashcode、equals、构造器等
常用注解
@Getter、@Setter
为属性自动生成getter、setter方法
@NoArgsConstructor
生成无参构造器
@AllArgsConstructor
生成包含所有属性的构造器
@Data
生成getter、setter、hashcode、equals、toString方法
其它功能注解
@Slf4j 注入log日志对象
@NonNull 非空检查
DDDD
Swagger
可以与Spring MVC集成为项目生成RESTful API文档,并且可以直接在页面测试
0 条评论
下一页