fc2ブログ

リンクを張る

  • Posted by: servletmania
  • 2010-11-26 Fri 15:59:45
  • JSP事始め




JSPファイルにリンクを張る練習です。クリックすると別のページに移動する、HTMLではおなじみの機能です。ほとんどHTMLと同じなので、HTMLを知っている人にとっては復習になります。

まず、リンクを張る前提としてsirotoファイルの下にルートファイルになるindex.htmlを作っておきましょう。

<html>

<head><title></title></head>

<body>

ここがWebアプリケーションのルートです。

</body>

</html>


ちなみにですが、ルートファイルはHTMLファイルでもJSPファイルでもどちらでも大丈夫です。

また、何も書いていないのにヘッダータグとタイトルタグを入れていますが、これを書かないとEclipseが赤い×印でエラーを表示するからです。これは表示だけで、実質的な問題はありません(なお、JSPファイルはヘッダーやタイトルのタグがなくてもエラーは表示されません)。



ルートにリンク



ルートとは「根」ですが、「サーバのルート」と「Webアプリケーションのルート」の2種類あります。

サーバのルートは、Tomcatのページのことです。
  http://localhost:8080/

Webアプリケーションのルートは、先ほど作ったindex.htmlです。sirotoプロジェクトのおおもとになるファイルです。

では、個々のページからルートにリンクするソースを作りましょう。「jsp_entry」ファイルの下に「LinkRoot.jsp」を作ってください。

<%@page contentType="text/html; charset=Windows-31J" %>

<html>

<body>

<p><h2>ルートにリンクしてみます。</h2>

<p><h3>絶対パス</h3>

<p><a href="http://localhost:8080/">サーバのルートへリンク</a>

<p><a href="http://localhost:8080/siroto/">Webアプリケーションのルートへリンク1</a>

<p><a href="http://localhost:8080/siroto/index.html">Webアプリケーションのルートへリンク2</a>

<p><h3>相対パス</h3>

<p><a href="/">サーバのルートへリンク</a>

<p><a href="/siroto/">Webアプリケーションのルートへリンク1</a>

<p><a href="/siroto/index.html">Webアプリケーションのルートへリンク2</a>

<p><a href="../">Webアプリケーションのルートへリンク3</a>

</body>

</html>


リンクの張り方には、絶対パスと相対パスの2つのやり方があります。同じサーバ内でリンクを張るのは絶対パスでも相対パスでも大丈夫ですが、違うサーバのファイルにリンクするには絶対パスでなければできません。

まず絶対パスですが、TomcatのURLは
  http://localhost:8080/
なので、ここにリンクを張ります。

同様に、Webアプリケーションにもリンクを張ることができます。index.htmlは省略することも可能です。

次に相対パスですが、サーバのルートは "/" にリンクすれば済みます。自分の奥さんを呼ぶのに、名前でなくても「おい、あれ」で済むようなものです。

Webアプリケーションのルートは、サーバのルートの下のフォルダsirotoにありますから、
  "/siroto/"
と指定します。ここでも、index.htmlを書かなくても可能です。

また、上のフォルダを示す "../" を指定することもできます。LinkRoot.jspファイルは「jsp_entry」フォルダにありますが、その上の「siroto」フォルダを指定するときに "../" を使います。


同じフォルダ内でリンク



次に、同じフォルダ内のファイルにリンクしてみます。

「jsp_entry」フォルダの下に、「LinkSame.jsp」というファイルを作り、ここから同じフォルダ内にある「Calendar.jsp」ファイルにリンクしてみましょう。

<%@page contentType="text/html; charset=Windows-31J" %>

<html>

<body>

<p><h2>同じフォルダのCalendarファイルにリンクします。</h2>

<p><h3>絶対パス</h3>

<p><a href="http://localhost:8080/siroto/jsp_entry/Calendar.jsp">
サーバのルートへリンク</a>


<p><h3>相対パス</h3>

<p><a href="/siroto/jsp_entry/Calendar.jsp">サーバのルートからリンク</a>

<p><a href="../jsp_entry/Calendar.jsp">
「jsp_entry」フォルダの上のフォルダを基準にリンク</a>

<p><a href="./Calendar.jsp">同じ「jsp_entry」フォルダ内でリンク その1</a>

<p><a href="Calendar.jsp">同じ「jsp_entry」フォルダ内でリンク その2</a>

</body>

</html>


絶対パスは問題ないかと思います。

相対パスですが、いろんな書き方があります。覚えておくべきは、"../" が上のフォルダを指し、"./" が同じ階層のフォルダを指すということです。

初めて勉強すると混乱しますが、徐々に慣れてパスをたどれるようにしましょう。


JSP独特のリンク方法



さて、ここからがようやく本題です(ええっ!?)。

メソッドを使ってリンクする方法を学習します。メソッド名は、getContextPath()です。

再び、「jsp_entry」フォルダ内にJSPファイルを作ってください。名前は「LinkMethod.jsp」としておきましょう。

<%@page contentType="text/html; charset=Windows-31J" %>

<html>

<body>

<p><h2>getContextPath()メソッドを使ってリンクしてみよう。</h2>

<p><a href="<%= request.getContextPath() %>">
Webアプリケーションのルートへリンク</a>

<p><a href="<%= request.getContextPath() %>/jsp_entry/Calendar.jsp">
カレンダーファイルへリンク</a>

</body>

</html>


エクスプレッション<%= ~ %>内で、
  request.getContextPath()
というメソッドを実行しています。

いきなりrequestという変数が出てきましたが、これは、HttpServletRequestクラスを表す暗黙オブジェクトといわれ、JSPの中で宣言せずにいきなり利用することができます。

そしてこのメソッドを実行すると、コンテキストパスすなわちWebアプリケーションのルートを示す「siroto」という文字(String型)を返します。要するに、<%= request.getContextPath() %>で「siroto」になるということです。

なかなか歯ごたえのある内容だったのではないでしょうか。よく復習してください。

あ、ついでに言うと、JSP・サーブレットでは、getなんちゃら()というメソッドが死ぬほど出てくるので覚悟しておいてください(笑)。

スポンサーサイト



タグ :

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://servletmania.blog137.fc2.com/tb.php/9-070bf9db
月別アーカイブ
カテゴリ
リンク
RSSリンクの表示
QRコード
QR