第一篇:java 中常用的方法总结
8月1日
练习:
合理覆盖Cat数据类型的,equals()方法
Cat.java 覆盖 hashCode()返回的整型值是唯一的int hashCode()用法:
一般使用String提供hashCode的编码 +基本数据类型
hashCode 生成原则: 当对象内容一致时,生成的hashCode必须是一样的当对象内容不致时,生成的hashCode必须是唯一的HashtableTest1.java
hashtable 中的key如果是自定义数据类型,那么它必须覆盖equals()和hashCode()//考试 hashCode()ArrayList * Hashtable * 其他的存储方式:
LinkedList //特点:可以删除指定位置数据
练习:
向LinkedList添加:
A B C D
打印出时为: DCBA LinkedListTest.java
练习(MyQueueTest.java):
模拟一个队伍(队列),去买票一个动作
思路: 模拟一个队列(add)模拟出列(removeXXXX)
//先买票的人,先出队列——先入先出
队伍是一个特殊数据结构,特点:FIFO(先入先出)
HashSet //不允许重复元素
集合框架类的特点: Collection 接口是一组允许重复的对象 Set接口继承Collection,但不允许重复使用自己内部的一个排列机制 List接口继承Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。Map接口是一组成对的键——值对象,即所持有的是key—value pairs。Map中不能有重复的key。拥有自己内部机制。在集合框架类中有两大类接口: 5.1 Collection 5.2 Map
注意:集合框架类——容器,容器中存储引用数据类型
继承关系:
接口 实现 历史集合类型
Set HashSet TreeSet
List ArrayList Vector LinkedList Stack
Map HashMap Hashtable TreeMap Properties
集合框架类解决的问题?变长数组操作的效率。
集合框架类的特点:Vector 2 ArrayList * 3 Hashtable * 4 HashSet 5 Properties
集合框架类的使用:声明
private Vector vec;2 构造中实例化
vec = new vector();向容器中添加数据:
vec.add();练习:
FILOTest.java
第一个进来,最后一个出去
FILO------栈
练习:
将Student类作为Hashtable的key StudentHash 1 Student StudentHash(主类)StudentHash.java 8月2日
练习:
使用HashMap进行数据的存储,与遍历
.keySet()//返回key的集合(Set)
.values()//返回value的列表(ArrayList)HashMapTest.java
HashMap与Hashtable的区别:
Hashtable是非同步的(效率高)
HashMap是同步的(效率低)
获得系统java的相关的环境变量:
System.getProperties();//可以返回
Properties数据类型(是Map的子类),内容为系统的全部环境变量
练习:
打印输出系统中全部的环境变量:
//2 了解Properties,还可以与文件系统交互
PropertiesTest.java 思路: Properties p = System….2 遍历p 复习:
java.lang:
String特点
常用构造:
String(byte[] bytes)//将byte型数组转换为字符串
String(char[] ch)//将char型数组转换为字符串
String(char[] value, int offset, int count)
//将char[]转换为字符串,offset从那里开始(0)//count(char.length)个数
常用方法: char charAt(int index)String str = “ABC”;Char ch = str.charAt(0);ch ==A;String concat(String str)//连接字符串==”+”号 boolean equalsIgnoreCase(String anotherString)//忽略大小写比较byte[] getBytes()// 将字符串处理为byte[] int indexOf(String str)//判断字符串所在的索引位置,如果描述的字符串不存在,返回值为-1 int lastIndexOf(String str)//字符串所在的最后一个索引位置,如果描述的字符串不存在,返回值为-1 int length()//返回字符串的长度 String replace(char oldChar,char newChar)//字符串替换 boolean startsWith(String prefix)// 判断字符串的开头,是否有匹配的字符串 10 boolean endsWitn(String prerfix)//判断字符串的结尾,是否有匹配的字符串String substring(int beginIndex, int endIndex)//字符串的截取char[] toCharArray()//将字符串处理为char[] 13 String toLowerCase()//将字符串处理为小写String toUpperCase()//将字符串处理为大写String trim()//除去字符串左右两边的空格StringBuffer //初始化的容量16 构造:
StringBuffer()//初始化容量 16 StringBuffer(10)//初始化容量 10 StringBuffer(String str)方法:
StringBuffer append(float f)// 向StirngBuffer添加内容
int capacity()// 返回容量
int length()// 返回StringBufferInt实际存储长度
StringBuilde(效率高)==StringBuffer 基本数据类型的包装包:
Byte b = new Byte();Int Integer char Character
int a = Integer.parseInt(“11”);System常用的方法:
System.gc();
System.exit(0);//退出java程序,0代表正常退出,非0代表异常退出
System.arraycopy()//数组的拷贝
System.currentTimeMillis()//系统毫秒(1970)
System.getProperties()//系统环境变量
Math 算术类:
Math.abs()// 绝对值
max min
random //1.0----0.0的随机值
round //四舍五入
Runtime // 获得系统运行环境,通常用于java调用
//第三方应用程序(.exe).exec(“ ”)java.util
Date //获得系统时间,不考虑时区
构造:
Date()//获得系统时间
Date(long date)//根据用户传入的系统毫秒获取时间
方法:
toString()格式化日期: java.text.SimpleDateFormat 构造:
SimpleDateFormat(String str)方法:
String format(date)
Calendar //日期,可以考虑时区
固定用法:
Calendar cal = Calendar.getInstance();//时区
TimeZone tz = TimeZone.getTimeZone(“GMT + 8:00”);Calendar cal = Calendar.getInstance(tz);常用的方法:
Date getTime();//返回当前系统时区
int get(int filed);// Calendar.静态变量
Random 构造:
Random()方法:
int nextInt(xxxx)//返回指定范围的随机数字
需要可以变长的数组,可以提高效率
集合框架类:一组相同元素的集合。Vector 构造:
Vector()//无参构造,初始化容量为10 方法:
Boolean add(E e)//向容器中存储数据
Void addElement(E obj)//向容器中存储数据
elements()//为Enumeration提供容器的地址Enumeration //应用于容器元素的遍历
方法:
boolean hasMoreElements()//判断指针是否还有数据
E nextElement()//返回当前的元素,并且指针下移
ArrayList 构造:
ArrayList()//初始化容量 10 方法:
add()
iterator()//为Iterator()提供容器的地址
Iterator: //遍历容器中的元素
方法:
boolean hasNext()// 判断指针是否还有数据
E next()//返回当前的元素,并且指针下移
Vector 与ArrayList的区别:
Vector效率低,线程同步 ArrayList 效率高,线程非同步
Hashtable //存储数据时,通过key,value的方式成对存储
//只要知道key可以一次性操作value 方法:
put(key,value)//向Hashtable容器存储数据
elements()//返回Enumeration value的地址
key()//返回Enumeration 提供key的地址
E get(key)//根据表述的key一次获得value remove(Object key)//根据表述的key删除value
Hashtable中key是一个自定义的数据类型,那么这个自定义类型,必须合理覆盖Object;public boolean equals(Object obj)public int hashCode()HashMap(同步)
LinkedList //链表——提供了方便的操作方法
方法:
addFirst()removeFirst()addLast()removeLast()继承关系:
Collection Set-------不允许重复数据List---------允许重复数据
Collection list = new ArrayList();//面向接口
Map
使用官方类库方法:结合面向对象的思想
1.1 这个类的作用
1.2 这个类的构造
1.3 这个类的常用方法一些特殊类的固定用法
8月3日
java.io //为硬盘文件的读,写提供功能
File //在java中就代表磁盘上的一个文件
//它只可以访问这个文件的属性,并且它可以创建,删除文件,但是,它不可以控制文件中的内容
构造:
File(String pathname)示例:声明
File f;构造中初始化
//f代表当前目录下的new.txt f = new File(“new,txt”);3 方法:
boolean createNewFile()//新建一个空文件
boolean delete()//删除这个文件
练习:
在当前目录下创建一个新的文件判断这个文件是否存在
1.1 不存在,则创建一个新的文件
1.2存在,则输出这个文件的修改时间
新建项目:IO
新建类:FileTest.java 2 输出文件产相关信息
2.1 这个文件的名字
2.2 这个文件的绝对路径
I/O的基本原理:
流(stream):流是指在计算机的输入输出之间运动的数据序列。是用于I/O编程的抽象概念,表示线性的,顺序的输入和输出的数据流。
流分为两类:
输入流:代表从外设流入计算机的数据序列:输入流:源流(source stream)输出流:代表从计算机流向外设的数据序列:输出流:目的流(sink stream)在java中流的分类:
主体是程序 字节流---------代表传输的数据类型为byte类型,1字节
1.1 InputStream //可以从磁盘中读取文件
1.2 OutputStream //可以向磁盘中的文件写入内容 字符流---------代表传输的数据类型为char类型,2字节
2.1 Reader(输入流):可以从磁盘中读取文件
2.2 Writer(输出流):可以向磁盘中的文件写入内容
使用字节流:
练习:ByteStream中实现文件的写入,读取 使用FileOutputStream 向hello.txt中写入内容“MyFirstOutput” 1.1 FileOutputStream 的构造:
FileOutputStream(File file)
FileOutputStream(File file, Boolean append)
//append参数:为true,将会以追加模式进行写操作
false,将会覆盖原有文件
1.2 方法:
void write(byte[] b)
void close()//释放资源使用FileInputStream()2.1 构造
2.2 方法
int read(byte[] b)
//将读出的内容存储到byte[] 中,并且返回数组的长度
操作资源三大步: 打开
操作(读,写)
关闭
ByteStream.java
练习:使用java实现copy指令:
MyCopy
要求:java MyCopy args1 args2
结果:将args1中的内容copy到args2 思路:
1、从args1中读取内容
2、将读取的内容写入到args2 书写:
1、考虑需要的属性
2、构造初始化属性
3、方法实现copy
int read()//无参read方法 返回byte型数据
int read(byte[ ] b)//返回读取内容的长度
8月5日
字符流:char FileReader 构造:
FileReader(String filename)// 以参数中的文件名,创建输入字符流
FileWriter 练习:
FileRW.java
使用字符流实现文件的读写
注:程序结构参考ByteStream 字符流的特点:
由于字符流在write()实现时,使用了缓冲机制,所以在write()完毕后,必须同步缓冲区。
调用:
flush();或者
close();
System.in //可以接收用户在终端的输入
int read()//返回用户在程序运行过程中的键盘输入,为此输入的ascii码
System.in.read();//程序会阻塞状态,只有当用户输入字符,并且按下“回车键”程序,才会继续运行
ReadTest.java 流链:
目的:
在实际开发中,提高基本的字节流或者字符流的读取效率(读写效率)和更方便的操作机制(除了char,byte,String),还可以操作其他数据类型。
注意:一个程序很少只用一个流类来处理数据,通常都有使用一系列流类叫流链来处理。
字节流: BufferedInputStream BufferdeOutputStream
//特点:为基本的I/O操作,提供缓存区域
//提高字节流的操作效率
BufferedTest.java DataInputStream DataOutputStream
//特点:为各种基本,特殊数据类型提供操作方式
DataTest.java 输入流量
DataSource-àFileInputStream-àBufferedInputStream--àDataInputStream-àProgram 输出流量
Program-à DataOutputStream-à BufferedOutputStream-àFileOutputStream àDatasink 练习:
字符流版本的,MyCopy MyCharCopy.java 流链:
字节流的流链
字符流的流链
BufferedReader BufferedWriter
//提高I/O操作效率
BufferedRW.java
Alt + shift + z //自动写出异常
System.in.read();
System.in //java 中的标准输入流
ReadTest.java 8月6日 将对象存入到文件中(序列化存储)* ObjectSave.java 手工实现步骤:
将User数据类型的构造,封装,进行编写
使用DataxxxStream进行读写;
将User对象的数据进行拆分(setxxx,getxxx)序列化存储实现:
ObjectInputStream ObjectOutputStream //对于对象的读和写
方法:
Object readObject()
void writeObject(Object obj)
注意:读或写的对象,必须实现Serializable(序列化)接口
示例:
//这个对象支持了序列化存储 //可以使用readObject()|| writeObject()方法了
class User implements Serializable { }
ObjectSerializable.java
回顾:java.io File //特点:代表磁盘的文件,只可以访问文件的属性流的概念:只要计算机中线性的,顺序的数据输入,输出
输入流:
输出流:
java的角度:
字节流:
InputStream //读取内容
OutputStream //写入内容
特点:基本数据类型byte 字符流:
Writer: Reader:
特点:基本数据类型char 3 字节流和字符流的应用:
字节流:
FileInputStream FileOutputStream 字符流:
FileWriter FileReader 流链(包装流)
特点:
增加I/O的操作效率。(分配了一段内存-----缓冲区)
提供名种基本数据类型和特殊类型的操作机制
字节流: BufferedInputStream
BufferedOutputStream //特点:提高I/O操作效率DataInputStream
DataOutputStream //特点:提供基本,特殊类型操作
字符流: BufferedReader //特点:readLine();BufferedWriter 5 序列化存储:
特点:将对象进行存储,读取ObjectInputStream ObjectOutputStream
注意:要序列化存储对象必须实现:Serializable 接口 大练习:
使用
java.lang java.util java.io
实现一个用户的管理查询系统
功能:添加用户浏览用户删除用户查找用户退出程序
见UserManager文件夹
解决数据的累加问题: 程序一运行的时候,就将文件中的所有数据保存在内存中。
EOFException //文件指针已经到末尾时,还要继续读取
User user
User =(User)is.readObject();While(user!= null){
array.add(user);ois.readObject();}
ArrayList:
int size()//可以返回ArrayList中的元素个数
E get(int index)//根据用户传入的索引值,返回所存储数据
remove(int index)//删除指定位置的元素
第二篇:java中常用关键字总结
Java中的关键字总结
final 关键字
1、用final修饰的类不能被继承,没有子类;
2、用final修饰的方法,方法不能被重写;
3、用final修饰变量,变量的值不能被修改,表示常量,(书写规范:全部字母都要大写;多个单词,可以使用下划线(_)分开;)注意:如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错;如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错;
4、final用于成员变量表示该成员变量为常量,不能被修改,必须在变量定义时赋值。
5、final用于局部变量表示该局部变量为常量,不能被修改,可以在变量定义时赋值,也可以先定义变量后赋值。什么时候用final关键字? 有的时候不想别人重写我的方法就使用final关键字修饰该方法;
static关键字
1、static用于成员变量表示该变量只有一份,也就是说静态成员变量属于类而不属于某个具体的类实例对象,所有的类实例对象共享这个静态成员变量; 静态函数是不需要对象的,直接可以使用类名来调用;
2、非静态函数可以调用静态函数;静态函数不能调用非静态函数(非静态函数都是通过对象调用的);静态函数不能使用非静态成员变量,但可以使用静态成员变量;
3、静态函数调用时不需要对象的,所以不能使用和对象有关的关键字;(this;super;)
4、构造函数不能使用static修饰(构造函数是创建对象,开辟空间,给所有成员变量赋默认值之后,有JVM调用进栈,用来给对象的成员变量赋初始值的)static用于类,这里指的是内部类,那么在别的地方就可以通过外部类名来引用这个静态的内部类。
5、static还可以用于类的代码块,叫做静态代码块,静态代码块在类加载的时候就执行完毕,而类只加载一次;是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。什么时候用static关键字? 不想建立对象时;对于公用的成员变量必须使用static关键字修饰才能保证共享;
private关键字
1、java中的访问权限修饰符(作用是控制被修饰的成员的访问权限);被private修饰的成员,只能在本类中使用;所以被私有的成员需要在外界访问,还需要提供一个公共的方法;
设值:set + 变量名(变量名的首字母大写); 取值:get + 变量名(变量名的首字母大写);
2、构造函数私有化,就只能在被类中使用,别的地方调用不了;单例设计模式时会用到;
在开发中,一般类的成员变量都要私有化,然后提供get和set方法;
interface关键字
1、interface接口不是一个类,使用interface声明;接口没有构造函数;接口是用来描述不属于继承体系的扩展功能的;还可以定义规则;接口和类之间是实现关系,一个实现类可以实现多个接口;接口和接口之间是继承关系,可以多继承和多重继承;
2、接口中可以书写的内容:
成员变量:只能使用一下修饰符:public static final;也就是说,接口中的成员变量,都是常量;
成员函数: 只能使用修饰符:public abstract;也就是说,接口中的方法,都是公共和抽象的;一般函数前面的修饰符,推荐public不要省略;
什么时候用interface关键字? 对于继承体系之外的扩展功能需要使用接口来描述;
implements关键字
implements用于实现接口,需要实现接口中的所有方法,可以同时实现多个接口。extends关键字
extends用于继承父类或父接口,继承父类时只能是单继承。
class关键字
class用于声明类,访问权限可以是public或者默认权限,还可以指定为abstract、final,访问权限对于顶层类和内部类的限制是不同的。
instanceof关键字
1、比较运算符,运算符左边是一个指向一个对象的引用(左边就是一个变量名),右边是一个类名,运算符表示的意思就是:判断左边的对象的类型是不是右边的类;
2、使用instanceof关键字,可以实时判断一个对象的类型,就可以避免强制类型转换中容易出现的类型转换异常。
abstract关键字
1、abstract用于类表示这个类为抽象类,不能实例化。
2、抽象类,必须由子类去继承,继承的子类必须实现父类中所有的抽象方法,否则子类也是抽象的;
3、抽象函数必须放在抽象类中;抽象类中除了抽象函数,还可以定义所有一般类中可以定义的成员;
4、抽象类中可以不书写抽象方法;抽象类中必须有构造方法;抽象类一定是父类;
5、抽象类是父类,用来描述所有子类的共性信息的,只是描述的有些功能是不具体的;
6、abstract用于方法表示这个方法为抽象方法,只需声明,不用实现,由子类实现,抽象方法不能用private和static关键字。什么时候用abstract关键字? 当事物的功能描述不清,只能表示有这个功能时,就应该使用抽象修饰该功能,这个功能就是抽象的功能;如果一个类中有抽象的功能,那么这个类也是抽象的类;不想实例化这个类(包括自己也不行),但是允许别人继承,也可以使用抽象类。
this关键字
1、表示自身所属对象的引用;哪个对象调用this,this就指向哪个对象;
2、Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.什么时候用this关键字?
1、通过this调用另一个构造方法,用法:this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。如果一个构造函数中有this()语句,就没有隐式三步,隐式三步在this语句调用的那个构造函数中,且this语句必须在第一行的位置;
2、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被私有化,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。(用来区分成员变量和局部变量)
3、在函数中,需要引用该函所属类的当前对象时候,直接用this。
super关键字
1、表示父类;可以在子类中调用父类的非私有成员和构造函数;
2、调用方法:
调用父类构造函数:super(参数);(父类中没有无参构造函数在父类中添
加一个无参构造;在子类中手动调用有参构造函数)调用父类成员变量:super.变量名; 调用父类成员函数:super.函数名(参数);
3、super关键和this作用类似,是被私有的成员变量或者成员方法变为可见,或者说用来引用被私有的成员变量和成员方法,不过super是用在子类中,目的是访问直接父类中被屏蔽的成员.什么时候用super关键字?
如果父类中没有无参构造函数是,需要在子类中用super调用有参构造函数;
第三篇:java 调用webservice的各种方法总结
一、利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务
1.首先建立一个Web services EndPoint:
Java代码
package Hello;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
@WebService
public class Hello {
@WebMethod
public String hello(String name){
return “Hello, ” + name + “n”;}
public static void main(String[] args){
// create and publish an endpoint
Hello hello = new Hello();
Endpoint endpoint Endpoint.publish(“http://localhost:8080/hello”, hello);
} }
=
2.使用 apt 编译 Hello.java(例:apt-d [存放编译后的文件目录] Hello.java),会生成 jaws目录
3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:wsimport-p.-keep http://localhost:8080/hello?wsdl
5.客户端程序:
Java代码
1.class HelloClient{ 2.3.public static void main(String args[]){ 4.5.HelloService service = new HelloService();6.7.Hello helloProxy = service.getHelloPort();8.9.String hello = helloProxy.hello(“你好”);10.11.System.out.println(hello);12.13.} 14.15.} 16.二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的
利用xfire开发WebService,可以有三种方法:
1一种是从javabean 中生成;
一种是从wsdl文件中生成;
还有一种是自己建立webservice
步骤如下:
用myeclipse建立webservice工程,目录结构如下:
首先建立webservice接口,代码如下:
Java代码
1.package com.myeclipse.wsExample;2.3.//Generated by MyEclipse 4.5.6.7.public interface IHelloWorldService { 8.9.10.11.public String example(String message);12.13.14.15.} 16.Java代码
1.package com.myeclipse.wsExample;2.3.//Generated by MyEclipse 4.5.6.7.public class HelloWorldServiceImpl implements IHelloWorldService { 8.9.10.11.public String example(String message){ 12.13.return message;14.15.} 16.17.18.19.} 20.修改service.xml 文件,加入以下代码:
Xml代码
1.2.3.
客户端实现如下:
Java代码
1.package com.myeclipse.wsExample.client;2.3.import java.net.MalformedURLException;4.5.import java.net.URL;6.7.8.9.import org.codehaus.xfire.XFireFactory;10.11.import org.codehaus.xfire.client.Client;12.13.import org.codehaus.xfire.client.XFireProxyFactory;14.15.import org.codehaus.xfire.service.Service;16.17.import org.codehaus.xfire.service.binding.ObjectServiceFactory;18.19.20.21.import com.myeclipse.wsExample.IHelloWorldService;22.23.24.25.public class HelloWorldClient { 26.27.public static void main(String[] args)throws MalformedURLException, Exception { 28.29.// TODO Auto-generated method stub 30.31.Service s=new ObjectServiceFactory().create(IHelloWorldService.class);32.33.XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());34.35.String url=“http://localhost:8989/HelloWorld/services/HelloWorldService”;36.37.38.39.try 40.41.{ 42.43.44.45.IHelloWorldService hs=(IHelloWorldService)xf.create(s,url);46.47.String st=hs.example(“zhangjin”);48.49.System.out.print(st);50.51.} 52.53.catch(Exception e)54.55.{ 56.57.e.printStackTrace();58.59.} 60.61.} 62.63.64.65.} 66.这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:
Java代码
1.public static void main(String[] args)throws MalformedURLException, Exception { 2.3.// TODO Auto-generated method stub 4.5.Service s=new ObjectServiceFactory().create(IHelloWorldService.class);6.7.XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());8.9.10.11.//远程调用.net开发的webservice 12.13.Client c=new Client(new URL(“http://www.xiexiebang.com/axis2/
同理,也需要将axis2复制到webapp目录中
在axis2中部署webservice有两种方法,第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明
下面分别说明使用方法:
1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。先实现一个pojo类:
Java代码
1.public class HelloWorld{ 2.3.public String getName(String name)4.5.{ 6.7.return ”你好 “ + name;8.9.} 10.11.public int add(int a,int b)12.13.{ 14.15.return a+b;16.17.} 18.19.} 20.由于这两个方法都是public类型,所以都会发布成webservice。编译HelloWorld类后,将HelloWorld.class文件放到%tomcat%webappsaxis2WEB-INFpojo目录中(如果没有pojo目录,则建立该目录),然后打开浏览器进行测试:
输入一下url:
http://localhost:8080/axis2/services/listServices
会列出所有webservice
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
Java代码
1.package MZ.GetWebService;2.3.import javax.xml.namespace.QName;4.5.6.7.import org.apache.axis2.AxisFault;8.9.import org.apache.axis2.addressing.EndpointReference;10.11.import org.apache.axis2.client.Options;12.13.import org.apache.axis2.rpc.client.RPCServiceClient;14.15.16.17.18.19.public class GetWSByAxis2 { 20.21.private static String EndPointUrl;22.23.private static String QUrl=”http://ws.apache.org/axis2“;
24.25.private QName opAddEntry;26.27.public String WSUrl;28.29.public RPCServiceClient setOption()throws AxisFault 30.31.{ 32.33.RPCServiceClient serviceClient = new RPCServiceClient();34.35.Options options = serviceClient.getOptions();36.37.EndpointReference targetEPR = new EndpointReference(WSUrl);38.39.options.setTo(targetEPR);40.41.return serviceClient;42.43.} 44.45.46.47.public QName getQname(String Option){ 48.49.50.51.return new QName(QUrl,Option);52.53.} 54.55.//返回String 56.57.public String getStr(String Option)throws AxisFault 58.59.{ 60.61.RPCServiceClient serviceClient =this.setOption();62.63.64.65.opAddEntry =this.getQname(Option);66.67.68.69.String str =(String)serviceClient.invokeBlocking(opAddEntry, 70.71.new Object[]{}, new Class[]{String.class })[0];72.73.return str;74.75.} 76.77.// 返回一维String数组 78.79.public String[] getArray(String Option)throws AxisFault
80.81.{ 82.83.RPCServiceClient serviceClient =this.setOption();84.85.86.87.opAddEntry =this.getQname(Option);88.89.90.91.String[] strArray =(String[])serviceClient.invokeBlocking(opAddEntry, 92.93.new Object[]{}, new Class[]{String[].class })[0];94.95.return strArray;96.97.} 98.99.//从WebService中返回一个对象的实例
100.101.public Object getObject(String Option,Object o)throws AxisFault 102.103.{ 104.105.RPCServiceClient serviceClient =this.setOption();106.107.QName qname=this.getQname(Option);108.109.Object object = serviceClient.invokeBlocking(qname, new Object[]{},new Class[]{o.getClass()})[0];110.111.return object;112.113.} 114.115.116.117.///////////////////////////////////////// 读者可以自己封装数据类型,如int,byte,float等数据类型
118.119.} 120.客户端调用方法:
Java代码
1.MZ.GetWebService.GetWSByAxis2 ws=new MZ.GetWebService.GetWSByAxis2();2.3.ws.WSUrl=”http://localhost:8989/axis2/services/HelloWorld“;4.5.HelloWorld hello=(HelloWorld)ws.getObject(”getName“, HelloWorld.class);6.7.8.9.10.11.System.out.println(hello.getName(”zhangjin“));12.2.使用service.xml发布webservice,这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:
Xml代码
1.
http://localhost:8080/axis2/services/myService?wsdl
除此之外,还有直接可以在其中制定webservice操作方法:可以这样些service.xml文件
Java代码
1. 10.11.service.HelloWorld 12.13. 14.15.
第四篇:Java开发笔记 — HttpServletRequest方法总结
Java开发笔记 — HttpServletRequest方法总结
HttpServletRequest方法总结
getScheme()方法返回请求的计划,比如http,https或者ftp.getServerName()方法返回被发送请求的服务器的主机名 getServerPort()方法返回被发送请求的端口号。
getContextPath()返回请求地址的根目录,以“/”开关,但不是以“/”结尾。
一个常用的获得服务器地址的连接字符串是: String path = request.getContextPath();String basePath = request.getScheme()+“://”+request.getServerName()+“:”+request.getServerPort()+path+“/”;getCookies()取得cookie
getMethod()取得请求方法,如get,post或put getRequestURL()取得请求URL(统一资源定位符)getRequestURI()取得请求URI(统一资源标识符)getSession()取得对应session getHeaderNames()返回请求包含的所有头名称的一个enumeration(遍历器)使用方法如下:
Enumeration en = request.getHeaderNames();while(en.hasMoreElements()){
out.print(en.nextElement());
} 输出如下结果:
accept accept-language accept-encoding user-agent host connection cookie 具体含义是:
Accept:浏览器可接受的MIME类型。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。Host:初始URL中的主机和端口。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Cookie:这是最重要的请求头信息之一
getHeader(name)返回指定名称的特定请求的值。使用方法如下:
out.print(“cookie:===”+request.getHeader(“cookie”)+“
”);完整举例: accept:===*/* accept-language:===zh-cn accept-encoding:===gzip, deflate user-agent:===Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1;TheWorld)host:===localhost:8080 connection:===Keep-Alive cookie:===JSESSIONID=BF00F7FD72F5DF83DF8F62E3D5EFF960
第五篇:学习Java的方法
学习Java的方法
就我个人而言,是不太喜欢java的,更倾向于C++。
很多网友朋友问我学习Java有没有什么捷径,我说“没有,绝对没有!”。但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!
要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就 力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和 J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要 用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程; J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。J2SE开发桌面应用软件比起VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是J2EE了。J2EE又包括许多组件,如 Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。
那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有 点象ASP。然后你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还
是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管 JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?还好,SUN提供了Javabean可以把你的JSP中的Java代码封装起来,便于调用也便于重用。接着就是 EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代 码已由中间件(也就是我们常听到的Weblogic,Websphere这些J2EE服务器)完成了,所
以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用 Java编发送电子邮件的程序,你就得看看Javamail了。
好了,对Java和J2EE有了一些基本概念之后,你就应该编一些程序了,千万不要纸 上谈兵哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就可以直接Ctrl+C 再Ctrl+V,也不用劳您老大架再亲自把它 再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢!还有就是要经常上一些好的Java编程文章,有好的文章要Cut下来,有问题尽管问,只要问题不是太傻,一般高手都会回答你的。下面介绍几个好的Java方面的编程网站:CSDN论坛 http:/// 那里Java资料比较全;
java.com.cn http://.cn/ 看这域名就知道有多牛,注册用户快接近一 万了,同时 1
在线人数也在一千左右,人气很旺的;
IBM的开发者网络 http://
IBM永远的蓝色巨人!!
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手 了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈
祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦!
还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设 计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有 力(对不起,偶最近《金装四大才子》看多了)。学Java必读的两个开源程序就是Jive 和Pet Store.。Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用 了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive 从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive 2.1版本基础上 改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站http:/// 去下载,或到同济技术论坛的服务器上ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要错过了。
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体“技术”, 它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你
能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。关于设计模式的资料,还是向大家推荐banq的网站http:///,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring(重整)和极限XP编程,相信你 又会上一个台阶。做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧,你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的 来了。。。当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
下面介绍两个好的开源项目网站:
湖北省软件公共开发平台http://gro.clinux.org/
共创联盟http://cosoft.org.cn/
哇,好高兴哦,我终于成为高手了!非也,非也。古人云:“山外有山、人外有人”。
你知道计算机界现在的发展形势吗?你知道微软的.NET蓝图和SUN ONE计划之间的明争暗斗吗?你知道计算机技术将向何处发展吗?其实从各大计算机厂商最近的动作,都可以看出来“Web服务将是下一代互联网应用的制高点”,而微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web服务。Web服务就是一个崭新的分布式计算模型,它是一系列标准的综合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同语言编写的软件能够轻易的集成起来,使网络资源和Web站点变成一种服务而不是混乱的垃圾场。不远的将来,我们就可以在家里点击一下鼠标,就可以完成出门旅游的全部准备工作,包括定飞机票,定旅游线路,定好房间等。请注意,这所有的一切都是Web站点间自动完成的,再也不用象现在一样,表面上是电子商务,实际上很多环节都是人工操作。也许你会觉得这是天方夜谈,不过就近的说,你也很有可能承接一个项目,要集成两个企业的ERP系统。很有可能上游企业的系统是用Dephi编的,而下游企业的系统是用Java编的。你说你是Java高手,大家都看者你怎么做呢。所以啊,你还得学习新技术,如Web服务,而且你Dephi也要懂一点吧(Dephi6现在已经提供Web服务的控件了)。你编的Java系统,可能要和.NET集成,所以你.NET要懂一点吧?到最后,你可能发现你已经成为Java高手了,但很多时间却在搞别的技术。太极张三丰里说,最厉害的招式就是没有招式,可能就是这个道理吧!
因为刚刚兴起,所以网上Web服务的资料不是很多,我还是给大家推荐几个网站吧:中国UDDI技术联盟http:///developerWorks/cn/xml/index.shtml?csdn IBM可是Web服务的力推者