복붙노트

[SPRING] Spring webapp에서 JSP로 올바른 현재 URL을 얻는 방법

SPRING

Spring webapp에서 JSP로 올바른 현재 URL을 얻는 방법

Spring webapp의 JSP에서 올바른 현재 URL을 얻으려고합니다. JSP 파일에서 다음 조각을 사용하려고합니다.

${pageContext.request.requestURL}

문제는 반환 된 URL에 UrlBasedViewResolver에 의해 정의 된 접두사와 접미사가 포함되어 있다는 것입니다. 예를 들어 올바른 URL은 다음과 같습니다.

http : // localhost : 8080 / page

하지만 반환 된 것은 다음과 같습니다.

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

해결법

  1. ==============================

    1.가장 좋은 방법은 EL을 다음과 같이 사용하는 것입니다.

    가장 좋은 방법은 EL을 다음과 같이 사용하는 것입니다.

    ${requestScope['javax.servlet.forward.request_uri']}
    
  2. ==============================

    2.jsp 파일에서 :

    jsp 파일에서 :

    request.getAttribute("javax.servlet.forward.request_uri")
    
  3. ==============================

    3.어쩌면 당신은 다음과 같은 것을 찾고있을 것입니다 :

    어쩌면 당신은 다음과 같은 것을 찾고있을 것입니다 :

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

    이것은 우아하지는 않지만 내 문제를 해결했습니다.

  4. ==============================

    4.방금 귀하의 질문에 대한 정답을 찾았습니다. 핵심은 스프링 태그를 사용하고 있습니다.

    방금 귀하의 질문에 대한 정답을 찾았습니다. 핵심은 스프링 태그를 사용하고 있습니다.

    <spring:url value="" />
    

    value 속성을 비워두면 Spring은 @RequestMapping에 설정된 매핑 URL을 표시합니다.

  5. ==============================

    5.Interceptor를 만들고 요청 속성을 설정할 수 있습니다.

    Interceptor를 만들고 요청 속성을 설정할 수 있습니다.

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

    그리고 jsp에서

      <form action="${__SELF}" ></form>   
    
  6. ==============================

    6.이 시도:

    이 시도:

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

    7.요청 URI 이외의 다른 정보 (예 : 쿼리 문자열)를 알고 싶은 사람은 RequestDispatcher (Servlet API 3.1+) 인터페이스의 코드에서 변수의 이름을 모두 확인할 수 있습니다.

    요청 URI 이외의 다른 정보 (예 : 쿼리 문자열)를 알고 싶은 사람은 RequestDispatcher (Servlet API 3.1+) 인터페이스의 코드에서 변수의 이름을 모두 확인할 수 있습니다.

    다음과 같이 쿼리 문자열을 얻을 수 있습니다.

    ${requestScope['javax.servlet.forward.query_string']}
    
  8. ==============================

    8.어떤 Spring 버전을 사용하고 있습니까? 나는 Spring 3.1.1.RELEASE에서 이것을 테스트했다. 다음 간단한 애플리케이션을 사용한다.

    어떤 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로 올바르게 표시됩니다.

  9. ==============================

    9.나는 비슷한 상황에서 다음을 사용했다. 필요한 경우 $ {currentUrl}을 사용할 수 있습니다. 핵심 태그 라이브러리가 필요합니다.

    나는 비슷한 상황에서 다음을 사용했다. 필요한 경우 $ {currentUrl}을 사용할 수 있습니다. 핵심 태그 라이브러리가 필요합니다.

    <c:url value = "" var = "currentUrl" ></c:url>
    
  10. ==============================

    10.

    *<% 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*
    
  11. from https://stackoverflow.com/questions/9711896/how-to-get-correct-current-url-in-jsp-in-spring-webapp by cc-by-sa and MIT license