Primavera Serviço RESTful como uma guerra em vez de JAR no Tomcat

votos
15

Eu estou no processo de criação de um serviço web REST Java Primavera. Eu já carregado com êxito STS eo exemplo detalhado em:

Este guia orienta o processo de criação de um 'Olá mundo' serviço web RESTful com a Primavera. http://spring.io/guides/gs/rest-service/

No entanto esse tutorial só vai tão longe .. Eu quero criar um arquivo WAR em vez de um frasco de auto correndo contendo um servlet, e implantar o arquivo WAR. Então eu encontrei este tutorial, e tentou apenas modificar os primeiros tutoriais build.gradle arquivo.

Convertendo um aplicativo JAR Primavera Bota a uma guerra http://spring.io/guides/gs/convert-jar-to-war/

Parecia construir muito bem em um arquivo .war .. o serviço está sendo executado no gerenciador de minha instância do Tomcat .. mas eu recebo 404 de uma vez que eu tentar usar o serviço.

URL 404'd

http://localhost:8080/gs-rest-service-0.1.0/dbgreeting?name=MyName

Eu preciso modificar o mapeamento?

DataBaseController.java

@RequestMapping(/dbgreeting)
    public @ResponseBody DataBaseGreeter dbgreeting(
            @RequestParam(value=name, required=false, defaultValue=World) String name) {
        return new DataBaseGreeter(counter.incrementAndGet(),String.format(template, name));
    }

Agora eu tenho o arquivo .war criado de acordo com uma mistura de coisas .. e preocupado que eu talvez perdido alguma coisa.

Eu já descobri XAMPP no OSX não contém um webapp / pasta, o que me forçou a carregar Tomcat de BitNami empilhar vez. As pessoas geralmente alternar entre XAMPP e outras pilhas com base nessa? ou eu perdi alguma coisa para obter pasta webapp criado no XAMPP?

Publicado 06/11/2013 em 19:35
fonte usuário
Em outras línguas...                            


3 respostas

votos
5

Um WAR é apenas um frasco com properites especiais. Ele precisa ter uma WEB-INF, em que você precisa de um web.xml para descrever sua implantação, todos os arquivos de configuração dependentXML servidor aplicativo, e, geralmente, uma biblioteca, aulas e outras probabilidades e extremidades.

A maneira mais fácil seria usar Maven para criar o seu WAR. Eu acho que você deve ser capaz de simplesmente alterar o tipo de projeto no pom.xml do JAR para a guerra. O tutorial você seguiu parece usar Gradle, que por sua vez usa Maven creio eu, então você deve ter um lá em algum lugar. Fora isso, o Google para tutoriais sobre como construir um WAR. Eu não acredito que Tomcat requer quaisquer descritores de implementação especiais, assim você só deve precisar do .xml web.

Respondeu 06/11/2013 em 20:43
fonte usuário

votos
1

Eu seria de esperar para ver alguma saída INFO quando um aplicativo de inicialização primavera começa assim que algumas idéias são:

Tente uma instância tomcat regulares

  • Faça o download e extrair a distribuição zip .
  • Comece tomcat com bin/startup.sh
  • Copie sua guerra ao webappsdiretório
  • Verifique os logs ... espero ver alguma evidência de primavera arranque

inspecionar manualmente o arquivo de guerra

  • Descompacte o arquivo de guerra
  • Esperar para ver WEB-INF / web.xml
Respondeu 06/11/2013 em 21:45
fonte usuário

votos
2

( Resposta do OP mudou-se de questão aqui )

Boy eu me sinto realmente estúpido .. descobriu que havia mais para o tutorial depois de alterar as instruções Gradle .. incluindo o Auto Configuration muito necessário que substitui / substitui a necessidade de um web.xml

Solução

Inicializar o servlet

Anteriormente, a aplicação continha um public static void main()método que a mola de arranque-Gradle-encaixe foi configurado para correr ao usar o java -jarcomando.

Ao converter isso em um arquivo WAR sem arquivos XML, você precisa de um sinal diferente para o recipiente servlet sobre como iniciar o aplicativo.

src / main / java / Olá / HelloWebXml.java

package hello;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;

public class HelloWebXml extends SpringBootServletInitializer {

  @Override
  protected void configure(SpringApplicationBuilder application) {
     application.sources(Application.class);
  }

}

Vai dar crédito para a primeira resposta, mas ambos estavam corretos que era necessário o web.xml (ou o que Primavera-Boot usa para substituí-lo).

Respondeu 03/08/2016 em 07:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more