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:
Mais celui retourné est:
La meilleure façon serait d'utiliser EL comme ceci:
${requestScope['javax.servlet.forward.request_uri']}
Dans un fichier jsp
:
request.getAttribute("javax.servlet.forward.request_uri")
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.
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']}
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.
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>
Essaye ça:
<%@ page import="javax.servlet.http.HttpUtils.*" %>
<%= javax.servlet.http.HttpUtils.getRequestURL(request) %>
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 .