情報システム科



Java サーブレッド・JSP

サンプル
内容 html java,JSP Bean
サーブレット サーブレット   Sample1.java  
サーブレットをフォームから実行 Sample2.html Sample2.java  
セッション管理1   Sample4.java  
セッション管理2 a2input.html a2LOgin1.java
a2Userinfo1.java
 
JSP JSP Sample2.html Sample2.jsp  
JavaBeans1 Sample6.html Sample6.java
Sample6.jsp
CarBean.java
JavaBeans2 a3input3.html a3login3.java
a3Login3.jsp
a3Userinfo3.java
a3Userinfo3.jsp
a3Userinfo3Bean.java
JDBC JDBC   Sample1.jsp  
Webとデータベース   Sample5.java
Sample5.jsp
CarDBBean.java

目次

Java技術情報
Visual Age for Javaの使い方
TCPソケット
HTTP
CSSとJavaScript
CGI
クッキー
サーブレット
JSP
JavaBeans
JDBC




Java技術情報

Java技術情報
  http://jdc.sun.co.jp/

J2SE JavaTM 2 Platform, Standard Edition, 1.4.0 API 仕様
  http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html
J2SE Java 2 Platform Standard Edition Version 1.4
  http://java.sun.com/j2se/1.4/ja/
J2SE JavaTM 2 SDK ドキュメント
  http://java.sun.com/j2se/1.4/ja/docs/ja/index.html

J2EE JavaTM 2 Platform Enterprise Edition, v 1.4 API Specification
  http://java.sun.com/j2ee/1.4/docs/api/
J2EE Java Servlet テクノロジ
  http://java.sun.com/j2ee/ja/servlet/index.html
J2EE JSP
  http://java.sun.com/j2ee/ja/jsp/
J2EE JDBC
  http://java.sun.com/j2ee/ja/jdbc/index.html

JavaBeansTM Component API
  http://java.sun.com/j2se/1.3/ja/docs/ja/guide/beans/
Java Beans
  http://java.sun.com/products/javabeans/index.html

Java 2 SDK インストールガイド
  http://java.sun.com/j2se/1.4/ja/install-windows.html

Visual Age for Javaの使い方

ワークベンチ ソースコード等をツリー形式で統合管理
・ソースコードは専用エディタで編集
  フィールドやメソッドがツリー
  保存するだけでコンパイル
・リポジトリ
  ソースコードはリポジトリと呼ばれるデータベースに
  インポート
  エクスポート
・プロジェクト
  開発単位を「プロジェクト」という単位で管理

・プログラム作成
  Window、Workbench
  3段目、AddNew or Exiting Project to Workspace
  3段目、Create class、Class nameに
・エディタ
  4段目、Project、目的のクラスをダブルクリック
  修正し
  終了、Edit、Save
・デバック
  3段目、Run、別のウィンドが開く、Console、そのoutputに実行結果が

TCPソケット

TCPソケットとは、TCP/IPのTCP層が提供する、クライアント・サーバー型のストリーム通信のための機構。
TCPソケットは、サーバーが「口をあけて」待機している状態のところに、クライアントが「接続」し、データの送受信を行う。
クライアント   サーバ
         bind
                  Listen
connect---------->
                  accept
write------------>
                  read
                  処理
     <------------write
read
close
クライアントがサーバに接続(connect)して、サーバーが受け入れ(accept)た時点から通信が開始します。その後、どちらがreadするのか、どちらがwriteするのか、プログラムを作る人が自由に決められます。この順序(会話手順)の事を「プロトコル」と呼びます。
TCPソケットは、1つのサーバー上で、複数の受け口として宣言(bind)及び待機(listen)することが出来ます。この時、どれにアクセスするかを認識しなければならないので番号が振られます。この番号のことを「ポート番号」と呼びます。
特定の(例えば80番の)ポート番号を宣言(bind)して待機(listen)することが出来るプロセスは、コンピュータ上で1つだけです。


HTTP

