yano3nora
7/2/2017 - 1:36 PM

[java: note] java8 knowledge note. #java

[java: note] java8 knowledge note. #java

Syntax

https://paiza.jp/works/java/primer

  • Mainクラスがエントリーポイント
  • コンストラクタ名はクラス名と同じってやつ
  • 変数宣言時には型宣言:型 変数名 = "hoge";
    • Integer age = 20; / int age = 20;
    • String name = "yamada";
  • メソッド定義は引数・返り値・異常時に投げる例外も定義
  • WEBアプリでJavaを使うときはサーブレット・JSPとそれらを処理するアプリサーバ(tomcatとか)が必須
  • if とか for とかはだいたい他言語と一緒
  • 文字列 String 型は "" を利用
    • '' は CHAR のリテラル宣言なので String にならないことに注意

基本セット

public class Main {
    public static void main(String[] args) throws Exception {
        int price = 100;
        String item = "Apple";
        // 標準出力 - Eclipse のコンソールとかで軽くプリントデバッグ
        System.out.println("This " + item + " is " + price + " yen");
    }
}

サーブレットのテンプレ

//①お決まりのインポート文(Eclipseでサーブレットクラスを作成すると自動で書いてくれる)
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//②サーブレットクラスを作るにはサーブレットクラスの元になるHttpServletクラスを継承する必要がある。
public class Sample extends HttpServlet{
    //③サーブレットクラスがGETで呼ばれた場合のdoGetメソッドをオーバーライドする。書き方は基本このお決まりの書き方になる。
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException{
            //処理を書く
            // TODO Auto-generated method stub
        response.setContentType("text/html; charset=UTF-8"); 
        PrintWriter out = response.getWriter(); 
        out.println("<html>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println("<p>Hellooooo!</p>");
        out.println("</body>");
        out.println("</html>");
    }
    //④サーブレットクラスがPOSTで呼ばれた場合のdoPostメソッドをオーバーライドする。書き方は基本このお決まりの書き方になる。
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException{
            //処理を書く

    }
}

前提知識

WriteOnce,RunAnywhereなサーバサイド制定型付け純粋オブジェクト指向言語。コンパイル・ビルド→Java中間コード生成→Java実行用VMにて実行な流れを辿るみたい。

JSP?

JSP(Java Server Pages)と言って、PHPなどと同じようにタグを使ってhtml内にそのまま記述出来るもの。いってしまえばJavaのビューヘルパー・HTMLテンプレートエンジン的な感じ。XMLで定義した独自タグを使ったりCakePHPのHTMLヘルパーみたいなJava Beans というものが扱える。

サーブレット?

サーブレットは、Javaを使ってサーバサイドプログラムを作るための技術。WEBサービスなどをJavaで作る場合には、必須。サーブレットおよびJSPを使うには、JavaEE環境が必要。

サーブレットはブラウザからリクエストがあるとアプリケーション・サーバーがサーブレットクラスのインスタンスを生成する。CakePHPなどのMVCFWのControllerのようなイメージで、このクラスに処理を実装しビューとしてJSPを呼び出すような設計にする。(当然、JavaMVCフレームワークではModelも別途用意する)

ちなみに、サーブレットからJSP、または他サーブレットへのフォワードをする際のHTTPリクエストのパラメータ値などの値の受け渡しは、リクエストスコープという「リクエストを受けてサーバがレスポンスをするまでの間だけサーバが値をメモリ保持する」仕組みでなりたっている。

毎回リクエストの度にインスタンスを生成するのはサーバーに負荷がかかるため、一回目作ったインスタンスをリクエスト応答後も破棄せずに次のリクエストでも再利用する。(サーバーが終了するなどの時にインスタンスがサーバーによって破棄される)

JSP・サーブレットの処理フロー

JSPはJavaサーバーがJSPのコードを読み込み、それをサーブレットのソースコードに変換。HTMLのタグなど、すべてprintlnで書きだすように変換される。そして、生成されたサーブレットのソースコードからJavaクラスファイルを生成してそれを呼び出す。

JSPファイル ⇒ サーブレットファイル ⇒ クラスファイル ⇒ 実行

MVCをどうやるのん?

コントローラ

ブラウザからのリクエストを受け取る役割(サーブレット)

ビュー

レスポンスとして返すファイル(JSPファイル)

モデル

実際の処理を行う役割(普通のjavaクラス)

URLと対応サーブレットクラス

サーブレットを呼び出す際のURLは以下の仕組みになっている。

http://サーバー名/アプリ名/URLパターン

URLパターンというのはサーブレットクラスでつけるエイリアス。サーブレットクラスでURLパターンを設定しておくことで、それをURLとして呼び出すことができる。このURLをhtmlのaタグのhref属性やformのaction属性に設定すれば、サーブレットへ飛ばせる。

フォワード

Javaにはリダイレクトの他にフォワードという別ファイル処理へのGoToみたいなものを使う。

開発について

Gulpとかのフロントエンド系のビルドツールは使えません。AntとかのJavaビルドツールがあり、これがEclipseなどのIDEと対応しているので、Eclipse+Antでビルドしながら開発するのがベター。

基本概念

  • 「メモリをOOPを介して扱い、開発者がC言語のように直接扱うことを制限する」
  • 「ガベージコレクション機能を搭載しメモリ確保・解放を開発者の管理下から外す」
  • 「JavaVM上実行を前提とし、CPUやOSに依存しないでプログラムを実行する」

だいたいの歴史

以上3点を基本概念としてSun社が開発→MSがパクッてもめる→GoogleがAndroidで採用し独自VMやらプラットフォームとか作る→Sun社がOracleに買収される→OracleがGoogleのJavaに文句つけてる←いまここ。

実行環境

基本サーバ上で動かします。WEBサーバで動かす場合はJavaサーブレット(WEBサーバでJava?俺が仲介して動かしてやんよ!的なアプリケーションサーバさん、Tomcatとか)で駆動させる。昔JavaアプレットとかいうクライアントサイドJava動かすVMがあったが今は死に絶え非推奨となりました。あと、機能セット/プラットフォーム/実行環境/仕様的な意味でのフレームワークが大きく4つあったんだけど...大体全部JavaSEに統合される流れらしい。

  • JavaSE(アプリ開発プラットフォーム、これ入れときゃok)
  • JavaEE(大規模企業向けプラットフォーム)
  • JavaME(モバイル端末向けプラットフォーム)
  • JavaFX(Google製Android用オレオレプラットフォーム)

MVCとかのWEB開発フレームワーク

ApacheのStrutsが発端ぽい(今は古すぎて微妙)。今はSpringやPlayFrameworkとかが今風で、堅いのはJSF。 ※AndroidはGoogleが提供するAndroidプラットフォーム(Andorid SDK)がJavaSEとAndroidAPI群との橋渡しをしてくれる。その間に緩衝材として入るようなMVCフレームワークで有力なものはいまのところない。


導入手順

http://techfun.cc/java/windows-eclipse-install.html

  1. サーバにJavaDevelopmentKit-1.8を導入
  2. 環境変数にパスを通す(win)
  3. http://mergedoc.osdn.jp/ から eclipseをDL