ejemplo - spring mvc example
Cómo obtener la URL actual correcta en JSP en Spring webapp (10)
¿Qué versión de primavera estás usando? He probado esto con Spring 3.1.1.RELEASE, usando la siguiente aplicación simple:
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 />
Al acceder a http://localhost:8080/spring-web/page/home.jsp , la URL se muestra correctamente como http://localhost:8080/spring-web/page/home.jsp .
Estoy tratando de obtener una URL actual correcta en JSP en la aplicación web Spring. Estoy tratando de usar el siguiente fragmento en el archivo JSP:
${pageContext.request.requestURL}
El problema es que la URL devuelta contiene el prefijo y el sufijo definidos por UrlBasedViewResolver. Por ejemplo, la URL correcta es:
Pero el devuelto es:
Acabo de encontrar la respuesta correcta para tu pregunta. La clave es usar Spring Tags.
<spring:url value="" />
Si coloca el atributo de valor en blanco, Spring mostrará la URL de asignación establecida en su @RequestMapping.
Cualquier persona que desee saber acerca del URI que no sea el reuqest, por ejemplo, una cadena de consulta, puede verificar todos los nombres de las variables en el código de la interfaz RequestDispatcher (de Servlet API 3.1+).
Puede obtener la cadena de consulta de esta manera:
${requestScope[''javax.servlet.forward.query_string'']}
En un archivo jsp
:
request.getAttribute("javax.servlet.forward.request_uri")
La mejor manera sería usar EL como este:
${requestScope[''javax.servlet.forward.request_uri'']}
Prueba esto:
<%@ page import="javax.servlet.http.HttpUtils.*" %>
<%= javax.servlet.http.HttpUtils.getRequestURL(request) %>
Puede hacer que Interceptor y establecer atributo de solicitud, por ejemplo
request.setAttribute("__SELF",request.getRequestURI);
y en jsp
<form action="${__SELF}" ></form>
Tal vez estás buscando algo como:
<%= new UrlPathHelper().getOriginatingRequestUri(request) %>
Esto no es tan elegante, pero resolvió mi problema.
Usé lo siguiente en una situación similar. $ {currentUrl} se puede usar cuando sea necesario. Necesita biblioteca de etiquetas principales
<c:url value = "" var = "currentUrl" ></c:url>
*<% 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*