Bem, estou longe de ser “fera” no assunto, mas, talvez eu possa dar alguma esclarecida:
Quando você trabalha com Web Services, você de certa forma passa a ter “dois projetos”: um com o seu serviço, e outro o cliente que irá consumir o serviço. (claro, vc pode ter mais de um projeto contendo o serviço, ou n clientes que consumem).
Para construir o serviço, por exemplo em Java, você utiliza tecnologias como Axis ou Apache CXF (devem ter outras, mas, esses dois são os únicos que já utilizei). Nele, você vai identificar quais classes são os seus serviços, e vai codificar a regra desejada nas mesmas. Após tudo pronto, você vai gerar um wsdl destes serviços (os frameworks geralmente automatizam isso para você) e vai publicá-lo em algum servidor: Tomcat, JBoss, Glassfish, etc. Pronto, seu serviço já pode ser acessado na rede.
Agora, você já tem um cliente pronto, em Struts, que precisa consumir este serviço. Tudo o que você precisa fazer (em teoria, nunca acessei um ws a partir do Struts) é modificar a classe que precisa acessar este serviço (uma Action, por exemplo) para incluir o trecho de código que faz a chamada para o serviço. Tem várias formas de fazer isso, você pode por exemplo gerar stubs e incluir no seu cliente. Aqui normalmente fazemos algo assim:
URL wsdlURL = new URL("http://www.endereco_do_seu_servidor/nomeDoServico?wsdl");
QName SERVICE_NAME = new QName("http://namespace_para_o_servico/", "NomeDoServico");
Service wsService = Service.create(wsdlURL, SERVICE_NAME);
InterfaceDoSeuServico servico = wsService.getPort(InterfaceDoSeuServico.class);
String retorno = servico.algumMetodo("parametros");
Utilizamos algo nesse estilo para o CXF (foi o último que usei, está mais fresco na minha memória). Presumo que você faria algo similar dentro de alguma classe no projeto cliente. aí, para decidir em qual classe isso deve ser feito depende das decisões de arquitetura do seu projeto. Talvez na Action não seja o melhor lugar, por exemplo.
Enfim, eu pretendia dar uma visão geral de como a coisa funciona, espero que tenha conseguido. Importante observar que isso aí independe de qual servidor web/aplicação você está usando. Você pode ter seu cliente Struts no Tomcat, e colocar o serviço dentro de um JBoss por exemplo.