uso

雑記いろいろ
★書いてある内容に保証は一切ありません。
 ご自身で判断をしてください。

[java]JSPについて

2016-12-11 23:31:11 | work
■JavaとWebシステム
サーバサイドJava。それまではアプレットでクライアントから起動させるのが一般的だった。
1997年あたりにJavaがWebに登場
CGI(Common Gateway Interface)は,Webサーバーが他のプログラムを呼び出すためのインタフェース。
一般にCGIに準拠して作成したプログラムをCGIまたはCGIプログラムと呼ぶことが多い。

■サーブレットとは
Java Servlet(ジャバ サーブレット)とは、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、
Javaで作成されたプログラム及びその仕様である。Java EEの一機能という位置づけになっている。
2014年1月現在の最新版は、Java EE 7 に含まれる Servlet 3.1 (JSR-340) である。

CGIがクライアントのリクエストのたびに新しいプロセスを起動するのに対して、サーブレットはメモリに常駐して、リクエストのたびにプロセスより軽量なスレッドを起動するので、効率がよい。
また、サーブレットはJavaで書かれているのでさまざまなプラットフォームで使うことができる。

必ずインポートする必要があるパッケージ
 java.ioパッケージ
 javax.servletパッケージ
 javax.http.servletパッケージ

■JSPとは
JavaServer Pages (JSP) は、HTML内にJavaのコードを埋め込んでおき、Webサーバで動的にWebページを生成してクライアントに返す技術のこと。
テンプレートエンジン。
サーブレットの技術の延長としてJSPがあるが、JSPはサーブレットを自動生成して動作している。
厳密に言えばサーブレットとJSPは違う技術だが、これらは組み合わせて使うのが一般的なため、JSPもサーブレットの一部として扱われることが多い。

JSPのライフサイクル
 ブラウザ→JSP起動(要求)→Webコンテナ→JSP出力(応答)→ブラウザ
 JSPページ→JSPコンパイラ→Servletプログラム→Javaコンパイラ→Servletクラス

メリット
・プログラムとデザインの棲み分けができる
・独自のタグでコードを埋め込むことができる

デメリット
・最初はコンパイルの時間がかかる
 ※2回目以降は必要なくなるため、結果としてアクセス速度が早くなる
・煩雑な処理を書くと、結局ごちゃごちゃする

--JavaServletで書いた場合
HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html><head>");
out.println("<title>Hello, World!!</title>");
out.println("</head><body>");
out.println("

Hello,World!!

");
out.println("</body></html>");
}
}

--JSPで書いた場合
HelloWorld.jsp
<html>
<head>
<title>Hello, World!!</title>
</head>
<body>
<% out.println("

Hello,World!!

"); %>
</body>
</html>

■暗黙オブジェクト
宣言がなくても使えるオブジェクト
out javax.servlet.jsp.JspWriterクラスのオブジェクト変数
request javax.servlet.http.HttpServletRequestクラスのオブジェクト変数
response javax.servlet.http.HttpServletResponseクラスのオブジェクト変数
pageContext javax.servlet.jsp.PageContextクラスのオブジェクト変数
session javax.servlet.http.HttpSessionクラスのオブジェクト変数
application javax.servlet.ServletContextクラスのオブジェクト変数
config javax.servlet.ServletConfigクラスのオブジェクト変数
page javax.servlet.jsp.HttpJspPageクラスのオブジェクト変数
exception java.lang.Throwableクラスのオブジェクト変数

request:クライアントから送信されたリクエスト情報を処理する
response:クライアントに送信するレスポンス情報を処理する
session:セッションスコープ内で共有する情報を管理する
out: クライアントに情報を出力する

■JSPのタグ
Javaのコードは、<%と%>記号で囲まれた部分に書かれる。
スクリプトレット(<%~%>で囲まれたコード部分)。

ディレクティブ※1 <%@ ディレクティブ %> このJSPファイルの処理時の属性をWebコンテナに伝える
宣言 <%! 宣言 %> JSPで使用する変数やメソッドを宣言する
スクリプトレット <% Javaコード %> タグ内にJavaのコードを自由に記述する→スクリプトコードの断片(let)
式(Expression) <%= 式 %> 式の評価結果をHTMLの中に出力する
アクション※2 <jsp:アクション名> JSPでよく行う処理をタグで簡潔に記述する
コメント <%-- コメント --%> JSPとしてのコメントを記述する

※1ディレクティブ
ディレクティブ(指令)とは、その名のとおり、JSP/サーブレットコンテナに対する指示を行うものです。
<%@ ディレクティブ名 属性名1="属性値1" 属性名2="属性値2" ... %>

@page 現在のページの処理方法を指定
@include 外部ファイルをインクルード(「アクションタグ」参照)
@taglib タグライブラリを定義(後続の記事で紹介)

※2アクション
<jsp:include> 指定されたページをインクルード
<jsp:forward> 指定されたページにリダイレクト
<jsp:getProperty> JavaBeansのプロパティを取得
<jsp:setProperty> JavaBeansのプロパティに指定値(あるいはフォームの値)を設定
<jsp:useBean> JavaBeansの使用を定義

■JSPのコメント
<%--~--%>:静的なコンテンツ部分に記述、コンテナによる解析時に切り捨てられ、クライアント側には送信されない
/*~*/  :スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文。静的なHTMLコード内では使用することができない。
//    :「/*~*/」同様、スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文
 <%
  out.print("複数行コメントの例です。");
  /* コメント
    コメント */
  // コメント
 %>
:HTMLの一般的なコメント構文。静的なHTMLコードの中に記述することができます。クライアント側で処理されるため「ソースの表示」で見られる。



■MVCの考え方
Model  =JavaBeans
Control =Servlet
view   =JSP

JavaBeansとは「再利用性を高めるために、ある一定の構文規則にのっとって記述された」という以外には、まったく普通のクラスと同じ。
・引数のないコンストラクタが定義されていること
・プロパティを参照・設定するためのアクセサメソッドが定義されていること


https://ja.wikipedia.org/wiki/JavaServer_Pages
コメント
この記事をはてなブックマークに追加