1

コントローラーによる静的リソースへのリクエストのインターセプトに問題があります。

これがweb.xmlです(問題に関連する部分):

<servlet>
    <servlet-name>testing</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>testing</servlet-name>
    <url-pattern>/testing/*</url-pattern>
</servlet-mapping>

ここに testing-servlet.xml があります:

<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

コントローラ クラスのソース コードは次のとおりです。

@Controller
@RequestMapping(value = "/testing")
public class TestingController {
    @RequestMapping(method = RequestMethod.GET)
    public String doSomething() {
        return "doView";
    }

    @RequestMapping(value = "/getSomething", method = RequestMethod.GET)
    public String getSomething(@RequestParam String id) {
        return "getView";
    }
}

そして、JavaScript を使用した静的ファイルの宣言を含む doView.jsp および getView.jsp ファイルの最後のスニペット:

<script src="testing/resources/js/jquery.js"></script>

理解できないことが 1 つあります。入力するだけhttp://localhost:8080/app/testingで doView.jsp を取得するのに、getView.jsp を取得するには入力する必要があるのはなぜですかhttp://localhost:8080/app/testing/testing/getSomething(「testing」を 2 回入力)。

そして今、このトピックの主な理由 - クラス定義からリクエストマッピングアノテーションを削除すると (@RequestMapping(value = "/testing")メソッドにそれらを残すと、jquery.js ファイルをまったく取得できなくなります。入力するとhttp://localhost:8080/app/testing/resources/js/jquery.jsdoView.jsp が取得されます。 「ブラウザーの開発者ツールによって報告された問題 (jquery.js ファイルの欠落など) はありません。この要求は、Spring のディスパッチャー サーブレットによって傍受されただけです。この構成の唯一の利点は、"testing" を 2 回入力する必要がないことです。 getView.jsp を開くように指示します。;)

mvc:resourcesこのような状況でタグを機能させる方法を知っている人はいますか? いいえ、テスト サーブレット全体の URL マッピングを「/」に設定することはできません。;)

4

2 に答える 2

1

最初に質問の最初の部分ですが、これは正常な動作です。Dispatcher サーブレットの url-pattern として宣言/testing/*しました。これは、/testing/ の後に現れるすべての「もの」が春によって考慮され、傍受されることを意味します。次に、注釈を追加し、@RequestMappingその値パラメーターを入力するとtesting、混乱が生じる可能性があります。テストの代わりに/ANOTHER_NAMEurl-patternを使用し、コントローラー定義に対するリクエスト マッピングを testingとして使用することを検討してください。

2番目の部分では、jsファイルを/src/main/resources内に配置したようです。これプライベートで保護されたフォルダーです。/src/webapp/public-resources内に配置してから構成することを検討してください。次のように:

<mvc:resources mapping="/resources/**"
           location="/, classpath:/WEB-INF/public-resources/"
           cache-period="10000" />
于 2013-11-13T13:44:40.827 に答える
0

この瓶を追加してください

<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:annotation-driven/>

この jar は自動的に maven/pom.xml 構造でダウンロードされますが、独自のライブラリの場合は、この jar を配置する必要がありますhamcrest-core-1.3.jar

于 2014-05-29T13:42:54.637 に答える