如何学好java

如何学好java,其实很简单,只要用心体会,慢慢积累!
posts - 106, comments - 7, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

一.什么是事务  
     事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。
    事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。
        二.事务的 ACID
    事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
1 、原子性
    事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性  
     事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。  
3 、隔离性
    一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持续性
   也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

数据库系统必须维护事务的以下特性 ( 简称 ACID) :

   原子性 (Atomicity)

  一致性 (Consistency)

  隔离性 (Isolation)

  持久性 (Durability)

原子性 (Atomicity)

事务中的所有操作要么全部执行,要么都不执行;

如果事务没有原子性的保证,那么在发生系统

故障的情况下,数据库就有可能处于不一致状

态。

 

原子性 (Atomicity)

如果故障发生在 write(A) 和 read(B) 之间,则将有可能造成帐户 A 的余额已经减去 50 元钱,而帐户 B 的余额却没有改变,凭空就少了 50 元钱。值得注意的是,即使没有故障发生,系统在某一时刻也会处于不一致状态。原子性的要求就是这种不一致状态除了在事务执行当中出现外,在其他任何时刻都 是不可见的。保证原子性是 DBMS 的责任:即事务管理器和恢复管理器的责任。

 

一致性 (Consistency)

主要强调的是,如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一

致的;所谓一致性简单地说就是数据库中数据的完整性,包括它们的正确性。对于图中的事务 Ti 来说,一致性要求就是事务的执行不改变帐户 A 和帐户 B 的和。否则的话事务就会创造或销毁钱!单个事务的一致性是由对该事务进行编键的应用程序员的责任,但是在某些情况下利用 DBMS 中完整性约束 ( 如触发器 ) 的自动检查功能有助于一致性的维护。

 

隔离性 (Isolation)

即使多个事务并发(同时)执行,每个事务都感觉不到系统中有其他的事务在执行,因而也

就能保证数据库的一致性;事情的起因 : 即使每个事务都能保持一致性和原子性,但如果几个事务并发执行,且访问相同的数据项,则它们的操作会以人们所不希望的某种方式交叉执行,结果导致不一致的状态!访问相同数据项的两个事务并发执行

解决办法 :

如果几个事务要访问相同的数据项,为了保证数据库的一致性,可以让这几个事务:

① 串行执行:即一个接着一个地执行事务;

② 并发执行:即同时执行多个事务,但用并发控制机制来解决不同事务间的相互影响。隔离性的保证 :

事务的隔离性能够确保事务并发执行后的系统状态与这些事务按某种次序串行执行后的状态是等价的。

保证隔离性也是 DBMS 的责任:即并发控制管理器的责任。

 

持久性 (Durability)

事务成功执行后它对数据库的修改是永久的,即使系统出现故障也不受影响。

持久性的含义是说:一旦事务成功执行之后,它对数据库的更新是永久的。可以用以下两种

方式中的任何一种来达到持久性的目的:

以牺牲应用系统的性能为代价

以多占用磁盘空间为代价

以牺牲应用系统的性能为代价:要求事务对数据库系统所做的更新在事务结束前已经写入磁盘;以 多占用磁盘空间为代价:要求事务已经执行的和已写到磁盘的、对数据库进行更新的信息是充分的(例如,数据库日志的信息就足够的多),使得 DBMS 在系统出现故障后重新启动系统时,能够 ( 根据日志 ) 重新构造更新。保证持久性也是 DBMS 的责任:即恢复

管理器的责任。

 

事物的状态有如下几种:

⑴ 中止事务:执行中发生故障、不能执行完成的

事务;

⑵ 事务回滚:将中止事务对数据库的更新撤消

掉;

⑶ 已提交事务:成功执行完成的事务。

 

系统的恢复步骤是:

1 、反向扫描文件日志(即从最后向前扫描日志文件),查找该事务

的更新操作。

2 、对该事务的更新操作执行逆操作。即将日志记录 “ 更新前的值 ” 写

入数据库。这样,如果记录中是插入操作,则相当于做删除操

作;若记录中是删除操作,则做插入操作;若是修改操作,则相

当于用修改前的值代替修改后的值。

3 、继续反向扫描日志文件,查找该事务的其他更新操作,并做和 2

