<jsp:include>と<jsp:forward>の違い

Tomcat + Serblet + RDBSの開発の際にServletの処理であるinclude とforwardの処理の違いがいまいちわからなかったのでまとめてみた.

include処理について

JSPプログラム中に<jsp:include>があるとタグの中で指定したファイルの処理を実行して, 処理の実行後に再びタグ中に記載されたプログラムに処理を実行します.

forward処理について

<jsp:forward>は指定したファイルに処理を転送すために使用される.

<jsp:forward>タグの前には値を出力する処理はしては行けない. もし行った場合には例外が投げられます. <jsp:include>は指定したファイルの処理が終わると再び指定元に処理が戻るのに対して, <jsp:forward> は指定したファイルに処理が転送され, 再び処理が指定元に戻ることはありません.

実装でinclude処理とforward処理についての違いを確認

includeとforwardに関して処理が指定元に戻るか戻らないかという違いがあるので実際にJSPを書くことで違いを見てみました.

今回は下記のtest.jspを<jsp:forward>と<jsp:include>で処理することで違いをみます.

今回Tomcatの環境等に関しては導入が書いてありませんが, 希望があれば書きます.

<!-- test.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <main style="background-color: blue; color: white;">
    <div>include and forward are reading test.<br>
    以下適当なフォーム</div><br>
    <form name="test" method="get" action="">
      ・好きなエディタ<br>
      <input type="radio" name="button" value="jsp1" checked>
        Vim<br>
        <input type="radio" name="button" value="jsp2">
          emacs<br>
    </form>
  </main>
  </body>
</html>
incluide処理

include処理を行うJSPファイル

<!-- testinclude.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
  <head>
    <title>include test</title>
  </head>
  <body>
    <div>JSP ファイルのincludeを開始.</div>
      <div><jsp:include page="test.jsp"/></div>
    <div>JSP ファイルのincludeを終了.</div>
  </body>
</html>

include処理実行の結果

f:id:shsm385:20180607222812p:plain

forward処理

forward処理を行うJSPファイル

<!-- testforward.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
  <head>
    <title>forward test</title>
  </head>
  <body>
    <div>JSP ファイルのforwardを開始.</div>
      <div><jsp:forward page="test.jsp" /></div>
    <div>JSP ファイルのforwardを終了.</div>
  </body>
</html>

forward処理を行った結果

f:id:shsm385:20180607223150p:plain

forward.jspの結果では処理を行ったjspファイルの中身だけが表示されていることがわかります.

参考にしたページ

Javaの道:JSP(4.<jsp:include>、<jsp:forward>)

UNIX系のパーミッション設定

macLinuxパーミッションの設定方法をなんとなくしかわかっていなかったのでまとめました.

 

パーミッションの確認方法

$ ls -l

lsコマンドのオプションでパーミッションがどんな状態になっているか確認できます.

実際にコマンドを実行してみると下のような感じになります.

drwx------@ 63 user  staff  2016  3 26 13:19 Dropbox
drwxr-xr-x  14 user  staff   448  5 20 13:13 Git
drwx------ 69 user  staff  2208  5  8 22:25 Library

これによりファイルやフォルダに関してのパーミッションが分かります.

パーミッションの見方は次のようになります.

f:id:shsm385:20180521201750p:plain

そのため, 図の例ですとGitというディレクトリはユーザのアクセス権としては読み込み可能, 書き込み可能, 実行可能の権限を持ち, グループからのアクセス権としては読み込み可能, 実行可能を持ち, その他からはアクセス権として読み込み可能と実行可能といった状態になっていることがわかります.

パーミッションの変更

パーミッションの変更はchmodコマンドを使って変更を行います.

コマンド名はchange modeの略です.

変更の仕方は2通りあります.

種別等をしていする方法

次のように行います

# ファイル作成
$ touch sample
# パーミッションの確認
$ ls -l sample
-rw-r--r--  1 user  staff  0  5 21 20:28 sample
# パーミッションの変更
$ chmod u+x,g+wx,o=u sample
$ ls -l sample
-rwxrwxrwx  1 user  staff  0  5 21 20:28 sample

chmod コマンドは chmod モード ファイル名とすることで実行できます.

モードは複数 , で区切って指定できます.

f:id:shsm385:20180521204219p:plain

数字で指定する方法

こちらのほうが使っているかたが多いと思いますが次のようになります.

# パーミッションの確認
$ ls -l sample
-rwxrwxrwx  1 user  staff  0  5 21 20:28 sample
# パーミッションの変更
$ chmod 755 sample
$ ls -l sample
-rwxr-xr-x  1 user  staff  0  5 21 20:28 sample

数字の3桁はそれぞれユーザ, グループ, その他の順で表されます.

・読み込みを4

・書き込みを2

・実行を1

という数字で表し, それぞれ与えたい権限の数字を足したものをモードとして指定してあげます.

なので, 755ならば7ですべての権限を5で読み込みと実行の権限を与えることになります.

 

先輩から効いたのですが, 数字で指定するやり方は割りと古いそうで最近では種別等を指定することが多いみたいです. (数字のほうをよくつかっていたのでびっくり.)

 

もうちょっとブログを書く頻度を上げたい.....