検索
ホームページウェブフロントエンドhtmlチュートリアルSpringBoot+ThymeleafはHTMLファイルの導入を実装(インクルード機能と同様)_html/css_WEB-ITnose


私はハイエンドのフロントエンド処理に慣れていないため、MVC 経由でコンテンツを直接転送したいため、値の受け渡しの問題を処理するために Thymeleaf テンプレートを選択しました。フロントエンドへ。ただし、多くの PHP フレームワークで実装されているインクルード テンプレート メソッドは、ヘッダー ファイル、ナビゲーション、ページ フッターなどをメイン コンテンツから効果的に分離できるので、Thymeleaf テンプレートを使用して、同様のことを実現したいと考えています。機能が含まれます。


アイデアと背景

エネルギーがあるなら、RESTFul 構造を使用するのが最善だと思います。その後、angularjs または他のメソッドを使用する方が合理的かもしれません。フロントエンドについてはあまり詳しくないので自分でyyしてみました

本題に戻りますが、環境は主にSpring Boot FrameworkとThymeleafを使って構築しています。主なアイデアは、Thymeleaf の「th:untext()」メソッドを使用して、バックエンド処理で ModelMap を通じて予約されたヘッダー ファイル、ナビゲーションなどを実際の Web ページにマップすることです。


実際の操作

1. 背景

まず実行できる Spring boot+Thymeleaf プロジェクトを設定します。具体的なチュートリアルがたくさんあるので省略します。詳細に。

その後、デフォルトのディレクトリ構成が採用されます。これはおおよそ次のとおりです: resource static —— (デフォルトの静的ファイルディレクトリ) templates —— (デフォルトのThymeleafテンプレートディレクトリ) application.properties

2.基本

を処理した後、th:untext() 関数を使用して、他のコンテンツを含める必要があるテンプレート ファイル内の関連部分をマークし、関連するコンテンツをコントローラーの ModelMap にロードします。おそらく次のようになります。このテンプレートファイル部分:

<header class="am-topbar admin-header" th:utext="${headerContent}">  
<p class="am-topbar-brand">    
<strong>创澳商务</strong> <small>交易者系统</small>  </p>  </header>

バックエンド処理部分:

@RequestMapping("/background")    
private String backgroud(ModelMap map){        
map.addAttribute("headerContent", "hello word!");        
return "background";    
}

3. WYSIWYG メソッド

テンプレート ファイル (html) の変更が必要になる場合があるためこれにより期待どおりの効果が得られますが、Thymeleaf などのフレームワークの最大の特徴の 1 つは、フロントエンドの設計とバックエンドの実装を分離できることです (HTML ファイルを直接使用するため、サーバーが不要な場合でも、ブラウザ経由でデザインしたテンプレートファイルを直接閲覧することも可能ですので、ご紹介できるのはHTMLファイルでも良いと思いますが、これも基本的な考え方に沿っています。機能が含まれます。したがって、dom ファイルのトラバースの問題を解決するために、Jsoup パッケージがプロジェクトに導入されました。 もちろん、この完全なプロセスを完全にスキップして、txt や json などを直接使用することもできます。もちろん、他の広く使用されている dom トラバーサル ツールを選択することもできますが、ここでこの jsoup バッグを使用したいだけです。 jsoup のセレクタ構文は基本的に JQuery などのフロントエンド ツールの構文と同じです。JQuery に慣れている人にとっては非常に朗報です。具体的な構成は次のとおりです。 Maven の依存関係を追加します

セレクターを使用して要素を取得し、コンテンツを取得します
<dependency>          
<groupId>org.jsoup</groupId>          
<artifactId>jsoup</artifactId>          
<version>1.9.2</version>     
</dependency>

これを実行した後、HTML を通じて直接ページをデザインし、それをバックグラウンドを通じてフロントエンド ページに含めることができますプログラム。
map.addAttribute("headerContent", doc.select("header").toString());
map.addAttribute("sideBarContent", doc.select("#admin-offcanvas").first().toString());

4. ヘッダ参照を含める

一般的なナビゲーション部分(pなど)については、上記の処理を行えばOKです。同様の機能を実現するには、組み込み、分離など、head内のさまざまな参照が当然必要になります。そうしないと、参照する必要のある css や js を変更するたびに、各ファイルを再度修正する必要があり、考えただけで頭が痛くなります。

しかし問題は、ModelMapを使ってヘッダーリンクを参照する場合、以下の処理が解析できないことです。そうなると、css と js の参照は当然めちゃくちゃになります。

これに対処するときは、主にフレームワーク自体の特性を利用して、すべての css ファイルを静的フォルダー (デフォルトでは Spring Boot によって保存される静的ファイル) に置きました。リソース) を参照し、href 値 (href="css/main.css?7.1.34") を記述することでこの問題を直接解決します。
th:href="@{/css/main.css}"