一样的同样处理。

4 、如此处理下去,直至读到此事务的开始标记,事务的故障恢复就

完成了。

事务的隔离级别

隔离级别定义了事务与事务之间的隔离程度。

隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数

据库的并发性越好。

ANSI/ISO SQL92 标准定义了一些数据库操作的隔离级别

   未提交读( read uncommitted )

   提交读( read committed )

   重复读( repeatable read )

   串行读( serializable )

隔离级别的效果更新丢失( lost update ):当系统允许两个事务同时更新同一数据是,发生更新丢失。脏读( dirty read ):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

不可重复读取( nonrepeatableread ):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读取。

幻像( phantom read ):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。

posted @ 2011-05-06 21:34 哈希 阅读(306) | 评论 (0)编辑 收藏

    泛型是1.5中引入的一个新的概念,由于 不用进行强制转换类型了,所以具有较高的安全性和易用性。因为泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除。也就是说,在编译阶段使用泛型,运行阶段取消泛型,即擦除。 擦除是将泛型类型以其父类代替,如String 变成了Object等。其实在使用的时候还是进行带强制类型的转化,只不过这是比较安全的转换,因为在编译阶段已经确保了数据的一致性。
 

java 泛型的残酷现实就是:

在泛型代码内部,无法获得任何有关泛型参数类型的信息。

在使用泛型时,任何具体的类型都被擦除,唯一知道的是你在使用一个对象。比如:List<String>和List<Integer>在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。

snippet 1:

package com.cognizant.ch15;

import java.lang.reflect.Array;
import java.util.Arrays;

public class ArrayMaker<T> {
    private Class<T> kind;

    public ArrayMaker(Class<T> kind) {
       this.kind = kind;
 }

 @SuppressWarnings("unckecked")
   T[] create(int size) {
       return (T[]) Array.newInstance(kind, size);
 }

  public static void main(String[] args) {
      ArrayMaker<String> stringMaker = new ArrayMaker<String>(String.class);
      String[] stringArray = stringMaker.create(10);
      System.out.println(Arrays.toString(stringArray));
 }
}
ouput:[null, null, null, null, null, null, null, null, null, null]

由于擦除,kind实际上将被存储为了Class,非String.calss。在创建数组的时候,Array.newInstance()实际上并没有拥有kind所含的类型信息,因此就不会产生具体的结果。

如果要创建一个容器而不是数组,情况却有点不同:

snippet 2:

public class ListMaker<T>{

   List<T> create(){

      return new ArrayList<T>();

}

  public static void main(String[] args){

      ListMaker<String> stringMaker=new ListMaker<String>();

      List<String> stringList=stringMaker.create();

}

}

擦 除使得create()内部的new ArrayList<T>中的<T>被擦除了,在运行时,这个类的内部没有任何<T>,但是又不能把 ArrayList<T>改为ArrayList,否则虽然编译器通过,但会给出警告。

snippet 3:

package com.cognizant.ch15;

import java.util.ArrayList;
import java.util.List;

public class FilledListMaker<T> {
   List<T> create(T t, int n) {
   List<T> result = new ArrayList<T>();
    for (int i = 0; i < n; i++) {
       result.add(t);
  }
    return result;
 }

 public static void main(String[] args) {
    FilledListMaker<String> stringMaker = new FilledListMaker<String>();
    List<String> list = stringMaker.create("hello", 6);
    System.out.println(list);
 }
}

output:[hello, hello, hello, hello, hello, hello]

编译器无法知道有关create中T的任何信息,但是他仍然可以在编译期确保放置到result中对象具有T类型。因此就有了一个现象:即使擦除在方法或类内部移除了实际类型的信息,编译器还是可以在方法或类的使用的类型的内部一致性。

那么就有一个问题:擦除后的不知道又到知道其具体类型,他是这么做到的呢?

答案是:擦除在方法体中移除了类型信息,所以在运行时的问题就是边界即对象进入和离开方法的地点,这正是编译器在编译期执行类型检查并插入转型代码的地点。

泛型中的所有动作都发生在边界处:对传递进来的值进行额外的编译期检查,并插入 对传递出去的值的转型。

