Java教程 第29页 JSF教程 – JSF Facelets模板示例 以下代码显示了如何使用JSF Facelets标签创建模板。 JSF应用程序中的模板定义了公共接口布局和样式。 例如,我们可以创建一个页面模板,其中有横幅,标题和页脚中的版权信息。 然后我们可以重用模板来创建页面。 JSF有以下facelets标签来创建模板布局。 标签 描述 ui:insert 定义要放置在模板中的内容。ui:define标签可以替换其内容。 ui:define 在模板中插入内容。 ui:include 将一个xhtml页面的内容包含到另一个xhtml页面中。 ui:composition 使用模板属性加载模板。它可以定义要插入xhtml页面的一组组件。 以下步骤显示如何创建模板。 创建头部文件:header.xhtml如下使用ui:composition标记。 <ui:composition> <h1>Default Header</h1> </ui:composition> 创建页脚文件:footer.xhtml作为页脚 <ui:composition> <h1>Default Footer</h1> </ui:composition> 创建内容文件:contents.xhtml定义内容部分的默认内容。 <ui:composition> <h1>Default Contents</h1> </ui:composition> 创建模板:common.xhtml通过使用ui:insert和ui:include标记在模板文件中包含页眉/页脚和内容文件。在ui:insert标记中命名每个部分。 ui:insert标签的name属性将用于替换相应section的内容。 <h:body> <ui:insert name="header" > <ui:include src="header.xhtml" /> </ui:insert> <ui:insert name="content" > <ui:include src="contents.xhtml" /> </ui:insert> <ui:insert name="footer" > <ui:include src="footer.xhtml" /> </ui:insert> </h:body> 以下代码显示如何使用带默认内容的模板创建home.xhtml <h:body> <ui:composition template="common.xhtml"> </h:body> 我们也可以结合模板和其他标签来创建一个新的页面。使用ui:define标记来覆盖默认值。 <h:body> <ui:composition template="templates/common.xhtml"> <ui:define name="content"> <h:link value="Page 1" outcome="page1" /> <h:link value="Page 2" outcome="page2" /> </ui:define> </ui:composition> </h:body> 例子 以下代码来自commonLayout.xhtml。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" > <h:head> <h:outputStylesheet name="common-style.css" library="css" /> </h:head> <h:body> <div id="page"> <div id="header"> <ui:insert name="header" > <ui:include src="/template/common/commonHeader.xhtml"...
2024-04-01
Java ByteArrayInputStream类 字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。创建字节数组输入流对象有以下几种方式。 接收字节数组作为参数创建: ByteArrayInputStream bArray = new ByteArrayInputStream(byte [] a); 另一种创建方式是接收一个字节数组,和两个整形变量 off、len,off表示第一个读取的字节,len表示读取字节的长度。 ByteArrayInputStream bArray = new ByteArrayInputStream(byte []a, int off, int len) 成功创建字节数组输入流对象后,可以参见以下列表中的方法,对流进行读操作或其他操作。 序号 方法描述 1 public int read() 从此输入流中读取下一个数据字节。 2 public int read(byte[] r, int off, int len) 将最多 len 个数据字节从此输入流读入字节数组。 3 public int available() 返回可不发生阻塞地从此输入流读取的字节数。 4 public void mark(int read) 设置流中的当前标记位置。 5 public long skip(long n) 从此输入流中跳过 n 个输入字节。 实例 下面的例子演示了ByteArrayInputStream 和 ByteArrayOutputStream的使用: import java.io.*; public class ByteStreamTest { public static void main(String args[])throws IOException { ByteArrayOutputStream bOutput = new ByteArrayOutputStream(12); while( bOutput.size()!= 10 ) { // 获取用户输入值 bOutput.write(System.in.read()); } byte b [] = bOutput.toByteArray(); System.out.println("Print the content"); for(int x= 0 ; x < b.length; x++) { // 打印字符 System.out.print((char)b[x] + " "); } System.out.println(" "); int...
2024-04-01
Java集合教程 – Java集合遍历 在Java Collections Framework中,不同类型的集合使用不同类型的数据结构以不同的方式存储它们的元素。 一些集合对它们的元素有排序,有些没有。集合框架提供了遍历集合的以下方法: 使用迭代器 使用for-each循环 使用forEach()方法 使用迭代器 集合提供了一个迭代器来遍历其所有元素。 迭代器可以对集合执行以下三个操作: 检查是否有尚未访问的元素。 访问集合中的下一个元素。 删除集合的最后访问元素。 Java中的迭代器是 Iterator< E> 接口的一个实例。 我们可以使用Collection接口中的iterator()方法获取集合的迭代器。 以下代码创建一个字符串列表,并获取列表的迭代器: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static void main(String[] args) { // Create a list of strings List<String> names = new ArrayList<>(); // Get an iterator for the list Iterator<String> nameIterator = names.iterator(); } } 迭代器< E> 接口包含以下方法: boolean hasNext() E next() default void remove() default void forEachRemaining(Consumer<? super E> action) 如果集合中有更多元素要迭代, hasNext()方法将返回true。否则,它返回false。 next()方法返回集合中的下一个元素。我们应该在调用 next()方法之前调用 hasNext()方法。如果没有, next()方法会抛出NoSuchElementException异常。 例子 通常, hasNext()和 next()方法在循环中一起使用。以下代码使用迭代器打印列表的所有元素: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static void main(String[] args) { // Create a list of strings List<String> names = new ArrayList<>(); names.add("A"); names.add("B"); names.add("C"); // Get...
2024-04-01
Java 实例 – 集合比较 Java 实例 以下实例将字符串转换为集合并使用 Collection 类的 Collection.min() 和 Collection.max() 来比较集合中的元素: /* author by w3cschool.cn Main.java */ import java.util.Collections; import java.util.Set; import java.util.TreeSet; class Main { public static void main(String[] args) { String[] coins = { "Penny", "nickel", "dime", "Quarter", "dollar" }; Set set = new TreeSet(); for (int i = 0; i < coins.length; i++) set.add(coins[i]); System.out.println(Collections.min(set)); System.out.println(Collections.min(set, String.CASE_INSENSITIVE_ORDER)); for(int i=0;i<=10;i++) System.out.print("-"); System.out.println(""); System.out.println(Collections.max(set)); System.out.println(Collections.max(set, String.CASE_INSENSITIVE_ORDER)); } } 以上代码运行输出结果为: Penny dime ----------- nickel Quarter Java 实例
2024-04-01
Java ByteArrayOutputStream类 字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。创建字节数组输出流对象有以下几种方式。 下面的构造方法创建一个32字节(默认大小)的缓冲区。 OutputStream bOut = new ByteArrayOutputStream(); 另一个构造方法创建一个大小为n字节的缓冲区。 OutputStream bOut = new ByteArrayOutputStream(int a) 成功创建字节数组输出流对象后,可以参见以下列表中的方法,对流进行写操作或其他操作。 序号 方法描述 1 public void reset() 将此字节数组输出流的 count 字段重置为零,从而丢弃输出流中目前已累积的所有数据输出。 2 public byte[] toByteArray() 创建一个新分配的字节数组。数组的大小和当前输出流的大小,内容是当前输出流的拷贝。 3 public String toString() 将缓冲区的内容转换为字符串,根据平台的默认字符编码将字节转换成字符。 4 public void write(int w) 将指定的字节写入此字节数组输出流。 5 public void write(byte []b, int of, int len) 将指定字节数组中从偏移量 off 开始的 len 个字节写入此字节数组输出流。 6 public void writeTo(OutputStream outSt) 将此字节数组输出流的全部内容写入到指定的输出流参数中。 实例 下面的例子演示了ByteArrayInputStream 和 ByteArrayOutputStream的使用: import java.io.*; public class ByteStreamTest { public static void main(String args[])throws IOException { ByteArrayOutputStream bOutput = new ByteArrayOutputStream(12); while( bOutput.size()!= 10 ) { // 获取用户输入 bOutput.write(System.in.read()); } byte b [] = bOutput.toByteArray(); System.out.println("Print the content"); for(int x= 0 ; x < b.length; x++) { // 打印字符 System.out.print((char)b[x] + " "); } System.out.println(" "); int...
2024-04-01
Java DataInputStream类 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。 下面的构造方法用来创建数据输入流对象。 DataInputStream dis = DataInputStream(InputStream in); 另一种创建方式是接收一个字节数组,和两个整形变量 off、len,off表示第一个读取的字节,len表示读取字节的长度。 序号 方法描述 1 public final int read(byte[] r, int off, int len)throws IOException 从所包含的输入流中将 len 个字节读入一个字节数组中。如果len为-1,则返回已读字节数。 2 Public final int read(byte [] b)throws IOException 从所包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。 3 public final Boolean readBooolean()throws IOException, public final byte readByte()throws IOException, public final short readShort()throws IOException public final Int readInt()throws IOException 从输入流中读取字节,返回输入流中两个字节作为对应的基本数据类型返回值。 4 public String readLine() throws IOException 从输入流中读取下一文本行。 实例 下面的例子演示了DataInputStream和DataOutputStream的使用,该例从文本文件test.txt中读取5行,并转换成大写字母,最后保存在另一个文件test1.txt中。 import java.io.*; public class Test{ public static void main(String args[])throws IOException{ DataInputStream d = new DataInputStream(new FileInputStream("test.txt")); DataOutputStream out = new DataOutputStream(new FileOutputStream("test1.txt")); String count; while((count = d.readLine()) != null){ String u = count.toUpperCase(); System.out.println(u); out.writeBytes(u + " ,"); } d.close(); out.close(); } } 以上实例编译运行结果如下: THIS IS TEST 1...
2024-04-01
Java FileReader类 FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过以下几种构造方法创建需要的对象。 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 FileReader(File file) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 FileReader(FileDescriptor fd) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 FileReader(String fileName) 创建FIleReader对象成功后,可以参照以下列表里的方法操作文件。 序号 文件描述 1 public int read() throws IOException 读取单个字符,返回一个int型变量代表读取到的字符 2 public int read(char [] c, int offset, int len) 读取字符到c数组,返回读取到字符的个数 实例 import java.io.*; public class FileRead{ public static void main(String args[])throws IOException{ File file = new File("Hello1.txt"); // 创建文件 file.createNewFile(); // creates a FileWriter Object FileWriter writer = new FileWriter(file); // 向文件写入内容 writer.write("This\n is\n an\n example\n"); writer.flush(); writer.close(); // 创建 FileReader 对象 FileReader fr = new FileReader(file); char [] a = new char[50]; fr.read(a); // 读取数组中的内容 for(char c : a) System.out.print(c); // 一个一个打印字符 fr.close(); } } 以上实例编译运行结果如下: This is an example
2024-04-01
Java FileWriter类 FileWriter类从OutputStreamWriter类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。 在给出 File 对象的情况下构造一个 FileWriter 对象。 FileWriter(File file) 在给出 File 对象的情况下构造一个 FileWriter 对象。 FileWriter(File file, boolean append) 构造与某个文件描述符相关联的 FileWriter 对象。 FileWriter(FileDescriptor fd) 在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。 FileWriter(String fileName, boolean append) 创建FileWriter对象成功后,可以参照以下列表里的方法操作文件。 序号 方法描述 1 public void write(int c) throws IOException 写入单个字符c。 2 public void write(char [] c, int offset, int len) 写入字符数组中开始为offset长度为len的某一部分。 3 public void write(String s, int offset, int len) 写入字符串中开始为offset长度为len的某一部分。 实例 import java.io.*; public class FileRead{ public static void main(String args[])throws IOException{ File file = new File("Hello1.txt"); // 创建文件 file.createNewFile(); // creates a FileWriter Object FileWriter writer = new FileWriter(file); // 向文件写入内容 writer.write("This\n is\n an\n example\n"); writer.flush(); writer.close(); //创建 FileReader 对象 FileReader fr = new FileReader(file); char [] a = new char[50]; fr.read(a); // 从数组中读取内容...
2024-04-01
Java网络教程 – Java非阻塞套接字 使用非阻塞套接字通道,我们必须改变我们对执行顺序的思考方式。 服务器套接字通道 要创建选择器对象,请调用其open()静态方法。 Selector selector = Selector.open(); ServerSocketChannel用于监听来自客户端的新连接请求。 调用其open()静态方法来创建一个ServerSocketChannel。 ServerSocketChannel ssChannel = ServerSocketChannel.open(); 默认情况下,服务器套接字通道或套接字通道是阻塞通道。要使其成为非阻塞通道,请调用以下方法。 ssChannel.configureBlocking(false); 选择器 服务器套接字必须向选择器注册才能执行某些操作。 有四种操作,我们可以用选择器注册一个通道。 使用SelectionKey.OP_CONNECT连接操作,可以在客户端为SocketChannel注册。选择器将通知有关连接操作进度。 使用SelectionKey.OP_ACCEPT接受操作,可以在服务器上为ServerSocketChannel注册。当客户端请求新连接到达时,选择器将通知。 使用SelectionKey.OP_READ读取操作,可以在客户端和服务器上为SocketChannel注册。选择器将在通道准备好读取某些数据时通知。 使用SelectionKey.OP_WRITE进行写操作,可以在客户端和服务器上为SocketChannel注册。选择器将在通道准备好写入某些数据时通知。 例子 以下代码显示如何创建非阻塞套接字通道回显服务器程序。 import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set; public class Main { public static void main(String[] args) throws Exception { InetAddress hostIPAddress = InetAddress.getByName("localhost"); int port = 19000; Selector selector = Selector.open(); ServerSocketChannel ssChannel = ServerSocketChannel.open(); ssChannel.configureBlocking(false); ssChannel.socket().bind(new InetSocketAddress(hostIPAddress, port)); ssChannel.register(selector, SelectionKey.OP_ACCEPT); while (true) { if (selector.select() <= 0) { continue; } processReadySet(selector.selectedKeys()); } } public static void processReadySet(Set readySet) throws Exception { Iterator iterator = readySet.iterator(); while (iterator.hasNext()) { SelectionKey key = (SelectionKey) iterator.next(); iterator.remove(); if (key.isAcceptable()) { ServerSocketChannel ssChannel = (ServerSocketChannel)...
2024-04-01
Java File类 Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。 File(File parent, String child); 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。 File(String pathname) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 File(String parent, String child) 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。 File(URI uri) 创建File对象成功后,可以使用以下列表中的方法操作文件。 序号 方法描述 1 public String getName() 返回由此抽象路径名表示的文件或目录的名称。 2 public String getParent()、 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。 3 public File getParentFile() 返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回 null。 4 public String getPath() 将此抽象路径名转换为一个路径名字符串。 5 public boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。 6 public String getAbsolutePath() 返回抽象路径名的绝对路径名字符串。 7 public boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。 8 public boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。 9 public boolean exists() 测试此抽象路径名表示的文件或目录是否存在。 10 public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。 11 public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 12 public long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。 13 public long length() 返回由此抽象路径名表示的文件的长度。 14 public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。 15 public boolean delete() 删除此抽象路径名表示的文件或目录。 16 public void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。...
2024-04-01