Java Servlet代理WebService请求

来源:互联网 发布:谷歌读屏软件下载 编辑:程序博客网 时间:2024/06/08 06:40

        相信大家在日常的工作中可能会遇到在Java里调用.Net发布的WebService的问题,或者在JS前端调用WebService各种不方便的问题。本文将手把手教大家如何在Java中调用.Net发布的WebService,然后再发布为servlet,供Ajax等客户端方便调用。

一、下载axis-1_4并获取jar包

    从官网下载axis_1_4.jar,从lib子文件夹中获取如下jar包:
axis.jar
axis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j.properties
log4j-1.2.8.jar
saaj.jar
wsdl4j-1.5.1.jar

二、新建web工程

    1、在eclipse里新建一个Dynamic Web Project,如下图所示:


    2、将站点命名为AxisClient:


    3、一直单击“Next”按钮直到出现如下图所示的窗口:


    4、将上图中红框部分的复选框选中后,单击“Finish”即可完成工程创建。

三、添加jar包引用

    1、在工程名称上单击右键,选择“Properties”,打开如下图所示对话框:


    2、在上图中,选择左侧的“Java Build Path”,切换到“Libraries”选项卡,再单击右侧的“Add External JARs...”按钮,找到一开始下载的axis组件包,将组件包添加到工程引用里,如下图所示:


    3、单击“OK”按钮完成引用。

四、新建servlet

    1、为工程创建package,如“com.axisclient.service”
    2、在新创建的package上单击右键,选择“New/Servlet”,并起名为“ClientService”:


        单击“Finish”完成Servlet创建。

五、新建部署的web服务器

    1、在Servers选项卡中单击“new server wizard”链接,打开如下图所示的对话框:


    2、以Tomcat7为例,在上面的“Apache”目录下选择“Tomcat v7.0 Server”,再单击“Next”,打开如下图所示对话框:


    3、在上图中单击“Browse”找到Tomcat7所在的目录,再单击“JRE”下方的下拉列表,选择1.7版本的JDK。
          再单击“Finish”即可。
    4、配置Tomcat
          在Servers选项卡中双击新创建的Tomcat Server,打开如下图所示的页面:


        在该页面中,在“Server Location”区域选择“Use Tomcat installation”,并将Deploy path设置为“webapps”,否则站点会被部署到eclipse自带的tomcat中,很难被找到。
        设置完毕后按下Ctrl+S组合键保存配置信息。

六、添加对服务器运行时组件包的引用

    1、打开工程的Properties窗口中的Java Build Path/Libraries选项卡
    2、单击右侧的“Add Library”按钮打开如下图所示的窗口:


    3、在上图中选择“Serverr Runtime”打开如下图所示的对话框:


    4、在上图中选择“Apache Tomcat v7.0”后单击“Finish”关闭对话框,再在父对话框中单击“OK”完成对服务器运行时组件的引用。

七、编写代码

    1、在ClientService.java中添加如下代码:

package com.axisclient.service;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*----------以下是对Axis的引用-----------*/import javax.xml.namespace.QName;  import javax.xml.rpc.ParameterMode;  import org.apache.axis.client.Call;  import org.apache.axis.client.Service;  import org.apache.axis.encoding.XMLType;  import java.util.Vector;/*--------------End----------------*//** * Servlet implementation class ClientService */@WebServlet("/ClientService")public class ClientService extends HttpServlet { private static final long serialVersionUID = 1L;    /**     * Default constructor.      */    public ClientService() {        // TODO Auto-generated constructor stub    } /**  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)  */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  // TODO Auto-generated method stub  String strName = request.getParameter("name");  //获取用户传入的参数  String iAge = request.getParameter("age");    String method = "MakeUser";          // 定义服务          Service service = new Service();            Call call = null;        try{         call = (Call) service.createCall();          }catch(Exception e){                 }        call.setTargetEndpointAddress(new java.net.URL(     //设置要调用的WebService地址                "http://localhost/WebServiceTest/Service.asmx"));         call.setUseSOAPAction(true);          call.setEncodingStyle(null);         call.setReturnType(new QName("http://tempuri.org/",method), Vector.class); //设置WebService的返回类型        call.setOperationName(new QName("http://tempuri.org/", method));     //设置要调用的WebService方法        call.setSOAPActionURI("http://tempuri.org/"+method);         call.addParameter(new QName("http://tempuri.org/", "Name"),     //设置传递给WebService方法的参数                org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);        call.addParameter(new QName("http://tempuri.org/", "age"),     //如果有多个参数,分别调用call的addParameter设置参数即可                org.apache.axis.encoding.XMLType.XSD_INT, ParameterMode.IN);        Vector retVal1 = (Vector) call.invoke(new Object[] {strName, iAge});    //传入参数值并调用WebService。这里将返回值设置为Vector就可以应对对多种返回值类型,否则会报错        response.setContentType("text/xml");        response.setCharacterEncoding("UTF-8");        String strResult="<?xml version='1.0' encoding='UTF-8'?><result><Name>" + retVal1.toString().substring(1,retVal1.toString().indexOf(',')) + "</Name><Age>"+retVal1.toString().substring(retVal1.toString().indexOf(',')+1,retVal1.toString().indexOf(']'))+"</Age></result>"; //将WebService返回的结果再次组合为一个xml返回给Servlet调用者        response.getWriter().write(strResult); } /**  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)  */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  // TODO Auto-generated method stub  doGet(request, response); //对于Post请求按照Get请求相同的方式处理 }}


    2、配置Servlet
         打开WEB-INF/web.xml文件,在其中加入如下配置信息:

<servlet><servlet-name>wsclientservice</servlet-name><servlet-class>com.axisclient.service.ClientService</servlet-class></servlet><servlet-mapping><servlet-name>wsclientservice</servlet-name><url-pattern>/service/wsclientservice</url-pattern></servlet-mapping>


八、发布站点

    1、打开打开工程的Properties窗口中的“Deplolyment Assembly”对话框:


    2、在上图的右侧单击“Add”按钮打开“New Assembly Directive”对话框,并选择“Java Build Path Entries”,再单击“Finish”按钮,打开如下图所示对话框:


    3、在上图中选中所有的jar包,单击“Finish”后再单击父对话框的“OK”按钮完成对组件包的部署依赖,否则站点部署后会缺失依赖的组件包。
    4、在Tomcat Server上单击右键,选择“Add and Remove”,打开如下图所示对话框:


          在上图中选中左侧的站点名后单击“Add”按钮将站点添加到右侧的Configured列表,再单击“Finish”按钮完成对站点的部署配置。
    5、发布站点
          在Tomcat Server上单击右键,选择“Publish”
    6、启动站点

九、测试Servlet

        在浏览器中输入地址http://localhost:8082/AxisClient/service/wsclientservice?name=Mary&age=58并单击回车,如果出现类似于如下的内容就说明调用WebService成功:

0 0