由于不用进行强制转换类型了,所以具有较高的安全性和易用性。但泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除。也就是说,在编译阶段使用泛型,运行阶段取消泛型,即擦除。
这导致了一个问题:无法创建泛型数组。
Java的泛型在编译时会擦除类型信息。Java中的数组是通过反射动态建立的。没有了类型信息怎么能构造出数组。

   



posted @ 2011-05-06 21:16 哈希 阅读(197) | 评论 (0)编辑 收藏

public class StringBufferTest
{
public  void operater(StringBuffer x,StringBuffer y)
{
//string.append(String)字符串添加函数
x.append(y);
y=x;
System.out.println("operater输出:"+"a="+x+",b="+y);
}
public static void main(String [] args)
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
StringBufferTest test=new StringBufferTest();
test.operater(a, b);
System.out.println("main输出:a="+a + ",b=" +b);
}
java的引用类型是地址传递,可是在operater中和main中输出结果为什么不一样呢?


在main中 a => new StringBuffer("A"); b => new StringBuffer("B"); 在test.operater(a, b);这句,传入的是两个引用 在operater方法中,b被重新赋值了,即引用地址改变了 ================ 补充一下:java中任何一个对象变量只是指向创建的对象的一个引用 例如 String a = "KKK"; 那么 “KKK”是创建的String对象, a 则是这个对象的引用,或者说a保存对象“KKK”在内存中的地址

“==”与“Equals”区别

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。 ==比较的是2个对象的地址,而equals比较的是2个对象的内容。 显然,当equals为true时,==不一定为true;

posted @ 2011-05-03 16:44 哈希 阅读(271) | 评论 (0)编辑 收藏

string和stringbuffer区别
这是好友面试的一道题,其实我知道使用的区别,StringBuffer必须new出来,StringBuffer的append的效率比string的+=的效率高,
其实发现还有很大的区别,看了看以前scjp的考题

Test


答案是 javajavaC
这是Java参数传递(by value)造成的
而题目中第七行text = text.append ("C"),append方法会改变text中的值
而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。
string的值永远不会改变!
String a = "a";//假设a指向地址0x0001,
a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。
从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址
StringBuffer则不同,直接改变指向的地址中保留的值
还有

public static void main(String[] args) {
        StringBuffer s1 
= new StringBuffer("a");
        StringBuffer s2 
= new StringBuffer("a");
        s1.equals(s2);
//为什么是false
        System.out.println(s1.equals(s2));
        String s3 
= new String("a");
        String s4 
= new String("a");
        s3.equals(s4);
//为什么是true
        System.out.println(s3.equals(s4));
    }
   


StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较地址的,所以等于false.

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是
true。

posted @ 2011-05-03 16:02 哈希 阅读(202) | 评论 (0)编辑 收藏

1、
输出三角形
*
**
***
****
***
**
*

posted @ 2011-05-03 15:19 哈希 阅读(131) | 评论 (0)编辑 收藏

1、很难理解输出形状吗?
    其实很简单,不要被它吓懵了,首先你要明白输出,就是按行执行的,而且有顺序的输出,好了,要什么形状先画出来,总结规律,写代码依次输出就OK了,如金字塔
。。。。。*
。。。。* * *
。。。* * * * *
 这样理解:左边输出一个梯形,ok,5,4,3,右边三角形1,3,5,for(int i=0;i<3;i++)这是行数,每行要转弯<br/>,for(int j=5;j>3;j--)这是“。”的输出规律,for(int k=1;k<=2i-1;k++);这样就出来了!
 
js输出金字塔
2、日历的输出:
  
日历

3、数组的使用
  
数组的使用

4、
不间断的字幕

5、

posted @ 2011-05-02 12:39 哈希 阅读(142) | 评论 (0)编辑 收藏

    MyEclipse断点调试JavaScript向你介绍了使用MyEclipse断点来调试JavaScript,希望对你有所帮助。

MyEclipse断点调试JavaScript我们可以从以下的几个步骤来说明:

1.在站点下准备两个文件:1.js和index.html,在index.html中引入1.js,点击index.html中的按钮,就会调用1.js中的test()方法:

