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
完成
浙公网安备 33010602011771号