1

私はこのディレクトリ構造を持っています:

webapp
 - resources
   - custom.js
   - base.css
 - WEB-INF
 - views
   - layout.vm
   - top.vm
   - footer.vm
   - index.vm
   - FolderA
     - restricted.vm

私のlayout.vmは次のとおりです。

#parse('top.vm')
$screen_content
#parse('footer.vm')

私の top.vm 構成には、次の JS および CSS ファイルが含まれます。

<link href="resources/base.css" rel="stylesheet">
<script src="resources/custom.js"></script>

http://www.example.com:8080/indexページにアクセスすると、JS ファイルと CSS ファイルが見つかります。しかし、http://www.example.com:8080/FolderA/restrictedにアクセスすると、JS ファイルと CSS ファイルが見つかりません。一番上で変更すると機能します

しかし、インデックス ページが壊れています。

適切なビューを返すためにスプリング コントローラーを使用しています。たとえば、次はインデックス ページを返します。

@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {       
    return "index";
}

そして、これは制限されたビューを返します:

@Controller
@RequestMapping(value = "/FolderA")
public class SomeController {

    @RequestMapping(value = "", method = RequestMethod.GET)
    public String secured(Model model) {

        return "FolderA/restricted";
    }

この問題を解決する方法について何か提案はありますか?

余談ですが、通常のjspファイルを使用しているときにもこの問題に直面していましたが、<c:url ..>. これが速度でどのように解決できるかわかりません。

4

1 に答える 1

2

これは、宣言したリソースが、ビューへのアクセスに使用される URL に対して相対的であるためです。すべての静的リソース URL を絶対に変更する必要がありますタグを使用してこれを行うことができます

ここから変更

<script src="resources/custom.js"></script>

<script src="<c:url value="/resources/custom.js"/>"></script>

これにより、HTMLで次のようなものが生成されるはずです

<script src="<c:url value="http://www.example.com:8080/FolderA/resources/custom.js"/>">
</script>

注: ただし、これを機能 %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>させるには、jsp に追加し、jst タグ ライブラリを webapp に含める必要があります。

編集 - - -

JS および CSS ファイル内で参照されるパスについては、回避策があります。baseタグを使用して、HTML で絶対パス タグを定義する必要があります。

<base href="http://www.example.com:8080/FolderA/">
于 2013-02-27T08:13:20.587 に答える