公文素材库 首页

用JAVA开发WEB Service(学习总结)

时间:2019-05-28 03:19:14 网站:公文素材库

用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
相关阅读
最近更新
推荐专题