Java Servlet代理WebService请求

        相信大家在日常的工作中可能会遇到在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成功:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值