Web、すなわちWWW(World Wide Web)の基本はHTTP(Hyper Text Transfer Protocol)とHTML(Hyper Text Markup Language)です。
HTTPサーバーは、TCPソケットのポート(通常80番)をオープンして待機します。HTTPのクライアントはポート80のソケットに接続(connect)し、HTTPリクエストと言うデータを送信します。HTTPリクエストには、OPTIONSメソッド、GETメソッド、POSTメソッドなどの種類があります。
最もよく使われるHTTPリクエストは、HTTPサーバに対してファイルの送信を要求する「GETリクエスト」です。クライアントがHTTPリクエストを送信すると、HTTPサーバがHTTPレスポンスを返します。そこで、クライアントがソケットを閉じて1回のやり取りが終了します。
クライアント         サーバ
HTTP GETリクエスト---------->
           <-----------レスポンス
通常、1回のリクエストでは1つのコンテンツしか送信されません。

HTMLでは、<IMG src="image.gif">のように記述して、画像を表示することが出来ます。
このようなコンテンツの場合、GETリクエストが2回発行されます。
最初のリクエストでHTMLファイルがWebブラウザに送信されます。次に、WebブラウザがHTMLを解析します。<IMG>タグの部分でimage.gifと言うファイルが別途必要だとわかるので、もう一度GETリクエストを出してそれを取りに行きます。


CSSとJavaScript

CSS(Cascading Style Sheet)は、HTMLの各タグに関連付けられた書式属性です。
例えば、<H1>タグなら、どのフォントで、何ポイントで、何色で表示するかと言う、属性です。
例えば、HTMLのBODYの直前に次の数行を加えます。
<STYLE type="text/css">
<!--
H1{ color : blue; }
-->
</STYLE>
すると、HTMLの<H1>タグで囲まれた文字がすべて青で表示されます。
スタイルシートは、以下のように記述することで、別のファイルに記述しておくことも出来ます。
<LINK href="/Master.css" rel="stylesheet" type="text/css">

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
JavaScriptは、HTMLなどのコンテンツ内に記述できるスクリプト言語(プログラミング言語の一種)です。HTMLに記述する場合は、<SCRIPT>タグで囲みます。HTMLに記述されているJavaScriptは、Webブラウザにソースコードの状態で送信され、Webブラウザがそれを解釈して実行します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
cssの属性は、Javascriptなどで動的に変更することが出来ます。例えば、以下のHTMLコードをWebブラウザに表示し、ボタンを押します。
<HTML><BODY>
<SCRIPT language="JavaScript">
  function chgClr(){
    document.bgColor="blue";
  }
</SCRIPT>
<H1>JavaScript</H1>
<FORM>
  <INPUT type="button" value="色の変更" onclick="chgClr();">
</FORM></BODY></HTML>
これは、<BODY>タグを意味するdocumentオブジェクトのbgcolor(背景色)属性をJavaScriptで書き換えています。ボタンを押すと「onclick」イベントが発生し、そのイベントがchgClr()メソッドへ伝えられます。JavaScriptで書かれたchgClr()メソッドでは、documentオブジェクトのbgClolor属性をblueに変更するので、ボタンが押されたとき、背景色が青色に変わります。


CGI

CGI(Common Gateway Interface)は、通常、HTTPリクエストがHTTPサーバーに送られてくると、そのURLに従ってファイルが検索され、該当するファイルが送信されます。
CGIのほとんどは、Perlというスクリプト言語で記述されています。


クッキー

クッキー(cookie)は、Webブラウザの稼動するコンピュータに、サーバプログラムが少しだけデータを保存できるようにした仕組みです。
本来、Webブラウザが動作するコンピュータ(クライアント)のハードディスクにサーバプログラムがアクセスすることは出来ませんでした。これは、サーバプログラムがクライアントを攻撃することを防ぐためです。
ところが、この制限のために「クライアントを識別する」とか、「前にアクセスした最後のページ」という情報を管理するのが困難になってしまっています。そこで、いくつかの制限付きで「サーバプログラムがクライアント上にデータを保存できる仕組み」が提供されるようになりました。これがクッキーです。制限と言うのは以下のものです。
1.テキストのみが保存できる。
2.Webブラウザ全体で300個まで、1つにつき4096バイトまで、ホストサーバーごとに20個までしか保存できない。
3.別のサーバが保存したデータは読み出すことが出来ない。
4.名前をつけて保存できるが、保存する場所はWebブラウザによって決まっている。
HTTPサーバが、HTTPレスポンスにクッキー情報を入れて送信することでクッキーを書き込むことが出来ます。一度書きこまれたクッキーは、そのHTTPサーバへ送られるHTTPリクエストに常に添付されます。ですから、あまり大量のデータをクッキーに書き込んでしまうと、毎回のデータが増えてしまうことになります。
通常、クッキーはWebブラウザを終了すると消えてしまいます。延命することも出来ます。


