- 浏览: 141421 次
- 性别:
- 来自: 深圳
最新评论
-
freesea:
不错,还没注意java 7已经增加了这么多类了
[NIO.2] 第十篇 NIO.2 中的文件属性 -
SpringJava:
有个问题,想请教一下楼主:在代码中经常看到try catch语 ...
[NIO.2] 第二十九篇 删除、复制、移动目录和文件 -
xiaohu7924:
高
什么是 Java ? -
jiiming:
这种方法可以借鉴
[Java EE 7] Servlet 异步支持 -
cucaracha:
jahu 写道有中文文档没有啊。请留意我的博客:http:// ...
Java EE 7 技术一览
文章列表
要实现 FileVisitor 接口就要实现接口上的所有方法,但是你有可能只需要实现其中的一两个方法,因此这对于你来说会显得很麻烦。在这种情况下,你可以继承 SimpleFileVisitor 类,它是 FileVisitor 接口的一个实现。这样,你就仅仅只需要覆盖你需要的方法即可。
例如,你可能需要遍历目录树并打印所有目录的名字。要实现这个目标,只需要覆盖 postVisitDirectory() 和 visitFileFailed() 方法,参考代码如下:
class ListTree extends SimpleFileVisitor<Path> {
@Ov ...
FileVisitor 接口提供了递归遍历文件树的支持。这个接口上的方法表示了遍历过程中的关键过程,允许你在文件被访问、目录将被访问、目录已被访问、发生错误等等过程上进行控制;换句话说,这个接口在文件被访问前、访问中和访问后,以及产生错误的时候都有相应的钩子程序进行处理。
调用 FileVisitor 中的方法,会返回访问结果 FileVisitResult 对象值,用于决定当前操作完成后接下来该如何处理。FileVisitResult 的标准返回值存放到 FileVisitResult 枚举类型中:
FileVisitResult.CONTINUE:这个访问结果表示当前的遍历过程 ...
你可能知道,在编程中使用递归技术一直有争议,但是它的确简化了一些编程任务。简单来说,递归就是应用程序调用自身的过程。比如计算阶乘,计算费氏数列等都是非常著名的可用递归方式来完成的任务。下面看看一个计算阶乘(n!=1*2*3*4...*n)的例子,注意看程序如何调用自身:
/**
* Calculate the factorial of n (n! = 1 * 2 * 3 * … * n).
*
* @param n the number to calculate the factorial of.
* @return n! - the factorial of ...
JSF 提供了标准的方式来处理资源,比如:图片,CSS,JavaScript 文件等。这些资源可以在组件的 rendered 属性中使用。
资源可以放在 web 工程的 /resources 目录下,也可以放到 classpath 的 /META-INF/resources 目录下。资源可以被本地化、版本化、集成化到 jar 包中。
资源可以被 EL 引用:
[url=#{resource['header.jpg']}]click here[/url]
在这个例子中 header.jpg 放在标准的 resources 目录下。
假如资源放到了 corp 目录下,那么需要使用 libr ...
删除、拷贝和移动操作是最常见的文件操作。NIO.2 提供了独立的方法来支持这些操作。它们中的大部分都来自 Files 类。
删除文件和目录
NIO.2 提供了两个方法来删除文件和目录,分别是 Files.delete() 和 Files.deleteIfExits()。这两个方法都接受一个 Path 类型的参数用于指定删除对象。不同的是,Files.delete() 的返回值是 void,而 Files.deleteIfExits() 的返回值是 boolean。
Files.delete() 方法试图删除传入的 Path 对象,如果删除失败,则有可能抛出下面的异常:NoSuchFile ...
临时目录是用于存储临时文件的目录。临时目录的位置依赖操作系统。在 Windows 中,临时目录通过 TEMP 环境变量定义,通常位置是 C:\Temp、%Windows%\Temp,或者根据每个用户放到 Local Settings\Temp。在 Linux/Unix 中,全局临时目录在 /tmp 和 /var/tmp。
创建临时目录
NIO.2 提供了 createTempDirectory() 方法用于创建临时目录。这个方法会在系统默认临时目录位置创建临时目录。可以调用有两个参数的方法,第一个参数是临时目录命名前缀,可以为空,第二个可选参数是创建目录时设置的属性列表。下面的代码将创 ...
Facelets 是 JSF 的视图描述语言,用于取代 JSP,现在在 JSF 中支持 JSP 视图仅仅是为了向后兼容。在 JSF 2 中引入的新特性,例如 composit 组件和 Ajax,都只能使用 facelets。
Fecelets 的主要特性还包括强大的模板系统、可重用和易于开发、更好的错误报告(包括行标)、和设计师友好的架构。
Facelets 页面使用 XHTML 1.0 和层叠样式表(CSS)。XHTML 1.0 可以表示为遵守 XML 1.0 规则的 HTML 4 文档。Facelets 页面必须遵守 XHTML-1.0-Transitional DTD。
可以定义使 ...
对文件来说,可能最常用的操作就是创建、读取和写出。NIO.2 提供了丰富的方法来完成这些任务。本文从简单的小文件操作开始,最后以缓冲和非缓冲流的操作结束。
流分为输入流和输出流(可以输出到任何地方,比如硬盘或内存)。流支持不同类型的数据,比如字符串、字节、原始数据类型、本地化字符、对象等。使用非缓冲流,读和写的操作直接依赖底层文件系统,使用缓冲流,数据从内存的缓冲区读取,只有缓冲区空了之后才会调用本地方法进行读取。同样,缓冲输出流也是先将数据写出缓冲区,当缓冲区满了之后才会使用本地方法写出。如果没有等到缓冲区满就需要写出数据,那么可以使用 flush 方法。
使用标准参数 OpenOptio ...
列出文件系统根目录
在 Java 6 中,获取根目录是通过 File 对象的数组。在 Java 7 中,NIO.2 提供了方法可以通过存放了 Path 对象的迭代器来获取。这个可迭代的对象通过下面的方式由 getRootDirectories() 方法获得:
Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
for (Path name : dirs) {
System.out.println(name);
}
在我的机器上打印出的结果如下:
C:\
D:\
...
HTTP 1.1 (RFC 2616)14.42 节定义了 HTTP 升级机制,允许你从 HTTP 1.1 过渡到其它兼容的协议。应用层的通信完全取决于升级后选择的协议。客户端和服务端完成协议升级后,后续请求都将使用新协议。典型的例子是如何将 HTTP 协议升级到 WebSocket,这在 RFC 6455 的 Opening Handshake 中有介绍。
Servlet 容器提供了协议升级机制,但容器本身没有包含关于新协议的辅助类,新协议处理都封装到 HttpUpgradeHandler 接口中进行。Servlet 容器和 HttpUpgradeHandler 之间的数据读写是通过字节流。 ...
可以在 servlet 上添加 @MultipartConfig 用于处理 multipart/form-data 类型的数据。然后调用 HttpServletRequest.getParts 和 .getPart 来获取数据:
@WebServlet(urlPatterns = {"/FileUploadServlet"})
@MultipartConfig(location="/tmp")
public class FileUploadServlet extends HttpServlet {
@Override
protect ...
如果在 servlet 中返回错误码或者抛出异常,我们可以用更友好的方式在客户端展示。通过在 web.xml 文件中添加 <error-page> 标签,可以定义发生指定错误码时,应该跳转到哪个页面:
<error-page>
<error-code>404</error-code>
<location>/error-404.jsp</location>
</error-page>
上面的代码表示,如果没访问到资源,返回 404 错误后会跳转到 error-404.jsp 页面。如果需要配 ...
在对文件或目录进行操作之前,可以先调用 Files 类上的一系列 isXXX 方法来对文件或目录进行校验。对文件先进行校验再操作可以避免产生一些不必要的异常。例如,可以先校验文件是否存在,再做移动或删除的操作。或者先校 ...
在 web 工程中,可以使用 ServletContext.getResource 或 .getResourceAsStream 来获取资源。资源路径由 “/” 开始,这个路径是个相对路径,对应 Web 工程的根目录,或 WEB-INF/lib 中 jar 包的 META-INF/resources 目录:
myApplication.war
WEB-INF
lib
library.jar
library.jar 有下面的包结构:
library.jar
MyClass1.class
MyClass2.class
stylesheets
...
一般说来,servlet 会部署到 internet 上,因此需要一些安全性的考虑。你可以制定 servlet 的安全模式,例如角色、访问控制、鉴权等。这些都可以用 annotation 或 web.xml 进行配置。
@ServletSecurity 定义了安全约束,它可以添加在 servlet 实现类上,这样对 servlet 中的所有方法都生效,也可以单独添加在某个 doXXX 方法上,这样只针对这个方法有效。容器会强制调整 doXXX 方法被指定角色的用户调用:
@WebServlet("/account")
@ServletSecurity(
value ...