JAVA实现的WEB SERVICE

首先是一段计时器的Java代码

 

package test.webservice;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Counter {
// 计数器文档,注意名字名路径。
private final String FileN = "e:/counter.xml";
private final static DateFormat DATEFORMATER = DateFormat.getDateTimeInstance();
// 出错的情况下返回的值
private final static String ERRORINFO = "-1;-1;-1;-1";

private Document openDocument() {
    Document doc = null;
    SAXReader reader = new SAXReader();
    try {
        File xmlfile = new File(FileN);
        doc = reader.read(xmlfile);
        xmlfile = null;
    } catch (DocumentException e) {
        e.printStackTrace();
    }
    return doc;
}

/**
 * 功能:取指定名称计数器的详细信息,并设置计数器加1。
 */
private synchronized String countertick(String name, String password) {
    Document doc = openDocument();
    Date currdt = new java.util.Date();
    // mc:month counter(月计数器); dc: day counter(日计数器);
    // tc: total counter(总计数器); wc: week counter(周计数器);
    // rt: registe time登记时间
    String mc = "-1", dc = "-1", tc = "-1", wc = "-1", rt = "-1";
    Element root = doc.getRootElement();
    Element selitem = null, item = null;
    for (Iterator it = root.elementIterator("item"); it.hasNext();) {
        item = (Element) it.next();
        if (name.equals(item.element("name").getText())) {
            selitem = item;
            String pwd = item.elementText("password");
            if (!password.equals(pwd)) {
                return ERRORINFO;// 密码不对,直接返回
            }
            mc = item.element("mc").getText();
            dc = item.element("dc").getText();
            tc = item.element("tc").getText();
            wc = item.element("wc").getText();
            rt = item.element("rt").getText();
            break;
        }
    }

    // 如果selitem为空,说明没有个名字的计数器。则添加一个。
    if (selitem == null) {
        // System.out.println("没有找到这个名字的计数器:"+name);
        rt = DATEFORMATER.format(currdt);
        selitem = doc.getRootElement().addElement("item");
        selitem.addElement("name").setText(name);
        selitem.addElement("tc").setText("0");
        selitem.addElement("mc").setText("0");
        selitem.addElement("wc").setText("0");
        selitem.addElement("dc").setText("0");
        selitem.addElement("rt").setText(rt);
        selitem.addElement("password").setText(password);
        mc = "0";
        wc = "0";
        dc = "0";
        tc = "0";
    }

    // 处理计数器加一操作。
    Calendar currcr = Calendar.getInstance();
    // 总数器总是加1。
    tc = String.valueOf(Integer.parseInt(tc) + 1);
    selitem.element("tc").setText(tc);
    Date lastdt = null;
    try {
        lastdt = DATEFORMATER.parse(rt);
    } catch (ParseException e) {
        lastdt = new java.util.Date();
    }
    Calendar lastcr = Calendar.getInstance();
    lastcr.setTime(lastdt);
    currcr.setTime(currdt);
    // System.out.println("上次登记时间:"+DATEFORMATER.format(lastdt));
    // System.out.println("本次登记时间:"+DATEFORMATER.format(currdt));
    if (lastcr.get(Calendar.YEAR) == currcr.get(Calendar.YEAR)) {
        // 月相同,月计数加1
        if (lastcr.get(Calendar.MONTH) == currcr.get(Calendar.MONTH)) {
            mc = String.valueOf(Integer.parseInt(mc) + 1);
        } else {
            mc = "1";
        }
        // 日相同,日计数加1
        if (lastcr.get(Calendar.DAY_OF_YEAR) == currcr
                .get(Calendar.DAY_OF_YEAR))
            dc = String.valueOf(Integer.parseInt(dc) + 1);
        else
            dc = "1";

        if (lastcr.get(Calendar.WEEK_OF_YEAR) == currcr
                .get(Calendar.WEEK_OF_YEAR))
            wc = String.valueOf(Integer.parseInt(wc) + 1);
        else
            wc = "1";
    } else {// 年不一样,则月计数器、周计数器日计数器肯定也不一样。
        mc = "1";
        dc = "1";
        wc = "1";
    }
    selitem.element("mc").setText(mc);
    selitem.element("wc").setText(wc);
    selitem.element("dc").setText(dc);
    // 登记记录时间
    selitem.element("rt").setText(DATEFORMATER.format(currdt));

    try {
        XMLWriter xw = new XMLWriter(new FileWriter(FileN));
        xw.write(doc);
        xw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return tc + ";" + mc + ";" + wc + ";" + dc;
}

/**
 * 功能:服务暴露的接口,也就是指定名称、密码,返回指定的计数,并将计数器加1。
 */
public String Counter(String name, String password) {
    if (password == null || name == null)
        return ERRORINFO;
    return countertick(name, password);
}
}

 

然后是客户端java代码

/**
 * @FileName:WebService.java
 * @Date:Jan 6, 2011
 * @Copyright:Copyright(c)2010
 * @Corporation:Itibia
 * @Author:elliot.yan
 * @Version:
 * @Description:
 */
package test.webservice;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class CounterServiceClient {
private String counterarr[];

public boolean getCounter(String CounterName, String password) {
    boolean res = false;
    try {
        String endpoint = "http://localhost:8080/axis/test/webservice/Counter.jws";// 定义webservice服务的地址
        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress(new java.net.URL(endpoint));
        call.setOperationName("Counter");//这是调用的服务的方法
        String counter = (String) call.invoke(new Object[] { CounterName,
                password });//具体调用 传递参数 返回结果
        counterarr = counter.split(";");
        res = (counterarr != null && counterarr.length == 4);
    } catch (Exception e) {
    }
    return res;
}

public String getDc() {
    return counterarr[3];
}

public String getMc() {
    return counterarr[1];
}

public String getTc() {
    return counterarr[0];
}

public String getWc() {
    return counterarr[2];
}
}

 

再来一个test.jsp的代码

<%@page language="java" import="test.webservice.CounterServiceClient;"
    pageEncoding="utf-8"%>
<%
    CounterServiceClient client = new CounterServiceClient();
        client.getCounter("hello", "123");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>计数器测试页面</title>

        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="wallimn,计数器,WebService">
        <meta http-equiv="description" content="计数器使用示例">
    </head>

    <body>
        <h2 align="center">
            计数器详情
        </h2>
        <hr />
        总访问量:<%=client.getTc()%>
        <br />
        今天访问量:<%=client.getDc()%>
        <br />
        本周访问量:<%=client.getWc()%>
        <br />
        本月访问量:<%=client.getMc()%>
        <br />
        <hr />
        <p>
        </p>
    </body>
</html>

 

下载axis,将jar文件放入jboss中

将counter.java拷贝到jboss的axis.war中(将外部的文件夹一起拷入)

将counter.java改名为counter.jws

将过程正常部署到jboss中,启动jboss,访问test.jsp

完成

posted on 2011-01-06 14:28  基斯盐  阅读(1288)  评论(2)    收藏  举报

导航