職業訓練でJavaを学ぶ!48日目(2/2)「Javaプログラミング実習(フレームワーク実習編)」
職業訓練で、Javaを使ったWebシステム開発・Androidアプリ開発を学ぶことになりました。復習かねて情報発信をします!
これから職業訓練に通うことを検討している方の参考になれば嬉しいです。↓↓職業訓練に通うことになった経緯はこちら
https://note.mu/yukoro/n/ned8d43b0110d
本日の授業内容
<Spring Frameworkのタグライブラリ>
・formタグライブラリ
・springタグライブラリ ←この記事
springタグライブラリ
URLを出力する際に使われるタグライブラリについて紹介します。
Controllerに2つの異なる階層のURLに対応する1つのJSP(ビュー)があるとき、JSPに相対パスを設定しても階層の異なる両方のURLに対応することができません。
例)Controller
--------
@Controller
public class TestController {
//1つのJSPを起動する2つのURL
@RequestMapping("/test")
public String test() {
return "test";
}
@RequestMapping("/test/{id}")
public String testPath(
@PathVariable("id") Integer id) {
return "test";
}
//リンク用
@RequestMapping("/page1")
public String page1() {
return "page1";
}
@RequestMapping("/page2")
public String page2() {
return "page2";
}
}
----------
例)JSP
----------
<%@ page pageEncoding="UTF-8" %>
....
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<p><a href="page1">Page 1</a></p>
<p><a href="page2">Page 2</a></p>
</body>
</html>
----------
Controller側の設定が上の例のようになっている時、共通で起動するJSPに同じ相対パスのリンクを貼って、test/ と test/{id} のURLにアクセスしてみます。
/test のURLにアクセスするとtest.jspが起動。
Page 1へのリンクをクリックすると、問題なくページが表示されます。
今度は /test/2 のURLにアクセスするとtest.jspが起動。ここまでは問題ありません。
するとエラーになってしまいました。
これはアクセスしたページのURLに問題があるからです。
ここで注目したいのが、test/ と test/{id} のURLで表示されるJSPは同じですが、その中に貼られているリンクをクリックした時の、遷移先URLが異なっている点です。
" /test " のページからリンクをクリックすると
URLは " /page1 " になるのに対して、
/test/2 のページからリンクをクリックすると
URLは " /test/page1 " となっています。
Controller側の設定では " /page1 " にアクセスがあった場合に page1.jsp を起動する記述になっているため、" /test/page1 "というURLに対応するJSPファイルはありませんよ、となってしまうのです。
これを解決するには、リンクのURLをコンテキストルートから始めます。
例)JSP
----------
<%@ page pageEncoding="UTF-8" %>
....
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<p><a href="/mvctag/page1">Page 1</a></p>
<p><a href="/mvctag/page2">Page 2</a></p>
</body>
</html>
----------
" test/2 "のURLからリンクをクリックしても、ページが表示されるようになりました。
しかしコンテキストルート名は後から変更になる可能性があり、運用・保守においては、都合の悪い場合もあります。
そこでSpringタグライブラリを使用することで、URLにコンテキストルートの情報を自動で吐き出してくれるようになります。
例)Springタグライブラリ
---------
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
--------
2つの異なる階層のURLに対応する1つのJSPに対して、この利用宣言を追加してあげます。
例)JSP
----------
<%@ page pageEncoding="UTF-8" %>
....
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<p><a href="<spring:url value="/page1" />">Page 1</a></p>
<p><a href="<spring:url value="/page2" />">Page 2</a></p>
</body>
</html>
----------
こうすることで変化に強いリンクをつけることができます。
「springタグライブラリ」については以上です。最後までお読みいただきありがとうございました!
この記事が気に入ったらサポートをしてみませんか?