サーブレット

Tomcatのセットアップ
Tomcatダウンロード
Tomcat 3.3
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
環境変数の設定
JAVA_HOME   c:\j2sdk1.4.0
TOMCAT_HOME c:\jakarta-tomcat-3.2.3
CLASSPATH   c:\jakarta-tomcat-3.2.3\lib\servlet.jar;.
コンテキストパスを設定
サーブレット・JSPのURLを設定
@Confディレクトリのserver.xmlをテキストエディタで編集
Acontextmanager
Bファイルを配置
  Tomcatをインストールしたディレクトリ−−webapps\YJKS
CJSP,HTML webapps\YJKS\06\Sample1.jsp
Dサーブレット webapps\YJKS\06\WEB-INF\classes\Sample1.class
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
TOMCAT起動
 c:\jakarta-tomcat-3.2.3\bin\startup
TOMCAT終了
 c:\jakarta-tomcat-3.2.3\bin\shutdown
サーブレッドの実行(Webブラウザ)
 http://localhost:8080/YJKS/06/servlet/Sample1
JSPの実行
 http://localhost:8080/YJKS/06/sample1.jsp
HTMLの実行
 http://localhost:8080/YJKS/06/sample1.html
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サーブレットの動作
サーブレットの例
 ・TOMCATの起動
 ・Webブラウザでサーブレッド実行

サーブレッドは、ユーザーから始めてリクエストを受け取ったとき、1度だけ起動し、その後はスレッド(thread)で処理。
→高速で、同時に多くのユーザーが訪れても、すばやく対応。

サーブレットのメソッド
 init()  サーブレットが読み込みされた時
 service() サーブレットが呼び出された時
 doGet()  GETリクエストを受け取った時
 doPost() POSTリクエストを受け取った時
 destroy() サーブレットが終了する時

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サーブレットをフォームから実行
例 Sample2.html
例 Sample2.java
お選びください。



getParameter()メソッド

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
セッション管理
セッション管理の例

一人のユーザーがWebサイトにやってきてから立ち去るまでの行動を管理。

セッションを設定
 HttpSession hs = request.getSession(true);
getAttribute:セッションに設定されている値を取得
 Integer cn = (Integer) hs.getAttribute("count");
 Date dt = (Date) hs.getAttribute("date");
setAttribute:セッションに名前と値を設定
 hs.setAttribute("count", cn);
 hs.setAttribute("date", dt);

Webクライアント  Webサーバ
クッキー<----------セッションID(セッションIDを割り当てる)
クッキー --------->セッションID(セッションIDを確認してユーザを判別)
Webブラウザを終了した場合や、一定時間が経過した場合、終了したものとみなされる。

サーブレットの処理ルーチンとなるサービスメソッド
service()
doGet()
doPost()

URL再書き込み
クッキーを使うセッション管理では、Webブラウザがクッキーを使用しない設定にしていると、セッション管理が上手くいきません。
このとき、「URL再書き込み」という方法があります。
http://hostname/servlet/MyServlet$sessionid=XXXXXXXXX
SSLという暗号化技術を使うときは、暗号化の対象にならないので、向いていない。


JSP

例 Sample2.html
例 Sample2.jsp
お選びください。


JSP(Java Server Pages)は、HTML文章中にコードを埋め込む。
サーブレットは、コードの中にHTML文書を埋め込む。

JSPファイルはディレクトリに保存されていて、サーバーから読込まれると、いったんサーブレットに変換され、コンパイルされてから実行される。コンパイルされた後は、サーブレットと同じ動作になる。ソースファイルが更新されない限り、再コンパイルは行われない。このため、スプリクティングを使うような技術であるにもかかわらず、短いレスポンスタイムを実現できる。