xml 代码

    
  1. ﹤html﹥  
  2. ﹤head﹥  
  3. ﹤meta http-equiv="Content-Type" content="text/html; charset=gb2312" /﹥  
  4. ﹤/head﹥  
  5. ﹤script type='text/javascript' src='./1.js'﹥﹤/script﹥  
  6. ﹤body﹥  
  7. ﹤input type="button" name="t" value="测试" onclick="test()"/﹥  
  8. ﹤/body﹥  
  9. ﹤/html﹥  

2.启动tomcat后,用myEclipse的web2.0浏览器浏览页面:

MyEclipse断点调试JavaScript1 

MyEclipse断点调试JavaScript浅析图1

3.在web2.0浏览器中,输入页面地址,出现页面后,点击工具栏中的“js调试”按钮,这时会在“Javascript Scripts Inspector”窗口中列出当前页面设计的所有js文件。选择需要断点调试的js文件,双击进入。

MyEclipse断点调试JavaScript2 

MyEclipse断点调试JavaScript浅析图2

4.进入到1.js文件后,就可以给js代码加断点了:

MyEclipse断点调试JavaScript3 

MyEclipse断点调试JavaScript浅析图3

5.这时再回到刚才web2.0的浏览页面,点击 按钮,调用1.js中的test()方法,系统就会自动跳转到调试状态,并定位到1.js中刚才设置断点的位置了。

(我用的是myEclipse5,不知道5之前的版本可不可以这样)

MyEclipse断点调试JavaScript就向你介绍到这里,希望对你有所帮助。

posted @ 2011-05-01 21:28 哈希 阅读(204) | 评论 (0)编辑 收藏




第2章 创建网站
双击自动滚屏/单击停止
字号:[大  小]
  本章教学目标

  在使用Dreamwear制作网页之前,必须首先创建网站或打开网站,此时Dreamwear会自动将所有网站资源(HTML文档、图片、动画、声音、程序等)都保存到网站文件夹中,从而保证网站发布后网页上的所有元素可以正常浏览。本章教学目标:

    • 学习设计、创建网站的基本步骤
    • 使用Dreamwear 建立本地站点操作方法
    • 使用Dreamwear 建立远程站点的操作方法
本章主要内容
  2.1 规划网站
 

2.2 创建本地站点

  2.3 创建远程站点 
  2.4 设置本地计算机为可访问服务器
   本章动画演示  
 
· 建立本地站点
· 建立远程站点
2.1 规划网站

 在建立网站与制作网页之前首先要规划站点:

① 规划站点结构:合理的站点结构可以加快对站点的设计,提高工作效率。

  • 用文件夹保存文档:首先建一个根文件夹,然后在其中建若干子文件夹,分类存放网站全部文档。
  • 使用合理的文件名:文件夹名称与文件名称,用容易理解网页内容的英文名(或拼音),最好不要使用大写或中文。这是由于很多网站使用Unix操作系统,该操作系统对大小写敏感,且不能识别中文文件名。
  • 合理分配文档资源:不同的对象放在不同的文件夹中。不要将与网页制作无关的文件放置在该文件夹中。

② 规划站点导航机制:提供清晰易懂的浏览方法,采用统一的网页组织形式,引导用户轻松访问网站。

  • 建立返回主页链接:在每个页面上设置,避免迷失方向。
  • 显示网站专题目录:每一页面都应提供网站简明目录结构,引导用户快速进入。
  • 显示当前位置:在显著位置上标出当前页在网站中的位置。
  • 搜索索引反馈:数据网站应设搜索功能。
  • 反馈:设置管理员email信箱、意见反馈表单等功能。

③ 构建整体的站点风格:网站中网页风格应该统一,使网站特点鲜明,突出主题。

  • 风格统一:在多个网页上重复出现标识网站特征的某些对象。
  • 使用模板和库:快速批量创建相同风格的网页。
2.2 创建本地站点 

  在制作 网页之前,必须首先创建网站或打开网站,此后Dreamwear会自动将所有网站资源(HTML文档、图片、动画、声音、程序等)都保存到网站文件夹中, 从而保证网站发布后网页上的所有元素可以正常浏览。网站分为本地站点(网站存放在本机硬盘上)与远程站点(网站存放在用于发布网站的服务器端)。

  使用dreamwear创建创建本地站点方法如下:

