Printemps:url de ne pas résoudre correctement les liens
Je suis assez nouveau dans le cadre du Printemps et des applications web, mais je suis expérimenté en Java. Quand je lance mon site en local serveur tomcat l'URL est: http://localhost:8080/myApp/
Maintenant une demande de cartographie des délégués moi à ma page d'accueil avec:
@RequestMapping(value = "/", method = RequestMethod.GET)
public String someMethod(Model model) { ...
return "index"; }
Maintenant dans un fichier index.xhtml
j'ai un lien vers une autre page avec <a href="apps/">link</a>
mais quand je veux faire un lien vers la page d'index-je utiliser <a href="../index/">link</a>
. J'ai cherché une solution et trouvé:
<spring:url value='/apps' var="apps_url" />
<a href="${apps_url}">link</a>
Mais le printemps:l'url des résout toujours à http://localhost:8080/myApp/
- la page que je suis actuellement sur. En outre, lorsque j'utilise juste un lien comme ceci: <a href="/otherSite">link</a>
, il résout toujours à http://localhost:8080/otherSite
et pas http://localhost:8080/myApp/otherSite
comme je l'ai prévu. Comment puis-je obtenir mon lien pour le travail? Est http://localhost:8080/myApp
définis implicitement que mon contexte ou peut/doit-il être changé pour http://localhost:8080/
?
Aussi, est-il un lien entre l'URL sur local serveur tomcat et l'URL de l'application web aura quand c'est publié?
Voici quelques unes de mes fichiers de l'application:
servlet-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="myApp" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- Handles HTTP GET requests for /resources/** and /css/** by efficiently
serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/css/**" location="/css/" />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".xhtml" />
</beans:bean>
</beans:beans>
extrait de web.xml:
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
OriginalL'auteur jeyp | 2012-02-17
Vous devez vous connecter pour publier un commentaire.
Il est de bonne pratique de mettre tous vos liens comme suit
${pageContext.servletContext.contextPath} donne toujours la racine de votre application, lors du développement d'utiliser
http://localhost:8080/myApp
, puis la racine de votre application est /myapp, mais quand vous voulez placer votre application en production généralement à la racine de votre application sera /, à l'aide de ${pageContext.servletContext.contextPath} avant les liens que vous vous assurer qu'il fonctionne dans les deux casJ'ai trouvé mon projet "C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\packageName" - donc je pense que sur la touche "enregistrer" dans eclipse changements sont copiés et chargé par tomcat. mais comment puis-je faire mon projet récupérer corriger l'url de base?
Je ne peux pas dire exactement pourquoi il ne fonctionne pas pour moi encore, mais à l'aide de ${facesContext.externalContext.requestContextPath} retourne le chemin d'accès correct. Afin de recevoir le chemin de contexte comme dans ce post est en quelque sorte la bonne solution. Merci
et comment obtenir de l' ${pageContext.servletContext.contextPath} dans le contrôleur à l'aide de ServletContext par exemple?
OriginalL'auteur Jhonathan
Face à un même problème, j'utilise c liblary:
OriginalL'auteur randomPerson
Cela devrait faire l'affaire:
apps_url doit être égal à: http://localhost:8080/myApp/some_link
http://localhost:8080/myApp/apps
l'url a été résolu àhttp://localhost:8080/myApp/apps
. peut-être il y avait une erreur et la page que vous êtes actuellement sur la sortie par défaut quand quelque chose tombe en panne?OriginalL'auteur darek
Tomcat peut avoir de nombreuses applications web exécutent en même temps. Considérez le scénario:
L'URL http://localhost:8080/ sera d'obtenir la demande de tomcat tomcat doit décider laquelle des trois applications au service de la demande depuis l'URL ne pas identifier l'application à laquelle la demande sera acheminée par tomcat à la RACINE.la guerre qui est la racine de l'application web dans tomcat.
Quand vous avez une JSP dans l'appA.la guerre avec
<a href="/otherSite">link</a>
alors le navigateur web qui analyse à la sortie de la figure que la demande devrait être soumise à la racine du serveur depuis le href commencé avec /par conséquent, le navigateur met togethec l'url http://localhost:8080/otherSite lors de la demande d'obtenir de tomcat tomcat suppose que /otherSite est utilisé en référence à une application web appelée otherSite.à la guerre, mais bien sûr ce n'est pas là.si vous utilisez
<a href="otherSite">link</a>
le navigateur suppose que c'est une URL relative et donc il va envoyer la demande à http://localhost:8080/appA/otherSite parce que la page que générer l'url a été servi à l'extérieur du contexte http://localhost:8080/appADonc, en général, vous devez assurez-vous que l'Url d'une page JSP sont relatives ou que vous ajoutez le nom du contexte de l'url générée, c'est ce que
<spring:url />
et<c:url />
les balises ne.l'URL pour le contexte est le même que le nom du fichier war dans le répertoire webapps de tomcat, sauf si vous modifiez que dans le server.xml ou dans le context.xml fichier.
<spring:url value="myApp/otherSite" ... >
ou<spring:url value="/otherSite" context="myApp">
l'url est toujours réglée à la page, je suis actuellement suressayez quelque chose comme <a href="<printemps:url value="/déconnexion" htmlEscape="true" />">Déconnexion</a> ça marche pour moi
OriginalL'auteur ams