JSPの書式
スクリプトレット(scriptlet):javaのコードを記述
 <%・・・%>又は
 <jsp:scriptlet>・・・</jsp:scriptlet> XMLの書式

宣言(declaration):変数やメソッドなどを宣言
 <%!・・・%>又は
 <jsp:declaration>・・・</jsp:declaration> XMLの書式

式(expression):式を評価して文字列とする
 <%=・・・%>又は
 <jsp:expression>・・・</jsp:expression> XMLの書式


ディレクティブ(directive):インポートを行う
 <%@page import="クラス名"%>又は
 <jsp:directive.page import="クラス名"/> XMLの書式
ディレクティブ(directive):Webブラウザに送られる文書のコンテンツのタイプを設定する
 <%@page contentType="コンテンツタイプ"%>又は
 <jsp:directive.page contentType="コンテンツタイプ"/> XMLの書式

アクション(action)
リクエストを転送する
 <jsp:forword page="転送先のURL"/> 
ファイルを読込む
 <jsp:include page="読込むファイルのURL"/> 
JavaBeansを使う
 <jsp:useBean id="変数名" class="Beanのクラス"/> 
オブジェクトのデータを設定する
 <jsp:setProperty name="変数名" property="データ名" value="値"/> 
オブジェクトのデータを取得する
 <jsp:getProperty name="変数名" property="データ名"/> 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
暗黙のオブジェクト(implicit Object)
request:<%String tmp = request.getParameter("cars");・・・

オブジェクト名 オブジェクトの内容 インターフェイス
request         リクエスト          HttpServletRequest
response        レスポンス          HttpServletResponse
session         セッション          HttpSession
out             出力ストリーム      PrintWriter(JSPWriter)
pageContext     このJSPページ       PageContext
application     同じWebページアプリケーション内のサーブレット・JSP
                                    ServletContext
cojfig          このJSPページの初期設定
                                    ServletConfig

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
場合に応じたWebページ
<%   if(carname.length() != 0){    %>
<%= carname %>のお買い上げありがとうございました。<br>
<%   }   else{  %>
入力してください。<br>
<%   }  %>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
JSPページにHTML文書を埋め込む
・サーブレットがリクエストを受け取った時、HTML文書の埋め込みが行われる。
 <jsp:include page="company.html" flush="true" />

・JSPが最初にサーブレットのコードに変換されるときに、文書を埋め込む。
 <%@ include file="company.html" %>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
JSPとサーブレットとの連携
リクエスト
−−−−−−>サーブレット−−−>JSP
             −−−>HTML
・リクエスト Sample5.html
 <form action="http://localhost:8080/xxx/servlet/Sample5" method="GET">

・サーブレット Sample5.java
         String carname = request.getParameter("cars");
         ServletContext sc = getServletContext();
         if(carname.length() != 0){
             sc.getRequestDispatcher("/Sample5.jsp")
               .forward(request, response);
         }
         else{
            sc.getRequestDispatcher("/error.html")
              .forward(request, response);
         }
・JSP Sample5.jsp
<%  String tmp = request.getParameter("cars");
    String carname = new String(tmp.getBytes("8859_1"), "JISAutoDetect");   %>
<%= carname %>のお買い上げありがとうございました。<br>


JavaBeans

JavaBeansという仕様にしたがって、コンポーネントを作成。
 @Serializableインタフェース実装
 A引数なしのコンストラクタをもつ
 Bフィールドをクラスの外部から直接アクセスできないように修飾子をつける。
 Cフィールドの値を設定・取得するために決まった名前のメソッドを使う。
  プロパティの設定・・・setプロパティ名
  プロパティの取得・・・getプロパティ名
             Beanを設定   Beanから結果を取得
リクエスト−>サーブレット−−−−−>Bean−−−−−−−−−>JSP
                リクエストの転送
             −−−−−−−−−−−−−−−−−>

