2013-07-23 3 views
1

스프링 MVC 애플리케이션이 있습니다. 스프링 MVC URL 패턴 - 컨트롤러 추가 유지

내가 샘플 페이지 컨트롤러 (TestController)을 가지고있는 web.xml을

<xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <display-name>Spring Web MVC Application</display-name> 

    <servlet> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <welcome-file-list> 
     <welcome-file>login.jsp</welcome-file> 
    </welcome-file-list> 

</web-app> 

입니다. 요청 매핑

@RequestMapping("/Test") 
class TestController{ 
} 

내가 링크를 처음 클릭 Test, 그 내가 링크를 클릭하면 미세

http://localhost:8008/App/Test 

, 다시 한 번, 그것은 추가입니다 작업을 사용하여 컨트롤러를 호출 오전 다시 한 번 시험하십시오

http://localhost:8008/App/Test/Test 

계속 추가하십시오.

무엇이 문제 일 수 있습니까? 대신 당신의 JSP에

<a href="Test">link</a> 

을 갖는

+1

이것은 봄 mvc와 아무런 관련이 없습니다. href가 올바른 경로를 가리키는 지 확인하십시오. – codeMan

+0

처음에는 괜찮습니다 ..하지만 링크를 클릭하면 다시 !! URL이 첨부됩니다. – madhairsilence

+0

상대 경로를 지정했을 것입니다. 상대 경로를 제거하고 "http : // localhost : 8008/App/Test"를 입력하십시오. – codeMan

답변

2

, 당신은해야

<a href="<c:url value='/Test'/>">link</a> 

(그리고 물론 JSP의 머리에 JSTL 코어 태그 라이브러리 정의를 추가).

이것은 상대 URL (Test)이 아닌 절대 URL (/App/Test)을 사용하며, 응용 프로그램의 컨텍스트 경로 (사용자의 경우 /App)를 URL 앞에 자동으로 추가합니다. 이 링크는 응용 프로그램의 어느 곳에서나 사용할 수 있으며 현재 페이지의 URL이 무엇이든간에 항상 컨트롤러에 알려줍니다.

또 다른 방법은

<a href="${pageContext.request.contextPath}/Test">link</a> 

을 사용하는 것입니다하지만 더 이상 덜 깨끗하고 c:url가하는 같은 URL에 매개 변수를 추가 할 수 없습니다. Spring은 또한 동일한 것을 수행하는 s:url 태그를 가지고있다.

템플릿 엔진으로 freemarker를 사용하는 경우 : 당신이 사용하고 그 질문에 대한 답을 찾고 다른 사람이있을 수 있습니다 ViewResolver를하는 것이 명확하지 않기 때문에

+0

이 패턴/Test를 사용하면 url이 http : // localhost : 8080/Test로 변경됩니다. 그것은 APP에서 나옵니다 – madhairsilence

+1

아니, 그렇지 않습니다. 나는 당신에게'/ Test'를 사용하지 말고''를 사용하라고 말했습니다. 주의 깊게 읽으십시오. –

0

의 추가 항목, Nizet의 답변을 @JB하기 다음과 같이 할 수 있습니다.

템플릿에 있습니다. 그러면 스프링이 올바른 컨텍스트 경로를 만들 수 있습니다. url은 여기 매크로의 이름이고 spring은 템플릿의 참조 이름입니다.

참고 :이 매크로를 사용하기 전에 너무

<#import "spring.ftl" as spring/> 

처럼, 사전에 그에 대한 spring.ftl 템플릿을 가져올 수 있습니다.

관련 문제