もちろん、もっと良い解決策があるかもしれないと思いますので、アドバイスをお願いします~

5. static 下の CSS ファイルが不整合になる可能性がある問題

リンクとスクリプトによってファイル パスの問題が発生する問題は解決しましたが、href を最後まで記述すると、新しい問題が発生します。html ファイルはすべてテンプレートの下にあるため、css ファイルを直接使用することはできません。複数のフォルダーの場合、正しい CSS ファイルは通常サーバー経由でインポートできますが、ページのデザインと編集はブラウザー経由で直接行うことができません。これはフロントエンド デザインとバックエンド実装の

分離に違反します。前に説明した

機能。 この問題をさらに解決するには、css ファイルをテンプレート フォルダーの下にコピーするだけです (さらにサブフォルダーを作成したい場合は、各フォルダーの下に CSS ファイルをコピーする必要があります)。このソリューションはまったく洗練されておらず、CSS ファイルの同期を忘れることにより、サーバーの表示とデザインの表示の間に不一致が発生する可能性があります。

そこで、

汚くない

にするために、新しい解決策を採用しました。それは、HTML ファイルの static フォルダーの下に CSS の href を直接記述してから、このとき、新しい href メソッドは static などのプレフィックスを削除することで取得され、同じ CSS を使用しながらフロントエンドの設計とバックエンドの実装を分離できます。また、パスには静的機能が含まれているため、部分文字列関数を直接使用するのは非常に便利です。具体的な実装は次のとおりです:

    public void getNavigation(Integer naviType,ModelMap map){                        
    String fileUrl = templateUrl;        
    switch(naviType){            
    case 1:                //admin navigatioin                
    fileUrl = fileUrl + "header_admin.html";                
    break;            
    case 2:                //user navigation                
    fileUrl = fileUrl + "header_trader.html";                
    break;            
    default:                
    fileUrl = fileUrl + "header_trader.html";                
    break;        
    }                
    try {            
    InputStream input = this.getClass().getResourceAsStream(fileUrl);            
    Document doc = Jsoup.parse(input,"UTF-8","http://www.mychuangao.com/");            
    map.addAttribute("headerContent", doc.select("header").toString());            
    map.addAttribute("sideBarContent", doc.select("#admin-offcanvas").first().toString());            
    map.addAttribute("footerContent", changeAttrAddress(doc.select("footer"),"script","src"));            
    map.addAttribute("headContent", changeAttrAddress(doc.select("head"),"link","href"));        
    } catch (IOException e) {            
    logger.error("error when using jsoup");            
    logger.error(e.getMessage());           
     map.addAttribute("headContent", "");            
    map.addAttribute("headerContent", "");            
    map.addAttribute("sideBarContent", "");            
    map.addAttribute("footerContent", "");        
    }    
    }    
    private String changeAttrAddress(Elements parentNode,String dealingNodeName,String attrName){        
    Elements elements = parentNode.select(dealingNodeName);        
    for(Element elment : elements){            
    String orignalAddress = elment.attr(attrName);            
    if(orignalAddress.isEmpty())
    {                
    continue;            
    }            
    orignalAddress = delInnerPath(orignalAddress);            
    elment.attr(attrName,orignalAddress);        
    }        
    return parentNode.toString();    
    }    
    private String delInnerPath(String address){        
    String keyWord = "static";        
    if(address.contains(keyWord)==false)
    {            
    return address;        
    }        
    int position = address.indexOf(keyWord) + keyWord.length() + 1;        
    return address.substring(position);    
    }