サーブレット
    //Beanの作成
         CarBean cb = new CarBean();
         cb.setCarname(carname);
         cb.makeCardata();
    //Beanをリクエストに設定
         request.setAttribute("cb", cb);
    //リクエストをJSPに転送
         sc.getRequestDispatcher("/Sample6.jsp")
              .forward(request, response);

Bean
    //Cプロパティの設定・・・setプロパティ名
       public void setCarname(String cn)
       {  carname = cn;   }
    //Cプロパティの取得・・・getプロパティ名
       public String getCardata()
       {  return cardata;   }
       public void makeCardata()
       {  cardata = "車種:" + carname;   }

JSP
<%@ page contentType="text/html; charset=Shift_JIS" %>
//id="cb":Beanオブジェクトをさす変数
//class="CarBean":Beanの準備をする
<jsp:useBean id="cb" class="CarBean" scope="request" />
//Bean結果を取得
<jsp:getProperty name="cb" property="cardata" />



Beanを利用するためのJSPアクション
タグ          属性
<jsp:useBean />   id="Beanオブジェクトをさす変数名" 
            サーブレットで設定したBeanの名前
                     type="Beanオブジェクトの型"
                     class="Beanのクラス"
                     scope="Beanのスコープ"
<jsp:getProperty />
                     name="Beanオブジェクトをさす変数名" 
                     property="プロパティ名"
<jsp:setProperty />
                     name="Beanオブジェクトをさす変数名" 
                     property="プロパティ名"
                     value="プロパティに設定する値"
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
JavaでWebサイトを構築する。
 ・サーブレット・・リクエストの受付を担当
 ・Bean・・・・・・定型的な処理を担当
 ・JSP ・・・・・Webページの表示を担当


JDBC

データベース(database)
java.sqlパッケージ

SQL(Structured Query Language)
JDBCドライバ(JDBC driver)
JavaプログラムーーJDBC-ODBCーーーーーーODBCーーーーーdb
         ブリッジドライバ   ドライバ
                                       Microsoft社のODBC
                                       (Open Database Connectivity)
ODBCデータソースの設定
 @スタート、設定、コントロールパネル、管理ツール、データソース(ODBC)
 A追加
 BMySQL ODBC Driver(Microsoft Access Driver)
 Cデータソース名 

JDBCドライバ
 タイプ1:JDBC-ODBCブリッジドライバ (今回)
 タイプ2:ネイティブブリッジドライバ
 タイプ3:ネットプロトコルドライバ
 タイプ4:ネイティブプロトコルドライバーー本格的

@JDBCドライバを読込んでドライバマネージャに登録
  //JDBCドライバを読込む
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
Aデータベースに接続
         Connection cn = DriverManager.getConnection
                  ("データソース名","ユーザ名","パスワード");
    //問い合わせの準備
         Statement st = cn.createStatement();
         String qry = "SELECT * FROM 車表";//SQL文を用意
BSQL文による問い合わせ
         ResultSet rs = st.executeQuery(qry);
Cデータの取得
         ResultSetMetaData rm = rs.getMetaData();
         int cnum = rm.getColumnCount();//列数を取得
  //1行ずつ取得
         rs.next()
         rm.getColumnName(i)
         rs.getObject(i)
Dクローズ
         rs.close();
         st.close();
         cn.close();
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
SQL
 表の表示
   SELECT * FROM 表;
 データの追加
   INSERT INTO 表 VALUES(5,'タクシー');
 データの削除
   DELET FROM 表 WHERE 名前='トラック';

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Webとデータベース
                    ┏━━━━━━┓
                 ┃データベース┃
                 ┗━━━━━━┛
                                        ↑│データベースに問い合わせ
                    ││
               Bean   │↓  Beanから
       ┏━━━━━━┓を設定 ┏━━┓ 結果を取得 ┏━━┓
リクエスト─→┃サーブレット┃───→┃Bean┃──────→┃JSP ┃
       ┗━━━━━━┛    ┗━━┛       ┗━━┛
           │      リクエストの転送      ↑
           └────────────────────┘





参考資料

かんたん サーバサイド Java
米持幸寿著
翔泳社発行
2001年12月18日

やさしいJava活用編
高橋麻奈著
ソフトバンクパブリッシング発行
2002年6月1日


ホームへ