我的任务是创建一个接收来自多个客户端的请求的Web服务。我是Web服务的新手,因此我使用了本教程:
http://www.java-forums.org/blogs/web-service/1145-how-create-java-web-service.html
这正是我要找的。没有java ee的Web服务。
最好坚持使用java se,这是一个优先保留的政策。
现在我想更进一步实现该服务,以便它处理来自在共享资源上运行的多个客户端的请求。
理想情况下,我想要这样的事情:
Client client = new Client();
client.processRequest(string);
Web服务将按照到达的顺序处理请求。请求将在处理请求时进入,因此它将保留在堆栈中。
问题是我只是不知道如何将响应发送回特定客户端。响应将是一个字符串。我想出的唯一的事情,至少在原则上,是发送一个记住它来自哪里的对象,但这似乎只是Web服务工作。
我搜索了互联网,但没有找到解决方案。
如果可能只使用SE请帮忙。 如果您认为没有EE就不可能这样说,但我非常希望只使用SE的答案
答案 0 :(得分:0)
我认为您要实现的是异步Web服务。以下链接告诉您如何在Java SE中实现它。
答案 1 :(得分:0)
您可以使用Java SE中的Endpoint.publish方法执行此操作。首先,您创建一个简单的“端点接口”:
package com.example;
import javax.jws.WebService;
@WebService
public interface ExampleService {
String getDateTime();
}
然后在实现类中指定该接口。如您所见,这两个类都必须使用@WebService进行注释。
package com.example;
import java.io.IOException;
import java.net.URL;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
import javax.xml.namespace.QName;
@WebService(endpointInterface = "com.example.ExampleService",
serviceName = "ExampleService",
portName = "timeService",
targetNamespace = "http://example.com/time")
public class ExampleServiceImpl
implements ExampleService {
public String getDateTime() {
return String.format("%tc", System.currentTimeMillis());
}
public static void main(String[] args)
throws IOException {
// Create server
Endpoint endpoint =
Endpoint.publish("http://localhost:8080/example",
new ExampleServiceImpl());
URL wsdl = new URL("http://localhost:8080/example?wsdl");
// Create client
Service service = Service.create(wsdl,
new QName("http://example.com/time", "ExampleService"));
ExampleService e = service.getPort(ExampleService.class);
// Test it out
System.out.println(e.getDateTime());
endpoint.stop();
}
}
默认情况下,JAX-WS会将端点接口的所有公共方法视为Web方法(因为这通常是开发人员想要的)。通过将@WebMethod注释仅放在要作为Web服务公开的方法上,可以获得更多控制。
有关所有详细信息,请参阅JAX-WS specification。