1.打开站点定义”对话框。

 打开Dreamwear 选取站点菜单→选取管理站点项目→点击新建按钮→选取站点项目

2.给站点命名

 选取站点名称文本方块,输入站点名称

3.选取或建立站点文件夹

 点击浏览文件夹按钮→点击创建新文件夹按钮→输入新建的站点文件夹名后,选择该文件夹→点击打开按钮→点击选择按钮

4.选取或建立默认图像文件夹

 选取默认图像文件夹文本框→点击浏览文件夹按钮→打开新建的站点文件夹→点击创建新文件夹按钮→输入图象文件夹名(images)后,选取该文件夹→点击打开按钮→点击选择按钮

5.设置访问本机网站的Http地址

 选取HTTP 地址文本框→输入访问本机网站时的地址→点击确定按钮→点击完成按钮

 练习2-1
1.在本机硬盘上创建一个本地站点,文件夹名用mysite,Http地址为
http://localhost/mysite  
站点名用自己姓名拼音缩写。
2.在本地站点创建一个新文件夹(如Image),用于存放图形文件。
3.在根文件夹下创建一个新文件。命名为default.htm,输入一些内容。
4.按F12键预览网页

2.3 创建远程站点 

  在创建了本地站点之后,使用[定义站点]命令设置或改变远程服务器信息。

1.打开站点定义中远程信息设置对话框。

 选取站点菜单 → 选取管理站点项目 → 选取要编辑的网站 → 点击编辑按钮 → 选取远程信息项目

2.设置访问类型

 选取访问框进行设置

  • [无]:如果不计划将站点上载到一个服务器时选择该项。
  • [本地/网络]:如果web服务器被映射为一个网络驱动器,或者是在本地机上运行web服务,选择该项。
  • [FTP]:若要使用FTP连接到Web服务器,选择该项。

3.设置远端文件夹

 点击浏览文件夹按钮 →选取本地磁盘 (C:)项目→打开 Inetpub 文件夹→打开 wwwroot 文件夹→点击创建新文件夹按钮→输入文件夹名mysite(该文件夹名即为远程网站名)→点击选择按钮

4.设置其它参数

  • 如果需要在添加和删除文件时[站点]窗口的[远端站点]栏可以自动更新,选取[自动刷新远程文件列表]选项。如果要提高向远程站点拷贝文件的速度,请不要选定该选项。(若要在任何时候手工刷新[站点]窗口,点击[站点]窗口的[刷新]按钮。)
  • 如果在协作环境中工作,则可以使用存回/取出系统在本地和远程站点之间传输文件。当文件取出后,Dreamweaver 会在“站点”面板上显示取出该文件的人员的名称,并且在该文件的图标旁显示选中标记。存回文件后本地版本将变为只读,一个锁形符号出现在“站点”面板上该 文件的旁边,以防止更改该文件
  • 如果只有一个人在远程站点上工作,则可以使用“获取”和“上传”命令传输文件,而不用存回或取出文件。

5. 点击“确定”按钮后点击“完成”按钮

2.4 设置本地计算机为可访问服务器

 如果要使本地计算机作为服务器接受访问,需要安装服务器程序(例如微软的PWS或IIS)并启动网站.
一.启动网站方法:

1) 在已安装IIS的计算机上,选择开始→设置→控制面板→管理工具→Internet信息服务,打开如下面板

2) 选择网站下的默认网站,点击"启动"按钮

二.在本地计算机发布网站方法

方法一:
1) 在Dreamwear中将远程站点设置为本地机的C:"Inetpub"wwwroot"站点文件夹(例如mysite)
2) 点击上传文件按钮,将本地站点文件夹所有文件上传至远程站点

方法二:
1) 选择开始→程序→资源管理器
,找到本地站点文件夹
2) 右键点击站点文件夹,在弹出的菜单中选择共享
3)选择web共享选项卡
4)选择共享文件夹
5)在别名框中输入要发布的文件夹名称的别名(要求:字母或数字,不能是汉字或全角字符)
6)点击"确定"

