簡體   English   中英

如何在JAVA中將會話用於JAX-WS Web服務

[英]How to use sessions for JAX-WS web service in JAVA

我在netbeans中創建了JAVA Web服務和客戶端應用程序。 客戶端應用程序通過常規WebMethod連接到Web服務。 我想知道如何使用會話連接到Web服務。 還請告訴我們,有一種更好的方法可以從客戶端應用程序訪問Web服務,而不僅僅是為每個請求調用Web方法嗎?

Below is code example that shows, how to implement session in JAXWS



  /* server code */

    package com.foo.ws.session;
    import javax.annotation.Resource;
    import  javax.jws.WebService;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.xml.ws.WebServiceContext;
    import javax.xml.ws.WebServiceException;
    import javax.xml.ws.handler.MessageContext;
    @WebServicepublic class Hello {

    //webServiceContext is injected by the JAXWS API
    @Resource private WebServiceContext wsContext;

    @WebMethod public int getCounter(){

           MessageContext mc = wsContext.getMessageContext();
          HttpSession session = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
          // Get a session property "counter" from context
          if (session == null)
              throw new WebServiceException("No session in WebServiceContext");
          Integer counter = (Integer)session.getAttribute("counter");
          if (counter == null) {
               counter = new Integer(0);
               System.out.println("Starting the Session");
          }
        counter = new Integer(counter.intValue() + 1);
        session.setAttribute("counter", counter);
        return counter;
      }
    }



/* client code*/

package com.foo.ws.session.client;
import java.util.Map;
import javax.xml.ws.BindingProvider;
public class ClientMain {
public static void main(String[] args) {
      Hello proxy = new HelloService().getHelloPort();
      //setting requestContext so that session could be maintained through client and server
      Map requestContext = ((BindingProvider)proxy).getRequestContext();
      requestContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
      int result = proxy.getCounter();
      System.out.println(result);
      result = proxy.getCounter();
      System.out.println(result);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM