自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 什么是 Java ?

如果有人问你“什么是 Java ?”,你可能会做出这样的回答“Java 就是 Java 语言、Java API、Java 字节码以及 Java 虚拟机的总称。”好吧,这么说看起来也没什么错,不是吗?Java 一出现就举着“一次编码处处运行”的大旗,这也是 Java 超高兼容性的体现,拥有这个基石,Java 迅速占据市场,并击败了众多竞争者。但是,因为 Java 语言本身发展...

2014-06-15 12:32:09 124

[NIO.2] 第四十一篇 随机访问文件概述

我们已经看过很多顺序读取文件的例子,文件除了可以被顺序读取,还可以被随机读取(random access files 简称 RAF)。通常来说,因为编码简单顺序读取文件更常用。随机读取文件更加灵活,并且读取数据更快。使用 RAF 可以打开文件,跳转到文件中的某个位置,并在这个位置上进行读写操作。在打开 RAF 后,可以使用记录号来自由地读写文件,如果你知道文件的总记录号,你还可以在文件末尾...

2014-04-29 14:51:25 219

[NIO.2] 第四十篇 监控目录树

现在,我们编写一个应用来监控 C:\rafaelnadal 目录。此外,如果在这个目录中发生了 CREATE 事件创建了一个新目录,那么这个目录将会被立即注册,和 C:\rafaelnadal 中一开始就存在的目录一样。首先,创建监控服务:[code="java"]private WatchService watchService = FileSystems.getDefault(...

2014-04-29 14:49:40 206

[NIO.2] 第三十九篇 实现文件监控服务

要实现监控服务需要有几个步骤。在本文中,你将会看到实现监控服务的主要步骤,并且开发监控目录创建、删除和修改的应用。每个步骤都会有代码和实例进行讲解,文章的最后将会把所有步骤合在一起,编写一个完整的应用。[b][size=x-large]创建 WatchService[/size][/b]最开始,需要创建 WatchService 用于监控文件系统。可以调用 FileSystem.n...

2014-04-26 16:13:20 173

[Java EE 7] JSF 中的 HTTP GET 请求

JSF 支持将 URL 参数映射到 EL。也支持生成 GET 友好的 URL 链接。视图参数可用于将 URL 中的参数映射到 EL。要做到这一点只需添加类似下面的代码:[code="java"] [/code]假设我们通过 index.xhtml?name=jack 访问页面:[list][*] GET 请求参数名为 name。[*] ...

2014-04-21 17:26:34 228

[NIO.2] 第三十八篇 监控服务 API

Java 7 NIO.2 引入了线程安全的监控服务,用于监控对象的改变和事件。大多数时候,用于监控目录和文件内容的改变,例如对目录中的文件进行增删改的操作。你可能已经见过这样的情况。当你在使用文本编辑器编辑文件的时候,如果你在文本编辑器的外部改变了文件的内容,那么文本编辑器会察觉到这个改变,并及时通知你。这就是系统的文件改变通知机制。NIO.2 开始提供了监控服务 API 来支持这个功能。...

2014-04-21 14:13:55 86

[Java EE 7] JSF 中的 Ajax

JSF 支持页面的 Ajax 处理。可以支持局部页面处理和局部页面展示。JSF 中的 Ajax 通过下面两个途径:[list][*] 通过 JavaScript 编码实现[*] 通过 f:ajax 以声明方式实现[/list]先看看使用 JavaScript 如何实现。 jsf.js 是在 javax.faces 库中的预定义资源。这个 JS 包含了...

2014-04-19 21:07:59 146

[NIO.2] 第三十七篇 编写一个文件移动应用

移动文件分为两个步骤,先拷贝文件,再删除源文件。下面的代码将会把 C:\rafaelnadal 目录中的内容移动到 C:\ATP\players\rafaelnafal 目录中。在移动前,要确保 C:\ATP\players\rafaelnafal 目录已经存在。在这个例子中,目录的移动使用了 Files.copy() 和 Files.delete() 方法,文件的移动使用了 Files...

2014-04-18 14:20:14 111

[NIO.2] 第三十六篇 编写一个文件拷贝应用

拷贝目录树的时候,需要为文件和目录递归调用 Files.copy() 方法。在开始编写代码之前,要注意以下几点:[list][*]在拷贝目录中的文件之前,必须先拷贝目录本身。不管目录中是否有文件,拷贝目录后的结果都将是空目录。这个任务必须在 preVisitDirectory() 中完成。[*]拷贝文件最好在 visitFile() 方法中进行。[*]在拷贝文件或目录的过程中,...

2014-04-18 14:18:16 87

[NIO.2] 第三十五篇 编写一个文件删除应用

如果要删除单个文件,可以直接调用 delete() 或 deleteIfExists() 方法,它们会将文件从文件系统中删除。如果要删除目录树,则是通过 FileVisitor 的具体实现来递归调用 delete() 或 deleteIfExists() 方法。在开始之前,要注意以下原则:[list][*] 在删除目录之前,要确保目录是空的。[*] 删除文件最好在 v...

2014-04-17 18:22:20 75

[泛型] 使用泛型的注意事项

在 Java 中有效地使用泛型,一定要注意以下限制:[b][size=x-large]不能使用原始数据类型实例化泛型类[/size][/b]考虑下面的泛型类:[code="java"]class Pair { private K key; private V value; public Pair(K key, V value) { ...

2014-04-16 19:03:01 259

[Java EE 7] JSF 请求的生命周期

JSF 定义了标准的请求处理声明周期。开发人员了解相关知识可以帮助理解例如验证、数据转换、事件处理等操作会在哪个阶段被执行。JSF 页面通过 UI 组件树进行展示,称作视图(view)。当客户端发起页面请求后,生命周期开始。在整个生命周期过程中,JSF 需要根据之前保存的状态来生成页面。当客户端提交页面的时候,JSF 必须执行几个任务,比如验证视图组件中的输入数据、转换客户端输入的数据为服...

2014-04-15 14:06:02 110

[NIO.2] 第三十四篇 编写一个文件搜索应用

大多数操作系统都提供了独立的工具用于文件搜索(例如,Linux 上的 find 命令,Windows 上的文件搜索工具)。从简单到高级,这些工具提供的搜索模式都大同小异:用户提供搜索条件,等待搜索工具返回搜索结果。如果你想自己编写搜索程序,那么可以利用 FileVisitor 接口。你可以编写按文件名、按文件扩展名、按区域匹配、按文件内容来搜索文件的功能。利用 FileVisitor 来编...

2014-04-14 15:39:12 114

[NIO.2] 第三十三篇 遍历目录树

一旦你创建了遍历机制(实现 FileVisitor 接口或继承 SimpleFileVisitor 类),那么就可以调用 Files.walkFileTree() 方法遍历目录树。首先我们定义遍历机制:[code="java"]class ListTree extends SimpleFileVisitor { @Override public FileVisitR...

2014-04-14 15:35:02 149

[Java EE 7] JSF Composite 组件

文章来源:[url]http://www.aptusource.org/2014/04/java-ee-7-jsf-composite-components/[/url]利用 Facelets 和资源处理的特性,JSF 定义了 Composite 组件,它是一个使用 Facelets 标签文件定义的组件,组件中可能包含了一组 JSF 组件。将这个定义 Composite 组件的 .xhtm...

2014-04-13 22:21:48 249

[NIO.2] 第三十二篇 SimpleFileVisitor 类

要实现 FileVisitor 接口就要实现接口上的所有方法,但是你有可能只需要实现其中的一两个方法,因此这对于你来说会显得很麻烦。在这种情况下,你可以继承 SimpleFileVisitor 类,它是 FileVisitor 接口的一个实现。这样,你就仅仅只需要覆盖你需要的方法即可。例如,你可能需要遍历目录树并打印所有目录的名字。要实现这个目标,只需要覆盖 postVisitDirec...

2014-04-12 15:57:51 686

[NIO.2] 第三十一篇 FileVisitor 接口

FileVisitor 接口提供了递归遍历文件树的支持。这个接口上的方法表示了遍历过程中的关键过程,允许你在文件被访问、目录将被访问、目录已被访问、发生错误等等过程上进行控制;换句话说,这个接口在文件被访问前、访问中和访问后,以及产生错误的时候都有相应的钩子程序进行处理。调用 FileVisitor 中的方法,会返回访问结果 FileVisitResult 对象值,用于决定当前操作完成后接...

2014-04-12 15:53:54 277

[NIO.2] 第三十篇 递归操作简述

你可能知道,在编程中使用递归技术一直有争议,但是它的确简化了一些编程任务。简单来说,递归就是应用程序调用自身的过程。比如计算阶乘,计算费氏数列等都是非常著名的可用递归方式来完成的任务。下面看看一个计算阶乘(n!=1*2*3*4...*n)的例子,注意看程序如何调用自身:[code="java"]/** * Calculate the factorial of n (n! = 1 *...

2014-04-12 15:46:27 94

[Java EE 7] JSF 资源处理

JSF 提供了标准的方式来处理资源,比如:图片,CSS,JavaScript 文件等。这些资源可以在组件的 rendered 属性中使用。资源可以放在 web 工程的 /resources 目录下,也可以放到 classpath 的 /META-INF/resources 目录下。资源可以被本地化、版本化、集成化到 jar 包中。资源可以被 EL 引用:[code="jsf...

2014-04-11 20:09:06 82

[NIO.2] 第二十九篇 删除、复制、移动目录和文件

删除、拷贝和移动操作是最常见的文件操作。NIO.2 提供了独立的方法来支持这些操作。它们中的大部分都来自 Files 类。[b][size=x-large]删除文件和目录[/size][/b]NIO.2 提供了两个方法来删除文件和目录,分别是 Files.delete() 和 Files.deleteIfExits()。这两个方法都接受一个 Path 类型的参数用于指定删除对象。...

2014-04-10 16:28:18 153

[NIO.2] 第二十八篇 创建临时目录和文件

临时目录是用于存储临时文件的目录。临时目录的位置依赖操作系统。在 Windows 中,临时目录通过 TEMP 环境变量定义,通常位置是 C:\Temp、%Windows%\Temp,或者根据每个用户放到 Local Settings\Temp。在 Linux/Unix 中,全局临时目录在 /tmp 和 /var/tmp。[b][size=x-large]创建临时目录[/size][/b...

2014-04-09 13:59:37 397

[Java EE 7] JSF Facelets 快速入门

Facelets 是 JSF 的视图描述语言,用于取代 JSP,现在在 JSF 中支持 JSP 视图仅仅是为了向后兼容。在 JSF 2 中引入的新特性,例如 composit 组件和 Ajax,都只能使用 facelets。Fecelets 的主要特性还包括强大的模板系统、可重用和易于开发、更好的错误报告(包括行标)、和设计师友好的架构。Facelets 页面使用 XHTML 1....

2014-04-08 14:49:27 109

[NIO.2] 第二十七篇 新建、读取和写出文件

对文件来说,可能最常用的操作就是创建、读取和写出。NIO.2 提供了丰富的方法来完成这些任务。本文从简单的小文件操作开始,最后以缓冲和非缓冲流的操作结束。流分为输入流和输出流(可以输出到任何地方,比如硬盘或内存)。流支持不同类型的数据,比如字符串、字节、原始数据类型、本地化字符、对象等。使用非缓冲流,读和写的操作直接依赖底层文件系统,使用缓冲流,数据从内存的缓冲区读取,只有缓冲区空了之后才...

2014-04-07 20:09:30 152

[NIO.2] 第二十六篇 创建目录以及列出目录内容

[b][size=x-large]列出文件系统根目录[/size][/b]在 Java 6 中,获取根目录是通过 File 对象的数组。在 Java 7 中,NIO.2 提供了方法可以通过存放了 Path 对象的迭代器来获取。这个可迭代的对象通过下面的方式由 getRootDirectories() 方法获得:[code="java"]Iterable dirs = FileSys...

2014-04-07 12:14:17 123

[Java EE 7] Servlet 协议升级处理

HTTP 1.1 ([url=http://www.ietf.org/rfc/rfc2616.txt]RFC 2616[/url])14.42 节定义了 HTTP 升级机制,允许你从 HTTP 1.1 过渡到其它兼容的协议。应用层的通信完全取决于升级后选择的协议。客户端和服务端完成协议升级后,后续请求都将使用新协议。典型的例子是如何将 HTTP 协议升级到 WebSocket,这在 [url=ht...

2014-04-06 18:07:08 267

[Java EE 7] Servlet 处理 multipart 请求

可以在 servlet 上添加 @MultipartConfig 用于处理 multipart/form-data 类型的数据。然后调用 HttpServletRequest.getParts 和 .getPart 来获取数据:[code="java"]@WebServlet(urlPatterns = {"/FileUploadServlet"})@MultipartConfig(l...

2014-04-06 18:03:01 445

[Java EE 7] Servlet 错误处理

如果在 servlet 中返回错误码或者抛出异常,我们可以用更友好的方式在客户端展示。通过在 web.xml 文件中添加 标签,可以定义发生指定错误码时,应该跳转到哪个页面:[code="xml"] 404 /error-404.jsp[/code]上面的代码表示,如果没访问到资源,返回 404 错误后会跳转到 error-404.jsp 页面。如果需要配置其...

2014-04-05 22:24:39 87

[NIO.2] 第二十五篇 文件及目录的校验

在对文件或目录进行操作之前,可以先调用 Files 类上的一系列 isXXX 方法来对文件或目录进行校验。对文件先进行校验再操作可以避免产生一些不必要的异常。例如,可以先校验文件是否存在,再做移动或删除的操作。或者先校验文件是否可读写,再对文件做读写操作。[b][size=x-large]检查文件或目录是否存在[/size][/b]无论真实文件系统中是否真的存在文件或目录,都可以创...

2014-04-05 16:26:23 434

[Java EE 7] Servlet 资源打包

在 web 工程中,可以使用 ServletContext.getResource 或 .getResourceAsStream 来获取资源。资源路径由 “/” 开始,这个路径是个相对路径,对应 Web 工程的根目录,或 WEB-INF/lib 中 jar 包的 META-INF/resources 目录:[code="java"]myApplication.war WEB-INF...

2014-04-04 22:51:33 95

[Java EE 7] Servlet 安全机制

一般说来,servlet 会部署到 internet 上,因此需要一些安全性的考虑。你可以制定 servlet 的安全模式,例如角色、访问控制、鉴权等。这些都可以用 annotation 或 web.xml 进行配置。@ServletSecurity 定义了安全约束,它可以添加在 servlet 实现类上,这样对 servlet 中的所有方法都生效,也可以单独添加在某个 doXXX 方法上...

2014-04-04 17:30:20 152

[Java EE 7] Web Fragments

web fragment 文件可以是一部分或者全部的 web.xml 文件,它放在工程或者 jar 包的 META-INF 文件夹下。Web 容器将会自动加载全部的 web fragment 文件,而不需要开发者参与。它可以定义几乎全部 web.xml 文件可以定义的内容。但它的根元素是 web-fragment,并且文件名必须是 web-fragment.xml。有了 web fragm...

2014-04-03 21:13:44 125

[NIO.2] 第二十四篇 定位链接所指向的目标文件位置

调用 Files.readSymbolicLink() 方法可以返回链接所指向的目标文件的 Path 对象。这个方法接受一个 Path 类型的参数,这个参数必须是一个链接,否则会抛出 NotLinkException 异常。调用 Files.isSameFile() 方法可以判断链接和文件是否指向同一文件。下面的例子中,链接为 rafael.nadal.6,目标文件是 C:\raf...

2014-04-03 18:30:59 129

[NIO.2] 第二十三篇 检验软链接

Path 对象可能表示文件或链接。如果 Path 对象指向软链接,可以调用 Files.isSymbolicLink() 方法来进行判断,这个方法接收一个 Path 类型的参数,并返回 boolean 值。下面的代码创建了一个名为 rafael.nadal.5 的软链接,并指向 C:\rafaelnadal\photos\rafa_winner.jpg 文件,随后校验了 Path 对象。[...

2014-04-03 12:12:51 334

[NIO.2] 第二十二篇 创建硬链接

可以调用 createLink() 方法创建硬链接,它将会创建已存在文件的硬链接。这个方法返回新链接的 Path 对象,你可以使用这个 Path 对象来访问文件。如果你的文件系统不支持硬链接,那么将会抛出 UnsupportedOperationException 异常。另外,要记住,硬链接只能为已存在的文件创建。下面的代码演示了如何创建一个硬链接,名为 rafael.nadal....

2014-04-03 00:11:25 127

[NIO.2] 第二十一篇 创建软链接

在 NIO.2 中,创建软链接非常简单,只需要调用 Files.createSymbolicLink() 方法即可。这个方法需要传入软链接和目标文件的 Path 对象,并且可以传入一组文件属性,返回软链接的 Path 对象。如果你的文件系统不支持软链接,那么将会抛出 UnsupportedOperationException 异常。记住,目标文件可以使用绝对路径也可以使用相对路径来定义,并...

2014-04-02 18:35:38 223

[Java EE 7] Servlet 非阻塞 I/O

Servlet 3.0 虽然支持异步请求处理,但却只允许使用传统 I/O,这会限制应用程序的可扩展性。在普通的应用程序中,ServletInputStream 是在 while 循环中进行读取:[code="java"]protected void doGet(HttpServletRequest request, HttpServletResponse response) th...

2014-04-02 16:26:14 209

[Java EE 7] Servlet 异步支持

服务器资源非常宝贵,因此需要节省开销。比如 servlet 需要等待数据库查询数据、等待生成报表、等待读取文件系统数据,等等。这些“长时间处理”将会完全地占用容器线程,于是,这些被占用的线程将无法再接收其它的请求,这对于珍贵的服务器资源来说,并没有做到最佳优化。这些需要“长时间处理”的地方我们可以使用异步处理来进行优化,servlet 接收到请求后,开启新的线程来进行长时间处理,并将容器线...

2014-04-01 16:59:31 97

[Java EE 7] 事件监听器

事件监听器提供了 ServletContext、HttpSession 和 ServletRequest 对象生命周期的回掉事件。事件监听器类需要实现接口,用于接收这些对象状态发生改变时所发出的通知。每个监听器都可以通过 @WebListener、或 web.xml、 或 ServletContext.addListener 方法来进行注册。同一个事件,可能注册了多个监听...

2014-04-01 15:51:25 137

[NIO.2] 第二十篇 使用命令行创建链接

Windows 用户可以通过命令行的 mklink 命令来创建软链接或硬链接。这个命令有很多选项可用,部分选项列举如下:[list][*] /D 创建目录的软链接,默认创建的是文件软链接。[*] /H 创建硬链接。[*] /J 创建目录节点(Junction)。[*] Link 定义新的符号链接名。[*]...

2014-03-31 21:21:33 85

[Java EE 7] Servlet Filter 简介

Filter 可以用来更改请求和响应的数据。有一点非常重要的就是,Filter 自己不会产生响应,它只能更改和调整请求和响应数据。Filter 最普遍的用途是用户鉴权、日志、数据压缩、数据转码等。Filter 和 Servlet 一起打包部署,并作用于动态或静态的内容。可以使用 URL pattern 来将 filter 关联到一个 servlet、或者关联到一组 servlet,或者关联...

2014-03-31 20:49:26 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除