三.浏览网站方法

 打开浏览器,输入访问地址:

  • 本机访问URL  http://localhost/发布的站点名   
    例如:http://localhost/mysite
  • 其他机访问URL http://IP地址或计算机名/发布的站点名例如:
    例如:http://st11/mysite
    http://10.1.5.128/mysite   
  • 查看本机IP地址方法:
    选择开始→运行→cmd→在dos提示符后输入ipconfig)
  • 查看本机计算机名方法:
    右键点击"我的电脑"→在弹出的菜单中选择"属性"→点击"计算机名"选项卡查看

练习2-2
1.在C:"Inetpub"wwwroot"文件夹下新建一个用于存放自己网站的文件夹,文件夹名mysite
2.设置远程信息,选择服务器为“本地/网络”;远程站点文件的目录地址为C:"Inetpub"wwwroot"mysite
3.将本地站点上传至远程站点后,刷新远程站点。
4.使用URL地址访问自己所建的站点:
本机访问URL  http://localhost/mysite
其他机访问URL http://IP地址/mysite

本章要点
·规划站点
  1. 用文件夹保存文档:首先建一个根文件夹,然后在其中建若干子文件夹,分类存放网站全部文档。
  2. 使用合理的文件名:文件夹名称与文件名称,用容易理解网页内容的英文名(或拼音),最好不要使用大写或中文。
  3. 合理分配文档资源:不同的对象放在不同的文件夹中。不要将与网页制作列关的文件放置在该文件夹中。

·建立本地站点操作步骤

  1. 打开站点定义”对话框
  2. 给站点命名
  3. 选取或建立站点文件夹
  4. 选取或建立默认图像文件夹
  5. 设置访问本机网站的Http地址
·建立远程站点操作步骤  1. 打开远程站点定义对话框
2. 设置远程访问的类型
3. 建立远程站点文件夹
4. 设置参数
5. 上传站点并访问

posted @ 2011-04-30 00:24 哈希 阅读(177) | 评论 (0)编辑 收藏

Web.xml
二话不说看代码:
  
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns
="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    
<description>This is the description of my J2EE component</description>
    
<display-name>This is the display name of my J2EE component</display-name>
    
<servlet-name>ValidateView</servlet-name>
    
<servlet-class>org.man.prj.ValidateView</servlet-class>
  
</servlet>

  
<servlet-mapping>
    
<servlet-name>ValidateView</servlet-name>
    
<url-pattern>/ValidateView</url-pattern>
  
</servlet-mapping>
  
<welcome-file-list>
    
<welcome-file>index.jsp</welcome-file>
  
</welcome-file-list>
</web-app>

package org.man.prj;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ValidateView extends HttpServlet {

    
/**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * 
@param request the request send by the client to the server
     * 
@param response the response send by the server to the client
     * 
@throws ServletException if an error occurred
     * 
@throws IOException if an error occurred
     
*/
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        doPost(request, response);
    }

    
/**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * 
@param request the request send by the client to the server
     * 
@param response the response send by the server to the client
     * 
@throws ServletException if an error occurred
     * 
@throws IOException if an error occurred
     
*/
    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out.println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println(
"  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(
"  <BODY>");
        out.print(
"    This is ");
        out.print(
this.getClass());
        out.println(
", using the POST method");
        out.println(
"  </BODY>");
        out.println(
"</HTML>");
        out.flush();
        out.close();
    }

}
输入tomcat验证一下:
http://localhost:8888/Validate/ValidateView


posted @ 2011-04-29 15:11 哈希 阅读(256) | 评论 (0)编辑 收藏

这三者存放的都是对象的引用
Set是无序集合,里边的对象没有先后顺序,而且不能重复(重复是指:同一个类的对象,并且hashCode和equals方法的返回值相同)
List是有序集合,里边的对象有先后顺序,并且可以重复(重复是指,当取得指定的对象时,同一个类的对象并且equals方法的返回值相同即为重复)
Map中存放的键值对象的引用,但是键不能重复(键集即无序集合Set【具有Set重复的特性】)

Set List 继承了Collection接口,可以使用Collection实现多态,而Map没有。



posted @ 2011-04-29 14:40 哈希 阅读(122) | 评论 (0)编辑 收藏

仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11 下一页