web-dev-qa-db-fra.com

Comment obtenir l'URL actuelle correcte dans JSP dans Spring Webapp

J'essaie d'obtenir une URL actuelle correcte dans JSP dans Spring Webapp. J'essaie d'utiliser le fragment suivant dans le fichier JSP:

${pageContext.request.requestURL}

Le problème est que l'URL renvoyée contient le préfixe et le suffixe définis par UrlBasedViewResolver. Par exemple, l'URL correcte est:

http: // localhost: 8080/page

Mais celui retourné est:

http: // localhost: 8080/WEB-INF/jsp/page.jsp

35
user405935

La meilleure façon serait d'utiliser EL comme ceci:

${requestScope['javax.servlet.forward.request_uri']}
46
Paulius Matulionis

Dans un fichier jsp:

request.getAttribute("javax.servlet.forward.request_uri")
5
andy

Vous cherchez peut-être quelque chose comme:

<%= new UrlPathHelper().getOriginatingRequestUri(request) %>

Ce n'est pas si élégant mais ça a résolu mon problème.

5
izilotti

Quiconque souhaite en savoir plus que l'URI le plus reuqest, par exemple une chaîne de requête, vous pouvez vérifier tous les noms des variables dans le code RequestDispatcher (de l'API Servlet 3.1+ ) interface.

Vous pouvez obtenir la chaîne de requête comme ceci:

${requestScope['javax.servlet.forward.query_string']}
3
Sanghyun Lee

Je viens de trouver la bonne réponse à votre question. La clé est d'utiliser des balises Spring.

<spring:url value="" />

Si vous mettez l'attribut value vide, Spring affichera l'URL de mappage définie dans votre @RequestMapping.

3
Rubens Mariuzzo

Vous pouvez créer Interceptor et définir l'attribut de demande, par exemple.

  request.setAttribute("__SELF",request.getRequestURI);

et en jsp

  <form action="${__SELF}" ></form>   
3
Vicky

Essaye ça:

<%@ page import="javax.servlet.http.HttpUtils.*" %>
<%= javax.servlet.http.HttpUtils.getRequestURL(request) %> 
3
Damir Olejar

Quelle version Spring utilisez-vous? J'ai testé cela avec Spring 3.1.1.RELEASE, en utilisant l'application simple suivante:

Folder structure
-----------------------------------------------------------------------------------

spring-web
    |
     --- src
          |
           --- main
                 |
                  --- webapp
                         |
                          --- page
                         |     |
                         |      --- home.jsp
                         |
                          --- WEB-INF
                               |
                                --- web.xml
                               |
                                --- applicationContext.xml

home.jsp
-----------------------------------------------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html dir="ltr" lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Welcome to Spring Web!</title>
    </head>
    <body>
        Page URL: ${pageContext.request.requestURL}
    </body>
</html>

web.xml
-----------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://Java.Sun.com/xml/ns/javaee" metadata-complete="true" version="2.5" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<display-name>org.example.web</display-name>

<servlet>
    <servlet-name>spring-mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/webContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring-mvc-dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>

applicationContext.xml
-----------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">

<context:annotation-config />
<context:component-scan base-package="org.example" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/page/" />
    <property name="suffix" value=".jsp" />
</bean>

<mvc:annotation-driven />

Lors de l'accès à http: // localhost: 8080/spring-web/page/home.jsp , l'URL est correctement affichée comme http: // localhost: 8080/spring-web/page /home.jsp .

0
manish