2

Spring MVC アプリがあります。

これは 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>

サンプルページコントローラー(TestController)があります。リクエストマッピングあり

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

を使用してコントローラーを呼び出していますTest

初めてリンクをクリックすると、正常に動作します

http://localhost:8008/App/Test

リンクをクリックすると、もう一度テストが追加されます

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

そしてそれは追加し続けます。

何が問題になる可能性があります。

4

2 に答える 2

2

持つ代わりに

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

あなたのJSPで、あなたは持っているべきです

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

(もちろん、JSTL コアの taglib 定義を JSP の先頭に追加します)。

/App/Testこれにより、相対 URL ( ) ではなく絶対 URL ( ) が使用されTest、アプリケーションのコンテキスト パス (この場合) が URL の先頭に自動的に追加/Appされます。このリンクは、アプリケーションのどこからでも使用でき、現在のページの URL が何であれ、常にコントローラーを指します。

別の方法は、使用することです

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

しかし、それはより長く、きれいではなく、URL にパラメーターを追加することはできませんc:url。Spring にもs:url同じことを行うタグがあることに注意してください。

于 2013-07-23T11:44:04.270 に答える
0

@JB Nizetの回答への追加。使用しているviewResolverが明確ではなく、その質問に対する回答を探している他の人がいる可能性があるためです。

テンプレート エンジンとしてfreemarkerを使用している場合は、次のように実行できます。

<a href="<@spring.url '/Test' />">link</a>

あなたのテンプレートで。これにより、Spring が正しいコンテキスト パスを作成できるようになります。 urlここでのマクロのspring名前であり、テンプレートの参照名です。

注: そのために事前に spring.ftl-template をインポートする必要があります。

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

マクロを使用する前に。

于 2013-10-09T14:28:33.487 に答える