【问题标题】:How can i create a java web service that supports multiple client requests using only java SE?如何创建仅使用 java SE 支持多个客户端请求的 Java Web 服务?
【发布时间】:2014-06-20 20:57:46
【问题描述】:

我的任务是创建一个接受来自多个客户端的请求的 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 的答案

【问题讨论】:

  • 那个政策是无稽之谈,JavaEE 只是一个包含一组 API 和标准的规范,其中 JAX-WS 就是其中之一。因此,如果您使用该单一 API,那么您会将一些 JEE 规范引入您的应用程序。猜猜像 Glassfish 这样的 JEE 容器是用什么构建的?它是一个 JavaSE 应用程序。都是一样的:Java。因此,创建排除其中一个或另一个的策略从一开始就是失败的,只是证明平台不被理解。
  • @Gimby 也许我应该更明确一点,这是因为这个项目使用了不支持 java ee 的 intellij idea 社区版。现在显然有一些争论认为 IDE 并不重要,但事实是使用 IDEA 社区使用 Java EE 的基本 api 和标准要困难得多。如果不可能,我将使用 eclipse 而不是从头开始构建。但我得到一个事实,那就是只使用 java SE 是非常可取的。

标签: java web-services


【解决方案1】:

我认为您要实现的是异步 Web 服务。以下链接告诉您如何在 Java SE 中实现它。

http://java.dzone.com/articles/asynchronous-java-se-web

【讨论】:

    【解决方案2】:

    您可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2014-09-04
      • 2014-05-24
      相关资源
      最近更新 更多