用JAVA开发WEB Service(学习总结)
用JAVA开发WEBService
一学习前的准备
开发环境JBOSS4.05+axis1.4+JDK1.5
axis1.4下载地址:,选择axis-bin-1_4.zip所需要的JAR包:
二部署axis
以我们CreateGWS405产品为例,在产品server\\default\\deploy目录下新建一个应用,比如叫myService.war。在里面新建文件夹“WEB-INF”,将axis1.4以下目录中的web.xml文件拷贝到“WEB-INF”下。“axis-bin-1_4\\axis-1_4\\webapps\\axis\\WEB-INF“。然后将jar包拷贝到产品server\\default\\lib下。至此部署完毕。
三开发webService服务端
用编辑器编写一个简单的服务类,代码如下:importjava.util.*;importjava.text.*;
publicclassSayHello{}
将该类复制到myService.war中与“WEB-INF”同级目录,然后更改其名字为”SayHello.jws”。
启动CreateGWS405,在浏览器地址输入:88/myService/SayHello.jws?wsdl打开页面后你会看到
ClicktoseetheWSDL四开发webService客户端。(DLL方式)
这里为了方便测试,我们就以CreateGWS405产品为客户端,在create.war下新建一个JSP页面,代码如下:
Stringurlname=":88/myService/SayHello.jws?wsdl";Services=newService();
Callcall=(Call)s.createCall();//要调用的方法名称
call.setOperationName("say");
call.setTargetEndpointAddress(urlname);
//方法传入一个String型参数,返回值也是String
Stringval=(String)call.invoke(newObject[]{"haha"});
System.out.println(val);
需要导入:importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
至此一个简单的客户端就编写好了。上面服务端的方法参数是String,返回值也是String,而实际业务中可能还需要以int,boolean等类型做参数,而且参数不止一个。返回值有时是int有时又是集合ArrayList那该怎么做呢,请看下面这个服务端代码
importjava.util.*;importjava.text.*;
publicclassSayHello{
publicString[]getStrs(Stringstr,inta){
System.out.println("callwebservicegetStrs.....");String[]abc=newString[a];abc[0]=str;returnabc;}
publicStringsay(Stringname){}
publicArrayListgetList(Stringstr){ArrayListstrs=newArrayList();
System.out.println("callwebservicegetList.....");strs.add("A");strs.add("B");strs.add("C");strs.add(str);returnstrs;}
System.out.println("callwebservicesay.....");return"Hello"+name;}
这个服务端有4个方法,分别返回不同类型的值。客户端就要改成
publicintgetInt(Stringarg){
System.out.println("callwebservicegetInt.....");returnarg.length();}
Stringurlname=
":8080/aixs_proxy_demo/SayHello.jws?wsdl";
Services=newService();try{
Callcall=(Call)s.createCall();//要调用的方法名称
call.setOperationName("say");
call.setTargetEndpointAddress(urlname);
//方法传入一个String型参数,返回值也是String
Stringval=(String)call.invoke(newObject[]{"haha"});System.out.println(val);
Callcall4=(Call)s.createCall();//要调用的方法名称
call4.setTargetEndpointAddress(urlname);call4.setOperationName("getList");Stringst1="abc";
//传入参数类型为String
call4.addParameter(newQName("st1"),XMLType.XSD_STRING,//返回一个ArrayList
call4.setReturnType(newQName("ArrayList"),
ArrayListlist=(ArrayList)call4.invoke(newObject[]System.out.println("+++++"+list.size());
Callcall2=(Call)s.createCall();Stringst2="abc";intcount=303;
call2.setOperationName("getStrs");call2.setTargetEndpointAddress(urlname);
//传入参数类型为String和int
call2.addParameter(newQName("st2"),XMLType.XSD_STRING,
ParameterMode.IN);
ArrayList.class);{st1});
ParameterMode.IN);
call2.addParameter(newQName("count"),XMLType.XSD_INT,//返回一个String[]
call2.setReturnType(newQName("String[]"),String[].class);String[]strs=(String[])call2.invoke(newObject[]{st2,
Callcall3=(Call)s.createCall();Stringst3="abcdefg";
call3.setOperationName("getInt");
call3.setTargetEndpointAddress(urlname);
//传入参数类型为String
call3.addParameter(newQName("st3"),XMLType.XSD_STRING,//返回一个int
call3.setReturnType(newQName("Integer"),Integer.class);Integergetint=(Integer)call3.invoke(newObject[]{st3});System.out.println(getint);
Integer.valueOf(count)});
System.out.println("-----"+strs.length);
ParameterMode.IN);
ParameterMode.IN);
}catch(Exceptione){}
e.printStackTrace();
需要导入:importjava.util.ArrayList;
importjavax.xml.namespace.QName;
importjavax.xml.rpc.ParameterMode;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.axis.encoding.XMLType;
学习中需要注意的地方:
1、在客户端调用其他程序的类时需要先把外部类引入到myService.war\\WEB-INF\\下新建
classes文件夹,包路径与原类相同,如果是jar文件,则需要复制到myService.war\\WEB-INF\\lib下。这样.jws格式文件才能正确编译为.class文件。
2、调用其他服务器上的webservice时需要注意一定要将包导入完全,如果包缺少会影响使
用。
五开发webService客户端。DynamicProxy方式(代理方式)
还是以上面那个服务端为例,用代理的方式来调用webService我们只需要对客户端的代码进行修改就可
以了,代码如下
StringwsdlUrl=
":8080/aixs_proxy_demo/SayHello.jws?wsdl";
serviceFactory=ServiceFactory.newInstance();
//创建远程服务Serviceservice=(Service)serviceFactory.createService(newURL(wsdlUrl),newQName(
nameSpaceUri,serviceName));
//向上转型为接口MyServiceInterfaceproxy=(MyServiceInterface)service.getPort(
newQName(nameSpaceUri,portName),
MyServiceInterface.class);
//调用相应方法System.out.println("proxy.say----"
}+proxy.say("lilei"));
+proxy.getList("AAAA").size());+proxy.getStrs("BBBB",10).length);+proxy.getInt("ABCDEFG"));
System.out.println("proxy.getList----"System.out.println("proxy.getStrs----"System.out.println("proxy.getInt----"
StringnameSpaceUri=
//服务名
StringserviceName="SayHelloService";//服务
StringportName="SayHello";ServiceFactoryserviceFactory;try{
":8080/aixs_proxy_demo/SayHello.jws";
//创建代理对像
}catch(MalformedURLExceptione){
e.printStackTrace();e.printStackTrace();}catch(ServiceExceptione){
需要导入:
importjava.net.MalformedURLException;importjava.net.URL;importjavax.xml.namespace.QName;importjavax.xml.rpc.ServiceException;importjavax.xml.rpc.ServiceFactory;
importorg.apache.axis.client.Service;
MyServiceInterface接口类的编写
importjava.rmi.Remote;importjava.util.*;
publicinterfaceMyServiceInterfaceextendsRemote{}
publicStringsay(Stringname);
publicArrayListgetList(Stringstr);
publicString[]getStrs(Stringstr,inta);
publicintgetInt(Stringarg);
需要注意的是:
1、接口必须继承Remote类,才能做代理
2、接口里面的方法必须和jws文件中的方法保持一致。
扩展阅读:《Java_Web开发实战经典》总结-第三部分Web高级开发(图文并貌)
第三部分Web高级开发
第九章Servlet程序开发
通过本章的的学习,使我了解了servlet与jsp之间的关系和servlet的生命周期及对应的操作方法及内置对象在servlet中的使用。了解了requestdispatcher接口的作用,并可以使用mvc进行程序的开发,掌握过滤器的基本原理及应用和监听器的基本原理及应用。
Servlet(服务器端小程序):多线程、可移植。最大好处:它可以处理客户端传来的HTTP请求,并返回一个响应。(没有Main主程序)
接口类继承关系?
Servlet处理的基本流程:
Servlet分类?
1、请区分容器和服务器?
2、关闭容器||一个Servlet长时间不使用和动态加载怎样实现?(servlet销毁)3、回顾config对象、模板设计模式(servlet程序本身应用);
4、Servlet生命周期控制的3个方法:init(),service()(doGet()、doPost())和destory();这些方法在哪个类里?
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException覆写里要扩大访问权限,
要想实现一个Servlet则一定要继承HttpServlet类,并覆写相应方法,编译完成后马上配置web.xml文件。
为什么要在WEB-IN/web.xml中进行Servlet程序的映射配置?
答:zz.servlet.HelloServlet又是“包.类”,反射有木有!
访问Servlet程序时,是以*.class形式存在。
过滤器就是个收各种门票的!应用:编码过滤器进化
第十章表达式语言
通过本章的的学习,使我了解了表达式语言的作用及与4种属性范围的关系,可以使用表达式完成数据的输出,掌握了表达式语言中各种运算符的使用。
博客笔记:
第十一章Tomcat数据源
通过本章的的学习,使我了解了数据源的作用及操作原理,掌握了tomcat中数据源的配置和数据源的查找及使用。
第十二章JSP标签
通过本章的的学习,使我了解了标签库的主要作用及标签的操作原理,掌握了标签的基本开发模式,并且可以通过tagsupport类完成迭代传输的功能,理解了标签的使用及与tagsupport类的区别,tagextrainfo类和variableinfo的使用。要想完成一个标签的开发,需要有以下四部分:
TagSupport类的四个方法和常量;
Tag接口和IteratorTag接口的执行区别:
第十三章JSP标准标签库
通过本章的的学习,使我了解了JSTL的主要作用及配置和JSTL中core标签的使用,了解了format和SQL标签的使用。
第十四章Ajax开发技术
通过本章的的学习,使我了解了AJAX技术的主要作用,和XMLHttprequest对象的作用,并可以使用XMLHttprequest对象进行操作。
第一个Ajax程序
背景知识:Ajax指的是异步JavaScript及XML(AsynchronousJavaScriptAndXML)。AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的
Web应用程序的技术。通过AJAX,您的JavaScript可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,您的JavaScript可在不重载页面的情况与Web服务器交换数据。AJAX
在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。AJAX可使因特网应用程序更小、更快,更友好。AJAX
是一种独立于Web服务器软件的浏览器技术。AJAX基于下列Web标准:JavaScriptXMLHTMLCSS在AJAX中使用的Web标准已被良好定义,并被所有的主流浏览器支持。AJAX应用程序独立于浏览器和平台。Web应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。不过,因特网应用程序并不像传统的桌面应用程序那样完善且友好。通过AJAX,因特网应用程序可以变得更完善,更友好。
返回数据的页面D:\\ProgramFiles\\webdemo\\14_Ajax\\content.htmHelloWorld!使用异步处理:D:\\ProgramFiles\\webdemo\\14_Ajax\\Ajax_recieve_content.htm接收content内容varxmlHttp;functioncreateXMLHttp(){象}if(window.XMLHttpRequest){//创建XMLHttpRequest核心对xmlHttp=newXMLHttpRequest()//使用FireFox内核}else{xmlHttp=newActiveXObject("Microsoft.XMLHTTP");//使用IE内核的浏览器}functionshowMsg(){//显示信息createXMLHttp();//xmlHttp.open("POST","content.htm");//设置一个请求//设置完请求后调用回调函数xmlHttp.onreadystatechange=showMsgCallback;xmlHttp.send(null);//发送请求,不设置参数}functionshowMsgCallback(){//回调函数if(xmlHttp.readyState==4){//数据返回完毕if(xmlHttp.status==200){//HTTP操作正常vartext=xmlHttp.responseText;//接收返回内容//设置要使用的CSS样式表//doucument.getElementById("msg").className="样式表名称";document.getElementById("msg").innerHTML=text;}}}
显示效果:
手敲千行不如单步一行!
调试手段:HTML代码怎么调试?类比servlet代码调试System.out.printf("*********");
allert(“**************”);看程序进行到哪一步!
问题:Ajax的xmlhttpRequests对象、方法、属性有专门的文档么?与jqueryajax比较。
参考文档:
场景描述:
登录程序大家都不陌生,但如果要注册,则必须保证用户的ID不能重复,这种检测用户ID的操作可以通过Ajax完成。
异步验证
异步验证varxmlHttp;varflag;functioncreateXMLHttp(){象}if(window.XMLHttpRequest){//创建XMLHttpRequest核心对xmlHttp=newXMLHttpRequest()//使用FireFox内核}else{xmlHttp=newActiveXObject("Microsoft.XMLHTTP");//使用IE内核的浏览器}functioncheckUserid(userid){//显示信息createXMLHttp();////设置请求,通过地址重写方式将userid传递到JSP中xmlHttp.open("POST","CheckServlet?userid="+userid);//设置完请求后调用处理回调函数xmlHttp.onreadystatechange=checkUseridCallback;}xmlHttp.send(null);//发送请求,不设置参数//document.getElementById("msg").innerHTML="正在验证";//alert("*******");functioncheckUseridCallback(){//回调函数if(xmlHttp.readyState==4){//数据返回完毕if(xmlHttp.status==200){//HTTP操作正常alert("*****8");vartext=xmlHttp.responseText;//接收返回内容if(text=="true"){}}flag=false;//无法提交表单document.getElementById("msg").innerHTML="用户名ID重复,无法使用";注册";}}else{flag=true;//可以提交表单document.getElementById("msg").innerHTML="恭喜!此用户ID可以}functioncheckForm(){//对表单判断能否进行提交操作returnflag;}用户ID:姓名:密码:checkzz.ajax.CheckServletcheck/14_Ajax/CheckServletpackagezz.ajax;importjava.io.*;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.PreparedStatement;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassCheckServletextendsHttpServlet{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/zz";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASSWORD="mysql";publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException{this.doPost(request,response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException{request.setCharacterEncoding("GBK");response.setContentType("text/html");//设置回应的MIMEConnectionconn=null;PreparedStatementpstmt=null;ResultSetrs=null;PrintWriterout=response.getWriter();//接收验证的useridStringuserid=request.getParameter("userid");try{Class.forName(DBDRIVER);//加载驱动conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库Stringsql="SELECTCOUNT(userid)FROMuserWHEREuserid=?";pstmt=conn.prepareStatement(sql);}
}pstmt.setString(1,userid);rs=pstmt.executeQuery();System.out.printf("*********");if(rs.next()){if(rs.getInt(1)>0){//判断ID是否已存在out.print("true");//已存在}else{out.print("false");}}out.close();}catch(Exceptione){e.printStackTrace();}finally{try{conn.close();}catch(Exceptione){e.printStackTrace();}}
友情提示:本文中关于《用JAVA开发WEB Service(学习总结)》给出的范例仅供您参考拓展思维使用,用JAVA开发WEB Service(学习总结):该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。
《用JAVA开发WEB Service(学习总结)》
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/522667.html
- 上一篇:微生物实训专业技能训练总结
- 下一篇:Java Web总结