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

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

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

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

Spring Boot

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

Q&A

解決済

2回答

24790閲覧

th:href、th:srcの書き方について

a0841_1974

総合スコア29

Thymeleaf

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

Spring Boot

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

0グッド

1クリップ

投稿2018/08/06 14:46

いつもお世話になっております。

th:href、th:srcの書き方で分からない事があります。
ご存知の方がいらっしゃれば、教えて頂けますでしょうか。

(実施たい事)
以下のhtmlを使用してアプリケーションを実行すると、
【実行後のhtmlのソース】のようにhref、srcタグにjsessionidが追加され、
cssファイル、jsファイルが読み込まれません。
※この状態でF5を押すとjsessionidは消え、cssファイル、jsファイルは
正しく読み込まれます。
F5ボタンを押さなくても、jsessionidが追加されない方法は
ありますでしょうか。

【html】

<!DOCTYPE html> <html lang="ja" xmlns="http://www.thymleaf.org"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrapの基本テンプレート</title> <link rel="stylesheet" th:href="@{/webjars/bootstrap/4.0.0-1/css/bootstrap.min.css}" /> </head> <body> <h1>Bootstrapの基本テンプレート</h1> <p class="bg-primary">この段落に適用しましょう。</p> <script type="text/javascript" th:src="@{/webjars/jquery/3.3.1/jquery.min.js}"></script> <script type="text/javascript" th:src="@{/webjars/bootstrap/4.0.0-1/js/bootstrap.min.js}"></script> </body> </html>

【実行後のhtmlのソース】

<!DOCTYPE html> <html lang="ja" xmlns="http://www.thymleaf.org"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrapの基本テンプレート</title> <link rel="stylesheet" href="/webjars/bootstrap/4.0.0-1/css/bootstrap.min.css;jsessionid=5B99E22CB9E3683A461F3D130909B18F" /> </head> <body> <h1>Bootstrapの基本テンプレート</h1> <p class="bg-primary">この段落に適用しましょう。</p> <script type="text/javascript" src="/webjars/jquery/3.3.1/jquery.min.js;jsessionid=5B99E22CB9E3683A461F3D130909B18F"></script> <script type="text/javascript" src="/webjars/bootstrap/4.0.0-1/js/bootstrap.min.js;jsessionid=5B99E22CB9E3683A461F3D130909B18F"></script> </bod

(補足)
1.jsessionidが追加されるのは、アプリケーションを実行した後の1回だけです。
F5を押した後は、次のアプリケーションを実行するまではするまでは、
問題は発生しません。

2. 問題が発生した際の環境は、
spring-boot2
java8
になります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

bootstrapやjqueryなどの静的ファイルを埋め込みTomcatで配信していることで、jsessionidが付加される事象のように思います。

この場合は、webjarsではなくCDNを利用すると解消されるかもしれません。
CDNにはいくつか種類があるようですが、簡単に調べると下記のものがピックアップできました。
業務要件的に利用するのが難しい場合があるとは思いますが、利用可能であればご検討ください。

jQuery

jQuery CDN
https://code.jquery.com/

Google Hosted Libraries
https://developers.google.com/speed/libraries/#jquery

Bootstrap

BootstrapCDN
https://www.bootstrapcdn.com/

投稿2018/08/07 12:45

rubytomato

総合スコア1752

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

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

a0841_1974

2018/08/07 12:49

ご連絡ありがとうございます。 確認してみます。
guest

0

ベストアンサー

th:hrefやth:srcの使い方というよりは、Servletの設定によるものだと思います。

デフォルトではCookieが使用できる場合でも初回アクセス時はURLにJSESSIONIDが付与されてしまいます。
ServletContextInitializerで、JSESSIONIDの管理をCookieだけに絞る設定を行えば、初回アクセス時もURLにJSESSIONIDが付与されなくなるはずです。

java

1package com.example.thymeleaf; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.boot.web.servlet.ServletContextInitializer; 6import org.springframework.context.annotation.Bean; 7 8import java.util.Collections; 9 10import javax.servlet.ServletContext; 11import javax.servlet.ServletException; 12import javax.servlet.SessionTrackingMode; 13 14@SpringBootApplication 15public class ThymeleafApplication { 16 17 public static void main(String[] args) { 18 SpringApplication.run(ThymeleafApplication.class, args); 19 } 20 21 @Bean 22 public ServletContextInitializer servletContextInitializer() { 23 ServletContextInitializer servletContextInitializer = 24 new ServletContextInitializer() { 25 26 @Override 27 public void onStartup(ServletContext servletContext) 28 throws ServletException { 29 servletContext.setSessionTrackingModes( 30 Collections.singleton(SessionTrackingMode.COOKIE)); 31 } 32 }; 33 34 return servletContextInitializer; 35 } 36} 37

投稿2018/08/07 06:13

編集2018/08/07 06:15
d-yosh

総合スコア270

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

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

a0841_1974

2018/08/07 06:48

ご連絡ありがとうございます。 やってみます。
a0841_1974

2018/08/07 12:58 編集

ご連絡ありがとうございます。 server.servlet.session.tracking-modes=cookieで対応しようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問