Я пытаюсь получить правильный текущий URL в JSP в веб-приложении Spring. Я пытаюсь использовать следующий фрагмент в файле JSP:
${pageContext.request.requestURL}
Проблема заключается в том, что возвращаемый URL-адрес содержит префикс и суффикс, определенный UrlBasedViewResolver. Например, правильный URL-адрес:
http://localhost:8080/page
Но возвращается:
http://localhost:8080/WEB-INF/jsp/page.jsp
Лучше всего использовать EL так:
${requestScope['javax.servlet.forward.request_uri']}
В файле jsp:
jsp
request.getAttribute("javax.servlet.forward.request_uri")
Может быть, вы ищете что-то вроде:
<%= new UrlPathHelper().getOriginatingRequestUri(request) %>
Это не так уж и элегантно, но решило мою проблему.
Попробуйте это:
<%@ page import="javax.servlet.http.HttpUtils.*" %> <%= javax.servlet.http.HttpUtils.getRequestURL(request) %>
Любой, кто хочет знать не только запрос URI, например, строку запроса, может проверить все имена переменных в коде RequestDispatcher (Servlet API 3.1+)интерфейс.
RequestDispatcher
Вы можете получить строку запроса следующим образом:
${requestScope['javax.servlet.forward.query_string']}
Вы можете сделать Interceptor и установить атрибут запроса, например,
request.setAttribute("__SELF",request.getRequestURI);
и в jsp
<form action="${__SELF}" ></form>
Я только что нашел правильный ответ на ваш вопрос.Ключ использует Spring Tags.
<spring:url value="" />
Если вы оставите атрибут value пустым, Spring отобразит URL-адрес сопоставления, установленный в вашем @ RequestMapping.
*<% String myURI = request.getAttribute("javax.servlet.forward.request_uri").toString(); %> <% String[] split = myURI.split("/"); %> <% System.out.println("My url is-->"+ myURI + " My url splitter length --->"+split.length +"last value"+split[4]);%> <%-- <jsp:param name="split[4]" value="split[4]" /> --%> <c:set var="orgIdForController" value="<%= split[4] %>" /> <a type="button" class="btn btn-default btn-xs" href="${pageContext.request.contextPath}/supplier/add/${orgIdForController}"> <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add </a> - List item*
Я использовал следующее в аналогичной ситуации. $ {currentUrl} может затем использоваться там, где это необходимо. Нужна базовая библиотека тегов
<c:url value = "" var = "currentUrl" ></c:url>
Какую версию Spring вы используете? Я проверил это с помощью Spring 3.1.1.RELEASE, используя следующее простое приложение:
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 />
При доступе к http://localhost:8080/spring-web/page/home.jsp, URL корректно отображается как http://localhost:8080/spring-web/page/home.jsp.