質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1580閲覧

Springbootのリソースファイルが読み込めない

moshi

総合スコア90

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/08/18 14:48

編集2020/08/19 00:37

前提・実現したいこと

Springboot + ThymeleafでWebアプリケーションを実行したいがリソースの読み込みとサーブレットパスのマッピングがうまくできない

発生している問題・エラーメッセージ

Spring bootアプリケーションをサーバー上に公開したのですが
例えば現在のサーバ側の設定(/etc/httpd/conf.d/testserver.conf)が

<Location /app> ProxyPass http://localhost:8888/ ProxyPassReverse http://localhost:8888/ </Location> ProxyPass /app http://localhost:8888/ ProxyPassReverse /app http://localhost:8888/

・サーバー側の設定(リバースプロキシの設定)で/appでアプリケーションが動作する
という状態だとします。

ログイン画面を表示するアプリケーションは

https://testserver.jp/app/login ```で動作するようになっています。 そのためリソースファイルも

https://testserver.jp/app/images/test.png

に保持されているのですが Springboot側ではコンテキストパスの設定変更などを行っていないため

https://testserver.jp/images/test.png

を読み込みに行ってエラーとなっているようです。 サーブレットパスについても同じで、ログインボタンを押した際の遷移先に

@{/auth}

を設定しているのですが

https://testserver.jp/auth

となってしまいうまく遷移できません。 ### 試したこと Springbootのapprication.propertiesにコンテキストパスの設定を行いました。

server.servlet.context-path=/app

すると、リソースファイルは

https://testserver.jp/app/images/test.png

に配置されるようにはなったのですが、今度はログイン画面を表示するパスが ホスト(https://testserver.jp) + サーバー側の設定(/app) + コンテキストパスの設定(/app)で

https://testserver.jp/app/app/login

となってしまい、結局アプリケーションが動いているところと各リソースのある場所がマッチしていないという状態になっています。 サーブレットパスのマッピングも同様で

@GetMapping("/login")
public String hello(Model model) {
return "login";
}

としているため

https://testserver.jp/app/login

を見に行ってしまい、うまく動作しないという状態になっています。 どうすれば解決するでしょうか? Springboot側をいじればいいのかサーバー側の設定を変えれば何とかなるのかなどもわからない状態です。 どなたか教えていただければと思います。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

手元の環境で試しまた感じでは、apacheのconfに以下を追記するとうまく行きました。

SpringBootアプリは http://localhost:8080/app/ で動いている状態での記述です。

#<Location /app> # # ProxyPass http://localhost:8080/ # ProxyPassReverse http://localhost:8080/ # #</Location> ProxyPass /app http://localhost:8080/app ProxyPassReverse /app http://localhost:8080/app

投稿2020/08/19 04:22

YakumoSaki

総合スコア2027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moshi

2020/08/19 10:47

>YakumoSakiさん ご回答ありがとうございます。 上記の設定でうまく動作することが確認できました!ありがとうございます。 もしお時間あるようでしたら教えていただきたいのですが、追記はどういった意味合いになるのでしょうか? 私の記述していたもので動かなかった理由が知りたいのですがどう調べたらいいかわからなくてできれば教えていただきたいです。
YakumoSaki

2020/08/19 12:06

Apacheに /app 以下で飛んできたリクエストをそのまま SpringBootの /app に転送する的な追記ですね 元の記述だと、末尾の /app がなかったので、 /app に来たリクエストを SpringBootの / に転送しちゃっていたので おかしなことになっていたんだと思います。
moshi

2020/08/20 06:59

ご説明ありがとうございます! なるほどです。勉強になりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問