2012-03-14 12 views
30

मैं वसंत वेबपैप में जेएसपी में एक सही वर्तमान यूआरएल प्राप्त करने की कोशिश कर रहा हूं। मैं JSP फ़ाइल में निम्नलिखित टुकड़ा का उपयोग करने के कोशिश कर रहा हूँ:स्प्रिंग वेबएप में जेएसपी में सही वर्तमान यूआरएल कैसे प्राप्त करें

${pageContext.request.requestURL} 

मुद्दा यह है कि लौटे यूआरएल उपसर्ग और प्रत्यय UrlBasedViewResolver द्वारा परिभाषित होता है। उदाहरण के लिए सही URL है:

http://localhost:8080/page

लेकिन लौटे एक है:

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

+0

आप निरपेक्ष URL की ज़रूरत है

आप इस तरह क्वेरी स्ट्रिंग मिल सकता है? या आप बस अपने आवेदन में किसी अन्य पृष्ठ के लिए एक आंतरिक लिंक बनाना चाहते हैं? – jddsantaella

+1

मुझे पूर्ण यूआरएल की आवश्यकता है। – user405935

उत्तर

0

कौन सा स्प्रिंग संस्करण का उपयोग कर रहे हैं? मैं वसंत 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 के रूप में प्रदर्शित किया जाता है।

+0

मैं भी वसंत 3.1.1 का उपयोग कर रहा हूँ। मुझे जो चाहिए वह एक यूआरएल है जिसे नियंत्रक द्वारा मैप किया जाता है। उदाहरण के लिए यदि आपके पास @RequestMapping ("/ home") वाला नियंत्रक था जो पृष्ठ/home.jsp को दृश्य के रूप में उपयोग करेगा, तो उस jsp में $ {pageContext.request.requestURL} का उपयोग करके http: // localhost: 8080 /spring-web/page/home.jsp लेकिन ब्राउज़र में यह http: // localhost: 8080/spring-web/home होगा। – user405935

3

मुझे अभी आपके प्रश्न का सही उत्तर मिला है। कुंजी वसंत टैग का उपयोग कर रहा है।

<spring:url value="" /> 

यदि आप मान विशेषता खाली रखते हैं, तो वसंत आपके @RequestMapping में मैपिंग यूआरएल सेट प्रदर्शित करेगा।

+6

यह मेरे मामले में कुछ भी प्रदर्शित नहीं करता है:/ – user405935

+0

Wierd, आपने क्या प्रयास किया? –

+0

मुझे विश्वास है कि लक्ष्य खाली होने पर ब्राउज़र वर्तमान यूआरएल का उपयोग करेगा। क्या सर्वर/वेबएप भी है? – DerMike

5

हो सकता है कि आप की तरह कुछ के लिए देख रहे हैं:

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

यह है कि सुरुचिपूर्ण नहीं है, लेकिन मेरी समस्या हल।

6

एक jsp फ़ाइल में:

request.getAttribute("javax.servlet.forward.request_uri") 
+0

धन्यवाद। आपके कोड ने वास्तव में मेरी मदद की –

+0

मैंने इस समय की तलाश में बिताया और यह काम कर रहा है –

+0

एक शून्य देता है। –

41

सबसे अच्छा तरीका है EL इस तरह उपयोग करने के लिए होगा:

${requestScope['javax.servlet.forward.request_uri']} 
+1

यह पूरी तरह से काम करता है। यह मूल यूआरएल और क्वेरी स्ट्रिंग के बिना वर्तमान एक्शन यूआरएल देता है। –

+0

यह काम नहीं करता है। यह ओपी द्वारा प्रश्न में टिप्पणियों में अनुरोध किए गए पूर्ण URL.as को वापस नहीं करता है। –

-1

मैं एक ऐसी ही स्थिति में निम्नलिखित का इस्तेमाल किया। $ {currentUrl} तब आवश्यक हो सकता है जहां आवश्यक हो। कोर टैग लाइब्रेरी

<c:url value = "" var = "currentUrl" ></c:url> 
2

आप इंटरसेप्टर बना सकते हैं और अनुरोध विशेषता सेट कर सकते हैं उदा।

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

और jsp में

<form action="${__SELF}" ></form> 
-2
*<% 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* 
3

जो कोई reuqest यूआरआई के अलावा अन्य के बारे में जानना चाहता है, उदाहरण के लिए एक क्वेरी स्ट्रिंग, आप कोड में चर के सभी नामों की जांच कर सकते RequestDispatcher (सर्वलेट एपीआई 3.1+) इंटरफ़ेस का।

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

इस प्रयास करें::

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

सिवाय इसके कि getRequestURL को बहिष्कृत किया गया है ... –

+0

धन्यवाद, ऊपर की ओर, कृपया nondepercated विकल्प के साथ संपादित करें। –

+0

मुझे नहीं पता कि इस पुराने कमांड को क्या बदलता है। –

संबंधित मुद्दे