10 2011 档案
摘要:JDBC是用于运行SQL的一种解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口进行实现,这样开发人员就无需接触底层数据库驱动程序的差异性。1.连接数据库 为了连接数据库系统,必须要有JDBC驱动程序,可以将驱动程序JAR包放在WEB应用的/WEB-INF/lib下。通常,要执行以下几个步骤: (1)加载驱动: 可以通过java.lang.Class类的forName(),动态加载驱动。try{ Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundException e) { System.out..
阅读全文
摘要:JSTL是标准规范,符合标准的web容器就可以使用JSTL。然而有些要求无法单靠JSTL的标签来完成,也许是要将既有的HTML元素封装加强,或者是为了与应用程序更紧密地结合。比如,希望有个标签,可以直接从应用程序所自定义的对象中取出信息,而不是通过属性来传递对象或信息。1.Tag File Tag File是最简单的自定义标签的方式。 编写一个扩展名为.tag的文件(MyTag.tag),并把它放在WEB-INF/tags下:<%@tag description="描述信息" pageEncoding="UTF-8"%><%@tagli
阅读全文
摘要:JSP提供了<jsp:xxx>开头的标准标签及EL,可用来减少JSP页面上的Scriptlet的使用,将请求相关与业务逻辑封装到Servlet或JavaBean中,网页上仅留下与页面显示相关的逻辑。但即使是这样,依然使网页设计与维护困难重重。我们可以使用JSTL来替换JSP中用来实现页面逻辑的Scriptlet让网页上使用与HTML类似的标签,使得设计变得简单。1.核心标签库 JSTL的标签种类很多,下面将主要介绍JSTL的核心标签库。要使用核心标签库必须在JSP上使用taglib指令定义前置名称以及uri引用。 <%@taglib prefix="c"
阅读全文
摘要:1.标准标签 JSP规范中提供了一些标准标签,所有容器都支持这些标签,它可以协助编写JSP时减少Scriptlet的使用。标准标签都以jsp:作为前置。后来提出的JSTL和EL在许多功能上可以代替标准标签,但在某些场合仍会见到这些标准标签的使用,有必要对它们有所认识。 <jsp:inlcude>和<jsp:forward> 如果想要在运行时依条件动态地调整想要包括的JSP,则可以使用<jsp:inlcude>标签。 <jsp:include page="add.jsp"> <jsp:param name="a&
阅读全文
摘要:1.生命周期 JSP与Servlet是一体的两面。基本上Servlet能实现的功能,使用JSP也能做到,因为JSP最后还是会被容器转译为Servlet源代码,编译为.class文件,加载然后生成Servlet对象。 <%@page contentType="text/html" pageEncoding="UTF-8" %> <html> <head> <title>SimpleJSP</title> </head> <body> <h1><%= new
阅读全文
摘要:1.过滤器 在容器调用Servlet的service()方法前,Servlet并不知道有请求的到来,在Servlet的service()方法执行后,容器真正对浏览器进行响应之前,浏览器也不知道Servlet真正的响应是什么。过滤器正如其名所示,可以拦截过滤浏览器对Servlet的请求,也可以改变Servlet对浏览器的响应。 要实现过滤器,必须实现Filter接口,并在web.xml中定义过滤器。Filter接口有三个要实现的方法:init(),doFilter(),destroy()。 FilterConfig为web.xml中过滤器的代表对象,如果在定义过滤器时设置了初始参数,可以通...
阅读全文
摘要:HTTP本身是无状态的通信协议,进行会话管理的基本原理,就是将需要维持的状态响应给浏览器,使浏览器在下次请求时主动发送状态信息,让web应用程序“得知”请求之间的联系。1.隐藏字段 隐藏字段是将状态信息以窗口中看不到的输入字段响应给浏览器,在下次发窗口时一并发送这些隐藏字段。使用隐藏字段的方式,显然,关掉网页后,就会遗失先前的信息,所以这种方式只适合于一些简单的状态管理,像是在线问卷。import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Questionnaire extends ...
阅读全文
摘要:1.ServletConfig web容器启动后,会读取web.xml,根据其中每个servlet的设置,加载servlet类并实例化,并为每个servlet生成一个ServletConfig对象,而后调用Servlet接口的init()方法,将产生的ServletConfig对象当做参数传入。 ServletConfig定义了getInitParameter()和getInitParameterNames()方法,可以取得设置Servlet时的初始参数。 public class AddMessage extends HttpServlet { private String PA...
阅读全文
摘要:1.HttpServletRequest 当HTTP转发给Web容器处理时,Web容器会收集相关信息,并产生HttpServletRequest对象,使用这个对象可以取得所有HTTP请求中的信息。 处理请求时最基本的就是取得请求参数,可以使用getQueryString()取得请求的查询字符串,使用getParameter()取得请求参数的值。 String username = request.getParameter("name");(获取请求参数name的值)。getParameter()方法返回的是String对象,如果传来的是如“123”这样的字符串值,而需要处理
阅读全文
摘要:1.创建和启动线程 线程类必须实现Runnable接口或者扩展Thread类,并且实现run方法,run方法没有参数没有返回值不允许抛出异常。调用start实例方法启动一个线程。调用该方法后,线程准备启动,只有获得CPU时,start将自动调用run,线程才真正启动。public class DefineThread { /** * 通过继承java.lang.Thread类定义线程 */ class ThreadA extends Thread{ /** * 当线程被运行时调用此方法 */ public...
阅读全文
摘要:在某些编程语言中,枚举仅仅被当做是一个具名整型值的集合;但是在Java编程语言中,枚举是一种特殊类型的类,其枚举的每一个值都由一个实例来表示。1.枚举声明 枚举声明与类声明的两处差异:关键字是enum而不是class;声明任何成员之前,必须 首先声明其所有的枚举常量。如果一个枚举除了枚举常量之外还声明了其他的东西,那么枚举常量列表必须以一个分号结尾。2.枚举常量的声明 如果枚举常量声明中的每个字段只包含一个名字,系统将用无参构造器创建该枚举类型的一个对象。通过提供与构造器参数类型匹配的实参可以选择使用哪个构造器创建枚举常量。枚举常量的声明不能有任何的修饰符作用其上,注解除外。/** * J..
阅读全文
摘要:集合,有时也被称作容器(container),是对象的持有者,它们可以以有助于高效访问的形式来存储和组织对象。1.Collection接口:集合的根接口。 Set:不包含重复元素的集合,不维护元素的顺序。加入Set的元素必须定义equals方法来确保对象的唯一性。它有3个实现类:HashSet、LinkedHashSet和TreeSet。 HashSet采用散列函数对元素进行排序,是为快速查询设计的。存入其中的元素要定义hashCode方法。TreeSet采用红黑树的数据结构进行元素排序。存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义..
阅读全文
摘要:创建文件与目录。createNewFile方法:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。mkdir方法创建此抽象路径名指定的目录。mkdirs创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。import java.io.File;import java.io.IOException;/** * 创建新文件和目录 */public class CreateFileUtil { /** * 创建单个文件 * @param destFileName 目标文件名 ...
阅读全文
摘要:1.流 java.io包有两个主要部分:字符流和字节流。字符是指16位的UTF-16字符,而字节通常是8位的。字符流主要用于基于文本的I/O,而字节流主要用于基于二进制数据的I/O。字节流被称为输入流(input stream)与输出流(output stream),而字符流被称为读取器(reader)与写入器(writer)。 InputStream类是java.io包中大多数字节输入流的超类。主要方法有: public abstract int read()throw IOException:从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经...
阅读全文
摘要:1.String类 字符串是不可变(只读)的字符序列。字符串可以隐式地创建: String str = "string";也可以使用new来显式地创建一个String对象。String对象的两个基本方法是:length()和charAt()。indexOf()和lastIndexOf()方法用来查找指定字符或者字符串在字符串中第一次或最后一次出现的位置。找到的话返回索引值,否则返回-1。 equals方法用来比较两个String对象是否相等(相同的长度以及完全相同的Unicode字符序列)。equalsIgnoreCase()会忽略大小写。 对于两个相同内容的字符串字面常量
阅读全文
摘要:1.创建异常类型 异常都是对象。所有的异常类型,即所有为可抛出(throwable)对象设计的类,都必须扩展Throwable或者它的某个子类。 异常主要是检查型异常(checked exception),这意味着编译器将检查我们的方法是否只抛出了它们声明自己会抛出的异常。标准运行时异常和错误扩展了RuntimeException或者Error,它们是不受检查型异常(unchecked exception)。 检查型异常表示的情形是:虽然这种情况是异常的,但是在一定程度上它的发生是可以预计的,而且一旦这种情况发生了,就必须以某种方式来处理。要使这种异常能够被检查到,必须表明这种异常的存在...
阅读全文
摘要:类和接口可以在其他的类和接口的内部进行声明,它们要么声明为成员,要么声明在代码块内部。因为嵌套类是包围类的一个成员,所以嵌套类可以访问包围类的所有其他成员,包括包围类继承而来的所有成员。1.静态嵌套 嵌套类被声明为其包围类的静态成员,作用于它们的可访问性规则和作用于包围类的其他成员的规则是相同的,可以具有private,package,protected,public的访问权限。2.内部类 非静态嵌套类称作内部类(inner class)。内部类的实例总是与其包围类的实例相关联的。 public class CreateInnerClass { class InnerClass...
阅读全文
摘要:1.扩展类的构造器 扩展类的构造器必须通过隐式地或显式地调用其超类的构造器,将继承而来的字段的构造工作委托给超类。可以使用super来显式地调用超类的某个构造器。如果扩展类构造器的第一条可执行语句不是调用超类构造器的语句,那么扩展类的构造方法会自动调用超类的无参构造器。也就是说,扩展类构造器的第一条语句被认为是如下语句:super();。如果超类没有无参构造器,就必须显式地调用其他构造器。 创建一个(扩展类)对象的过程:为对象的所有字段分配存储空间并初始化为各自类型的默认值。此后,构造过程分为三个阶段。1.调用超类的构造器;2.初始化继承而来的相应的字段;3.执行构造器其他语句。(先进行超..
阅读全文
摘要:1.数组 数组只是相同类型的、用一个标识符名称封装到一起的一个对象序列或者基本数据类型序列。 数组本身是对象,Java中的对象是存储在堆中的,因此数组无论保存基本数据类型还是对象类型,数组对象本身是存储在堆中的。 声明一个数组对象时不允许指定它的大小(例如:int[5] arr;是错误的),int[] arr;此时获得一个数组对象的引用,JVM只是给这个引用分配了存储空间,为了给数组创建相应的存储空间,必须初始化它。 创建(定义)一个数组时需要指定数组的大小,JVM要在堆上为数组对象分配存储空间。例如:int[] arr = new int[5]。注意:这里数组中的int变量可以使用n...
阅读全文
摘要:1.基本数据类型 Java中的基本数据类型有8种:boolean(-),char(16-bits),byte(8-bites),short(16-bites),int(32-bites),long(64-bites),float(32-bites),double(64-bites)。 boolean类型所占存储空间的大小没有明确指定,仅定义为能够取字面值true或者false。 Java字符采用Unicode编码。前128个字符编码与ASCII编码兼容,char类型变量的存储范围\u0000-\uffff。 基本类型都具有与之对应的包装器类型(Boolean, Character, B...
阅读全文
浙公网安备 33010602011771号