2012-12-04 15 views
6

Kiedy tworzę projekt Spring MVC Template z SpringSource IDE, uruchamiam aplikację, a główny URL jest ustawiony jako ostatnie słowo domyślnej nazwy pakietu:SpringSource IDE nie używa nazwy projektu jako root URL dla aplikacji Spring MVC

Na przykład, po utworzeniu projektu ustawiam domyślny pakiet jako com.sample.myapp. Po uruchomieniu aplikacji otwiera się pod numerem http://localhost:8080/myapp. Dlaczego zamiast tego główny adres URL nie używa mojej nazwy projektu, MyProject?

To jest problem, ponieważ muszę podać wszystkie adresy URL w mojej aplikacji na /myapp/resources/css/mycss.css, ale kiedy eksportuję plik .war i wdrażam go na serwerze Tomcat, to Tomcat oczekuje zamiast tego nazwy projektu (chce, żebym użył /MyProject/resources/css/mycss.css. w rezultacie, wszystkie moje linki są łamane gdy wdrożyć (ale nie wtedy, gdy biegnę na Tomcat lokalnie w SpringSource IDE ...)

Czy ktoś bieg do tego problemu?


Przykład komentarza poniżej:

<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"> 
    <property name="service" 
     value="https://localhost:8443/MyProject/j_spring_cas_security_check" /> 
    <property name="sendRenew" value="false" /> 
</bean> 

Odpowiedz

10

To zależy od tego, w jaki sposób uruchom aplikację. Zakładam, że wybrałeś "Uruchom na serwerze" z SpringSource IDE (STS)? Jeśli klikniesz dwukrotnie na definicję serwera w STS, zobaczysz zakładkę "moduły". Stamtąd możesz edytować "Ścieżkę" i ustawić ją w dowolny sposób. Po wybraniu "Uruchom na serwerze", STS musi zdefiniować ścieżkę kontekstu i po prostu domyślnie ustawia ją na ostatni element pakietu domyślnego. Jeśli przypominam sobie poprawnie, domyślnie Tomcat używa nazwy pliku spakowanej lub rozbitej .war. W obu przypadkach można go wyprzedzić.

Nadzieję, że pomaga.

+0

Twoje założenie było poprawne i właśnie tego szukałem. Dziękuję Ci bardzo! – littleK

+0

Dobra odpowiedź, rozwiązany mój problem +1 – SpringLearner

0

Nie jestem pewien STS, ale nazwa pliku war jest ustawiony w pliku pom:

</dependencies>  
<build> 
<finalName>yourProject</finalName> 

(sobie sprawę, że nie określił Maven, oh dobrze)

3

Pierwsza część adresu URL po hoście i porcie nazywana jest ścieżką kontekstową. W twoim przypadku myapp. W tomcat ścieżka kontekstu jest równa nazwie pliku wojennego. Jeśli nazwiesz plik wojenny ROOT.war, używana jest ścieżka kontekstu .

Jak wspomniano wcześniej bimsapi, można również zmienić ścieżkę kontekstu w STS.

Ale: Możesz i powinieneś ustawić swoją aplikację niezależnie od ścieżki kontekstu. Jeśli używasz JSP następnie budować więzi z tagiem <c:url />:

<c:url value="/resources/css/mycss.css" /> 

Ten wysyła prawidłowy adres URL w tym rzeczywistego kontekstu ścieżki. Albo twój może przechowywać go w zmiennej i używać go później:

<c:url value="/items/index" var="cancel-url" /> 
<a href="${cancel-url}">Cancel</a> 

W kodzie Javy można uzyskać ścieżkę kontekstowe z:

request.getContextPath() 

gdzie prośba jest obecny HttpServletRequest przedmiot. Dzięki temu aplikacja jest całkowicie niezależna od rzeczywistej ścieżki kontekstu, co znacznie upraszcza wdrażanie.

+0

To było bardzo pouczające, dziękuję. Zaczynałem patrzeć na sposób, w jaki nie musiałbym sztywno zakodować nazwy aplikacji w moim adresie URL i wygląda na to, że to wystarczy! Dzięki! – littleK

+0

Florian, jeszcze jedno pytanie. Mam również niektóre adresy URL w moim pliku applicationContext-security.xml, w którym wpisuję hardcode w ścieżce kontekstu. Czy znasz zalecany sposób dostosowania adresów URL do definicji komponentów bean? – littleK

+0

Jaki to jest adres URL? Jeśli jest to dla bezpieczeństwa wiosennego, wystarczy podać względny adres URL bez ścieżki kontekstu, jak poniżej:

Powiązane problemy