细说 Java 主流日志工具库
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。
在 Java 世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。
我们先来逐一了解一下主流日志工具。
日志框架java.util.logging (JUL)JDK1.4 开始,通过 java.util.logging 提供日志功能。
它能满足基本的日志需要,但是功能没有 Log4j 强大,而且使用范围也没有 Log4j 广泛。
Log4jLog4j 是 apache 的一个开源项目,创始人 Ceki Gulcu。
Log4j 应该说是 Java 领域资格最老,应用最广的日志工具。从诞生之日到现在一直广受业界欢迎。
Log4j 是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX 系统日志等。
Log4j 中有三个主要组成部分:
loggers - 负责捕获记录信息。
appenders - 负责发布日志信息,以不同的首选目的地。
layouts - 负责格式化不同风格的日志信息。 ...
细说 Java 主流工具包
apache.commons
commons-lang
commons-collections
common-io
guava
Reflections 快速入门引入 pom
12345<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version></dependency>
典型应用
123Reflections reflections = new Reflections("my.project");Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(SomeAnnotation.class);
使用基本上,使用 Reflections 首先使用 ...
JavaMail 快速入门简介邮件相关的标准厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:
SMTP(Simple Mail Transfer Protocol) :即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
POP3(Post Office Protocol - Version 3) :即邮局协议版本 3 ,用于接收电子邮件的标准协议。
IMAP(Internet Mail Access Protocol) :即 Internet 邮件访问协议。是 POP3 的替代协议。
这三种协议都有对应 SSL 加密传输的协议,分别是 SMTPS, POP3S和 IMAPS。
MIME(Multipurpose Internet Mail Extensions) :即多用途因特网邮件扩展标准。它不是邮件传输协议。但对传输内容的消息、附件及其它的内容定义了格式。
JavaMail 简介JavaMail 是由 Sun 发布的用来处理 email 的 API 。它并没有包含在 Java SE 中,而是作为 ...
Jsoup 快速入门简介jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 JQuery 的操作方法来取出和操作数据。
jsoup 工作的流程主要如下:
从一个 URL,文件或字符串中解析 HTML,并加载为一个 Document 对象。
使用 DOM 或 CSS 选择器来取出数据;
可操作 HTML 元素、属性、文本。
jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。
加载从 HTML 字符串加载一个文档使用静态 Jsoup.parse(String html) 方法或 Jsoup.parse(String html, String baseUri) 示例代码:
123String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML ...
Thumbnailator 快速入门简介Thumbnailator 是一个开源的 Java 项目,它提供了非常简单的 API 来对图片进行缩放、旋转以及加水印的处理。
有多简单呢?简单到一行代码就可以完成图片处理。形式如下:
1234Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat("jpg") .toFiles(Rename.PREFIX_DOT_THUMBNAIL);
当然,Thumbnailator 还有一些使用细节,下面我会一一道来。
核心 APIThumbnailsThumbnails 是使用 Thumbnailator 创建缩略图的主入口。
它提供了一组初始化 Thumbnails.Builder 的接口。
先看下这组接口的声明:
123456789101112// 可变长度参数列表public static Builder<File> of(String... files) ...
ZXing 快速入门简介ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码。目标是能够对 QR 编码、Data Matrix、UPC 的 1D 条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE 和 Android。
官网:ZXing github 仓库
实战本例演示如何在一个非 android 的 Java 项目中使用 ZXing 来生成、解析二维码图片。
安装maven 项目只需引入依赖:
12345678910<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version></dependency><dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</art ...
Jetty 快速入门Jetty 简介jetty 是什么?
jetty 是轻量级的 web 服务器和 servlet 引擎。
它的最大特点是:可以很方便的作为嵌入式服务器。
它是 eclipse 的一个开源项目。不用怀疑,就是你常用的那个 eclipse。
它是使用 Java 开发的,所以天然对 Java 支持良好。
官方网址
github 源码地址
什么是嵌入式服务器?
以 jetty 来说明,就是只要引入 jetty 的 jar 包,可以通过直接调用其 API 的方式来启动 web 服务。
用过 Tomcat、Resin 等服务器的朋友想必不会陌生那一套安装、配置、部署的流程吧,还是挺繁琐的。使用 jetty,就不需要这些过程了。
jetty 非常适用于项目的开发、测试,因为非常快捷。如果想用于生产环境,则需要谨慎考虑,它不一定能像成熟的 Tomcat、Resin 等服务器一样支持企业级 Java EE 的需要。
Jetty 的使用我觉得嵌入式启动方式的一个好处在于:可以直接运行项目,无需每次部署都得再配置服务器。
jetty 的嵌入式启动使用有两种方式:
API 方式
maven ...
Tomcat 优化Tomcat 启动优化如果 Tomcat 启动比较慢,可以考虑一些优化点
清理 Tomcat
清理不必要的 Web 应用:首先我们要做的是删除掉 webapps 文件夹下不需要的工程,一般是 host-manager、example、doc 等这些默认的工程,可能还有以前添加的但现在用不着的工程,最好把这些全都删除掉。
清理 XML 配置文件:Tomcat 在启动时会解析所有的 XML 配置文件,解析 XML 较为耗时,所以应该尽量保持配置文件的简洁。
清理 JAR 文件:JVM 的类加载器在加载类时,需要查找每一个 JAR 文件,去找到所需要的类。如果删除了不需要的 JAR 文件,查找的速度就会快一些。这里请注意:Web 应用中的 lib 目录下不应该出现 Servlet API 或者 Tomcat 自身的 JAR,这些 JAR 由 Tomcat 负责提供。
清理其他文件:及时清理日志,删除 logs 文件夹下不需要的日志文件。同样还有 work 文件夹下的 catalina 文件夹,它其实是 Tomcat 把 JSP 转换为 Class 文件的工作目录。有时候我们 ...
Tomcat 和 JettyWeb 容器 Tomcat 或 Jetty,作为重要的系统中间件,连接着浏览器和你的 Web 应用,并且支撑着 Web 程序的运行,可以说,弄懂了 Tomcat 和 Jetty 的原理,Java Web 开发对你来说就毫无秘密可言。
Web 容器早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。
随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让 HTTP 服务器调用服务端程序。
于是 Sun 公司推出了 Servlet 技术。你可以把 Servlet 简单理解为运行在服务端的 Java 小程序,但是 Servlet 没有 main 方法,不能独立运行,因此必须把它部署到 Servlet 容器中,由容器来实例化并调用 Servlet。
而 Tomcat 和 Jetty 就是一个 Servlet 容器。为了方便使用,它们也具有 HTTP 服务器的功能,因此Tomcat 或 ...
Tomcat 容器Tomcat 实现热部署和热加载
热加载的实现方式是 Web 容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类,在这个过程中不会清空 Session ,一般用在开发环境。
热部署原理类似,也是由后台线程定时检测 Web 应用的变化,但它会重新加载整个 Web 应用。这种方式会清空 Session,比热加载更加干净、彻底,一般用在生产环境。
Tomcat 通过开启后台线程,使得各个层次的容器组件都有机会完成一些周期性任务。Tomcat 是基于 ScheduledThreadPoolExecutor 实现周期性任务的:
12345bgFuture = exec.scheduleWithFixedDelay( new ContainerBackgroundProcessor(),// 要执行的 Runnable backgroundProcessorDelay, // 第一次执行延迟多久 backgroundProcessorDelay, // 之后每次执行间隔多久 ...
Tomcat 快速入门
🎁 版本说明
当前最新版本:Tomcat 8.5.24
环境要求:JDK7+
1. Tomcat 简介1.1. Tomcat 是什么Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为 Web 服务器的一些特有功能,如 Tomcat 管理和控制平台、安全域管理和 Tomcat 阀等。
由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP web server 不是捆绑在一起的。Tomcat 包含了一个配置管理工具,也可以通过编辑 XML 格式的配置文件来进行配置。
1.2. Tomcat 重要目录
/bin - Tomcat 脚本存放目录(如启动、关闭脚本)。 *.sh 文件用于 Unix 系统; *.bat 文件用于 Windows 系统。
/conf - Tomcat 配置 ...