2016-10-27 10 views
2

私は作成しているサイト用のREST APIを作成するためにSpring Bootを使用しています。現在、静的コンテンツにアクセスするには、単にリソース名に移動します。たとえば、/index.htmlまたは/dashboard.htmlです。私はRESTコントローラを使用しているので、特定のURLエンディングにページをマップする方法はなく、Springブートを使用しているので、web.xmlファイルがありません。 (たとえば、/dashboarddashboard.htmlファイルを表示したい)Springブートを使用したhtmlリソースのマッピング

ページマッピングを制御する標準のMVC @Controllerコントローラを使用する必要がありますか、これを行うより良い方法がありますか?私は現在、単にURLでファイル名を入力して、静的なコンテンツにアクセスすることができます

EDIT

。 (例:/index.htmlがインデックスを開きます)

私が知りたいのは、静的コンテンツを再マッピングする方法です。たとえば、/dashboarddashboard.htmlと表示する場合、または/error/error.htmlなどを表示したい場合は、.htmlエンディングを追加するのではなく、www.mydomain.com/dashboardに移動するだけで簡単になります。

Spring Bootでこのようなページを再マッピングする方法はありますか?

EDIT 2

私は、クライアントのシステム上に配置された各ページのビューを生成する負担を持っていることを望みます。言い換えれば、サーバーが各ページを生成しないようにすることです。私は「テンプレート」を本質的に持っていて、AngularJSコントローラが利用しているREST APIを使って有用なページに変えたいと思っています。

答えて

0

。次に、$ routeProviderを使用して、どの静的リソースをどのURIに配信するかを指定します。静的ディレクトリにindex.htmlがある場合、Springブートはそれを自動的にデフォルトページとして使用し、Angular内で使用される他の静的URIはインデックスページに相対的になります。

https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

+0

それでは、Angularを使用して、最後に.htmlタグを削除する必要がありますか? Springを使ってRESTfulにこれを行うエレガントな方法はありませんか?そうでなければ、私はこの道を行くでしょう。ありがとうございます –

+0

現実的に、それを行う方法はたくさんあります。 Springは単にRESTfulなサービスを公開していますが、それがどのように受信されるかはあなた次第です。 .htmlタグを削除するとどういう意味ですか? –

+0

ブラウザの/ダッシュボードにアクセスすると、404が見つかりません。 /dashboard.htmlに入力する必要があります。これはかなり醜いものです。私はRESTの原則を維持しながらサーバー側でこれを取り除く方法があるのだろうかと思います。 –

1

あなたはHTMLのWebコンテンツを提供するためにThymeleafフレームワークを使用することができます。

まず、依存関係を追加します。

build.gradle

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-thymeleaf") 
} 

その後、コントローラーを作成します。

GreetingController.java

@Controller 
public class GreetingController { 

    @RequestMapping("/greeting") 
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) { 
     model.addAttribute("name", name); 
     return "greeting"; 
    } 

} 

は、テンプレートを作成します。

まさにこの場合"greeting"

のsrc /メイン/リソース/テンプレート/挨拶でコントローラに返された文字列と一致する必要がありますname.htmlファイルの名前。HTML

<!DOCTYPE HTML> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
    <title>Serving HTML Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
    <p>HEY THERE!</p> 
</body> 
</html> 

あなたは、その後に移動して、ローカルのページにアクセスすることができます:あなたはアンギュラ使用したい場合は、(ThymeleafはRESTfulなではありません)Thymeleafを実装していない

http://localhost:8080/greeting

+0

基本的には、HTMLテンプレートを作成し、マップされたURLが呼び出されたときテンプレートが提供され、テンプレートが配信され、AngularJSコントローラがREST APIを使用してコンテンツを埋めますか?つまり、サーバーはthymeleafで「ビュー」を生成しませんか?その負担をサーバーから取り除き、JavaScriptコントローラーにREST APIを使用してテンプレートを記入させたいと思います。 –

+0

Thymeleafは、JSPのような動的に生成されるWebページとは対照的に、テンプレートエンジンのほうが多いです。あなたが選んだのであれば、Spring Expression言語にアクセスできますが、あなたのユースケースに合っていれば、ベアボーンHTML5を提供できます。しかし、サーバーサイドの処理がありますが、thymeleaf属性を使用して要素を生成または移入することを選択すると、 – anataliocs

+0

シングルページアーキテクチャを実現しようとしていますか?その場合のB/Cは、タイメレフは絶対完璧にフィットしません。この場合、https://jhipster.github.io/をチェックアウトすることができます。 JHipsterは、angularJS/Twitter BootstrapとSpring Boot REST APIバックエンドを使用してシングルページアプリケーションを生成します。 – anataliocs

0
  1. 私は実際にすべての静的ファイル移動する - のindex.htmlを、ノードのフロントエンド プロキシとプロキシに またはbootstrap.jsし、すべての角度template.htmlをangular.jsあなたの春のブートサービスはすべて でコールします(これはCORSのスプリングブートサービスの改造を避けるのに役立ちます)。
  2. 少なくとも、すべての静的ファイル を提供するためにnginx/httpdを使用し、すべてのサービスコールがスプリングブートアプリケーションを呼び出すことになります。
関連する問題