Cambiare la porta e il context-path in Spring Boot

di il
1 risposte

Cambiare la porta e il context-path in Spring Boot

Il testo che sto leggendo mostra come cambiare il context-path in Spring Boot e fare altre cosette molto interessanti ma quando edito application.properties nel modo seguente come l'autore suggerisce nel libro:
logging.level.root=INFO
server.port=9090
server.servlet.context-path=/demo
server.servlet.path=/app
e punto il browser a questo indirizzo:
http://localhost:9090/demo/app/index.js
Chrome mi scarica in automatico il file index.jsp seguente:

<!DOCTYPE html>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<html>
<head>
<title>SpringBoot JSP</title>
</head>
<body>
<h2>${title}</h2>
<h3><%=request.getAttribute("content") %> </h3>
</body>
</html>
La webapp è questa:
https://github.com/Apress/beg-spring-boot-2/tree/master/chapter-10/springboot-war-demo
e scrive due stringhe in una pagina index.jsp con un Controller, non fa nulla di particolare. L'obbiettivo dell'esercizio è illustrare la struttura base di un'applicazione web e questo codice che però non funziona:

server.port=9090
server.servlet.context-path=/demo
server.servlet.path=/app
Altra cosa che non capisco è cosa fa questa classe di test:

package com.apress.demo;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import com.apress.demo.SpringbootWarDemoApplication;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootWarDemoApplication.class)
@WebAppConfiguration
public class SpringbootWarDemoApplicationTests {

	@Test
	public void contextLoads() {
	}

}
Trovo un metodo vuoto che non mi dice nulla. Sapreste illustrarmela brevemente?

1 Risposte

  • Re: Cambiare la porta e il context-path in Spring Boot

    giannino1995 ha scritto:


    questo codice che però non funziona:
    
    server.port=9090
    server.servlet.context-path=/demo
    server.servlet.path=/app
    
    Il server.servlet.context-path vale SOLO nel caso di server embedded. Se fai un war non conta. Perché? Perché quando si fa il deploy di un war, di norma quello che conta è il nome del war!! Se metti nella /webapps di Tomcat un pippo.war .... il context path della applicazione sarà ... pippo!! Punto. Non è l'applicazione che può controllarlo (EDIT: nota sotto).

    Nota: in realtà con Tomcat si può fare. Lo dice la documentazione: https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context

    In an individual file at /META-INF/context.xml inside the application files.

    Cioè si può mettere dentro la webapp quel context.xml che contiene un <Context path="....."/>

    Ma è una cosa molto extra (e specifica di Tomcat) e non molto usata. Consiglio ... ignorala per ora, vai avanti ...


    Idem sicuramente per server.port. Se usi un server embedded, l'applicazione ha il controllo sull'avvio del server. Se invece fai il deploy di un war su un Tomcat a parte, esso ha già tutte le sue configurazioni di porte, ecc.. nella /conf. E non è l'applicazione che può "sovvertire" la porta del server come caspita gli pare ... !

    Su server.servlet.path invece credo sia usabile anche in war. Dopotutto questo è il path del DispatcherServlet, che è una cosa interna alla webapp (equivalente a specificare il url-mapping del DispatcherServlet nel web.xml). Ma dovrei provare ...

    Ragiona di più su queste cose .... altrimenti davvero non vai avanti ...

    giannino1995 ha scritto:


    Altra cosa che non capisco è cosa fa questa classe di test:
    [...]
    Trovo un metodo vuoto che non mi dice nulla. Sapreste illustrarmela brevemente?
    In effetti il libro non lo spiega .... ma è comunque banale. Si tratta solo un di test basilare per verificare che il contesto di Spring venga caricato correttamente. Se così non fosse, il test fallisce ..... e te ne accorgi. Anzi, se il contesto di Spring non parte, NON arriverebbe neanche ad eseguire il test.

    Quindi è da prendere un po' con i guanti. In quel progetto, quello è l'UNICO test, quindi vabbé, può avere senso verificare almeno se il contesto parte. Se ci fossero anche altri test, molto probabilmente quel tipo di test sarebbe abbastanza inutile/superfluo. Perché se il contesto non parte neanche gli altri test potrebbero essere eseguiti ... e te ne accorgi comunque lo stesso!

    Non è una cosa importante (e non necessariamente si deve fare .... io non l'ho mai fatto), vai avanti ...
Devi accedere o registrarti per scrivere nel forum
1 risposte