注意点

  1. 注意要使用th:untext()函数,而非th:text()函数,原因你懂的~

  2. 处理路径时,如果使用了获取绝对路径的方式,可能会造成访问权限问题,在web项目中要慎重

  3. 大家可以根据自己的需求更改spring boot和Thymeleaf的文件目录,具体可以参考修改spring boot默认目录

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Web開発にとってHTML属性が重要なのはなぜですか?Web開発にとってHTML属性が重要なのはなぜですか?May 12, 2025 am 12:01 AM

htmlattributesarecrucialinwebdevevermentmentmentmentmentmentmentmention behavior、like、andfunctionality.theyenhance -interactivity、accessibility、andseo.forexample、thesrcattribute intagsimpactsseo

Alt属性の目的は何ですか?なぜそれが重要なのですか?Alt属性の目的は何ですか?なぜそれが重要なのですか?May 11, 2025 am 12:01 AM

ALT属性は、HTMLのタグの重要な部分であり、画像の代替テキストを提供するために使用されます。 1.画像をロードできない場合、ALT属性のテキストが表示され、ユーザーエクスペリエンスが向上します。 2。スクリーンリーダーは、ALT属性を使用して、視覚障害のあるユーザーが写真の内容を理解するのに役立ちます。 3. ALT属性のEnginesインデックステキストを検索して、WebページのSEOランキングを改善します。

HTML、CSS、およびJavaScript:例と実用的なアプリケーションHTML、CSS、およびJavaScript:例と実用的なアプリケーションMay 09, 2025 am 12:01 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造の構築に使用されます。 2。CSSは、Webページの外観を美化するために使用されます。 3. JavaScriptは、動的な相互作用を実現するために使用されます。タグ、スタイル、スクリプトを通じて、これら3つは最新のWebページのコア関数を構築します。

Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?May 08, 2025 am 12:03 AM

タグのLang属性を設定することは、WebアクセシビリティとSEOを最適化する重要なステップです。 1)ラング属性をタグに設定します。 2)多言語コンテンツでは、ようなさまざまな言語パーツのLang属性を設定します。 3)「EN」、「FR」、「ZH」などのISO639-1標準に準拠する言語コードを使用します。Lang属性を正しく設定すると、Webページと検索エンジンランキングのアクセシビリティが向上します。

HTML属性の目的は何ですか?HTML属性の目的は何ですか?May 07, 2025 am 12:01 AM

htmlattributeSareSientionalentionalentionalentionalentiallyance'functionalityandappearance.theyaddinformationtodefinebehavior、light、and interaction、makewebsitesteractive、responsive、andviseallyappaleal.attributeslikesrc、href、class、型、およびdoadabledransform

HTMLでリストを作成するにはどうすればよいですか?HTMLでリストを作成するにはどうすればよいですか?May 06, 2025 am 12:01 AM

toreatealistinhtml、useforunorderedlistsandfororderedlists:1)forunorderedlists、wrapitemsinanduseforeachitem、renderingasabulletedlist.2)

HTMLアクション:Webサイト構造の例HTMLアクション:Webサイト構造の例May 05, 2025 am 12:03 AM

HTMLは、明確な構造のWebサイトを構築するために使用されます。 1)Webサイト構造などのタグを使用し、定義します。 2)例は、ブログとeコマースのウェブサイトの構造を示しています。 3)誤ったラベルネスティングなどの一般的な間違いを避けてください。 4)HTTP要求を削減し、セマンティックタグを使用してパフォーマンスを最適化します。

HTMLページに画像を挿入するにはどうすればよいですか?HTMLページに画像を挿入するにはどうすればよいですか?May 04, 2025 am 12:02 AM

to inertanimageintoanhtmlpage、usethetagwithsrcandaltattributes.1)usealttextforaccessibilityandseo.2)emplencesrcsetForresponsiveimages.3)applylazyloadingwithloading = "lazy" tooptimizeperformance.4)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。