約 1,887,296 件
https://w.atwiki.jp/asayamayuki/
Java入門wikiへようこそ 3回生用のJava入門ページです。
https://w.atwiki.jp/cappu/pages/58.html
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.ByteBuffer; public class ClientServerSocketSample { private final static int port = 50000; static class SimpleServerSession implements Runnable { private Socket socket; public SimpleServerSession(Socket socket) { this.socket = socket; } @Override public void run() { try { BufferedInputStream input = new BufferedInputStream(socket .getInputStream()); BufferedOutputStream output = new BufferedOutputStream(socket .getOutputStream()); while (true) { // インプットストリームからバイトを取得 byte[] readByte = new byte[1024]; int streamSize = -1; RecievedData data = new RecievedData(); while ((streamSize = input.read(readByte)) != -1) { ByteBuffer re = ByteBuffer.wrap(new byte[streamSize]); re.put(readByte, 0, streamSize); data.putByte(re.array()); if (data.isCompleted()) { break; } } ByteBuffer bytebuf = ByteBuffer.wrap(new byte[data .getSize()]); bytebuf.putInt(data.getDataSize()); bytebuf.put(data.getData().array()); output.write(bytebuf.array()); output.flush(); } } catch (Exception e) { if (socket != null) { try { socket.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } } public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { ServerSocket server = new ServerSocket(port); while (true) { Socket soket = server.accept(); new Thread(new SimpleServerSession(soket)).start(); System.out.println("accept soket " + soket); } } catch (IOException e) { e.printStackTrace(); } System.out.println("end"); } }).start(); Socket socket = new Socket(); try { socket.connect(new InetSocketAddress(port)); BufferedOutputStream out = new BufferedOutputStream(socket .getOutputStream()); BufferedInputStream input = new BufferedInputStream(socket .getInputStream()); for (int i = 0; i 10000; i++) { // 送信 String sendString = "sample 日本語"; byte[] senddata = sendString.getBytes(); ByteBuffer bufData = ByteBuffer.allocate(4 + senddata.length); bufData.putInt(senddata.length); bufData.put(senddata); out.write(bufData.array()); out.flush(); // 受信 // インプットストリームからバイトを取得 byte[] readByte = new byte[1024]; int streamSize = -1; RecievedData data = new RecievedData(); while ((streamSize = input.read(readByte)) != -1) { ByteBuffer re = ByteBuffer.wrap(new byte[streamSize]); re.put(readByte, 0, streamSize); data.putByte(re.array()); if (data.isCompleted()) { break; } } String recieve = new String(data.getData().array()); if (recieve.equals(sendString)) { } else { System.err.println("errror"); } } System.out.println("終了"); } catch (IOException e) { e.printStackTrace(); } } } class RecievedData { private RecievedState state; private RecievedState sizeData; private RecievedState messageData; private boolean completed; public RecievedData() { sizeData = new RecievedState(this, 4); state = sizeData; } public void putByte(byte[] data) { state.putByte(data); } void full(RecievedState recievedState, ByteBuffer fullData, ByteBuffer restData) { if (recievedState == sizeData) { fullData.position(0); messageData = new RecievedState(this, fullData.getInt()); state = messageData; if (restData != null) { putByte(restData.array()); } } else if (recievedState == messageData) { if (restData != null) { throw new RuntimeException("データサイズが不一致です"); } completed = true; } } public ByteBuffer getData() { if (messageData != null) { return messageData.getData(); } return null; } public boolean isCompleted() { return completed; } public int getSize() { if (messageData != null) { return sizeData.getSize() + messageData.getSize(); } return sizeData.getSize(); } public int getDataSize() { if (messageData != null) { return messageData.getSize(); } return sizeData.getSize(); } private class RecievedState { private int size; public int getSize() { return size; } private RecievedData recievedData; private ByteBuffer buf; private boolean full; public RecievedState(RecievedData recievedData, int size) { this.size = size; buf = ByteBuffer.wrap(new byte[size]); this.recievedData = recievedData; } public void putByte(byte[] data) { if (full) { throw new RuntimeException("これ以上書きこむことはできません"); } int rest = size - buf.position(); if (rest == data.length) { buf.put(data, 0, data.length); recievedData.full(this, buf, null); full = true; } else if (rest data.length) { buf.put(data, 0, data.length); } else { buf.put(data, 0, rest); ByteBuffer restBuf = ByteBuffer.wrap(new byte[data.length - rest]); restBuf.put(data, rest, data.length - rest); recievedData.full(this, buf, restBuf); full = true; } } public ByteBuffer getData() { return buf; } } }
https://w.atwiki.jp/kapper1224/pages/93.html
Linuxでも昔のまうじゃん for Javaが動作します。 本家サイトからJava版のZIPファイルをダウンロードして展開 sudo apt default-jre mkdir mujin cd mujin wget http //www.amy.hi-ho.ne.jp/ishihata/maujong/java/mujnj_0.9.1.7.zip unzip mujnj_0.9.1.7.zip java -jar Maujong.jar で動作します。 ZIPを展開する時はサブフォルダを作成した方が良いかもしれません。 2007年製のアプリですがJavaはずっと動きそうです。
https://w.atwiki.jp/idjj/pages/18.html
java concurrentパッケージ スレッド協調クラス Exchanger スレッド間で協調してオブジェクトの交換をしたいときに使用 Producer/Consumer間で似非同期リクエスト/リプライ実装に使用できる consumer側スレッドでNull Objectを生成 Exchanger#exchange呼び出し subscribe Producerスレッドはsubscribeに対して、キャッシュからデータ取り出し Exchanger#exchange呼び出し CountDownLatch 複数のスレッド間の同期化を行い、最後のスレッドが到達した時点で各スレッドを開放する 再利用不可能 CyclicBarrier 複数のスレッド間の同期化を行い、最後のスレッドが到達した時点で各スレッドを開放する バリアアクションを登録しておくと、各スレッド解放前にバリアアクションを起こすことができる。 各スレッドの状態同期などに使用できる カウントをリセットして再利用可能
https://w.atwiki.jp/pocketmonsterxy/pages/25.html
毎日 曜日別 日付別 季節別 誕生日 毎日 曜日別 日付別 季節別 誕生日
https://w.atwiki.jp/roguren/pages/19.html
Javaではなかなか使われない、printfについて。 JavaでのDOS画面への出力には、print or println を使用することが多いと思います。 他の方法を知っておいてもいいかもということで、メモ的に書いておきます。 実はprintf。 これ一つで文字列から数値まであらゆるデータを書式化して表示するという、多機能な一面を持っています。 printlnと似た感じで使えます。 ちょっと違いますけど…。 ものそい簡単に言うと System.out.printf("書式指定", 変数や定数); でしょうか。 ちょっと違いますね。面倒が無くて楽な部分もあります。 特に違うのは、エスケープシーケンスの部分でしょうか。 ¥n → %n こんなふうに、¥ではなくて%で表示します。 ¥でも出来ますが。 実際どう使うの?ってなると… System.out.printf("今日は %d日です。%n", 20); 今日は20日です。 こんな感じでしょうか。 %dの部分は、記述子とか何とか呼ばれます。 良く使うのだと… %d ・・・10進数の整数 %f ・・・小数 %c ・・・文字 %s ・・・文字列 このあたりでしょうか。 でもね。 何が凄いって! 桁数合わせられるんですよ、実は! %3d→3桁 とか。 注意点は改行されないことでしょうか。 お試しあれ。
https://w.atwiki.jp/asato/pages/23.html
Java Concurrency メモ
https://w.atwiki.jp/sfrontier/pages/84.html
Java 作成日 2007/11/08 H.Naito 更新日 2007/11/08 H.Naito JDBC を利用して Oracle に接続したい JDBC を利用して Oracle に接続したい ここでは、テーブル一覧を取得し、HTML で表示するモジュールのサンプルを紹介する import java.sql.*; public class JDBC_Test { public static void main ( String[] args ) { Connection con = null; Statement smt = null; ResultSet rst = null; // Oracle JDBC Driver のロード try { Class.forName( "oracle.jdbc.driver.OracleDriver" ); } catch ( ClassNotFoundException ce ) { return; } /* データベースへの接続 */ try { con = DriverManager.getConnection( "jdbc oracle thin @HOSTNAME PORT_NUMBER ORA_SID", "USR_ID", "PASSWORD" ); // ステートメントを作成 smt = con.createStatement(); // 問合せの実行 rst = smt.executeQuery( "select * from tab" ); // 問合せの結果表示 System.out.println( " html " ); System.out.println( " body " ); System.out.println( " table border = \" " + "\"5\" " ); System.out.println( " tr td TNAME /td td TABTYPE /td td CLUSTERID /td /tr " ); while ( rst.next() ) { // 行番号による指定 System.out.println( " tr " ); System.out.println( " td " + rst.getString( "TNAME" ) + " /td td + rst.getString( "TABTYPE" ) + " /td td + rst.getString( "CLUSTERID" ) + " /td " ); System.out.println( " /tr " ); } System.out.println( " /table " ); System.out.println( " /body " ); System.out.println( " /html " ); // 結果セットをクローズ rst.close(); // ステートメントをクローズ smt.close(); // 接続をクローズ con.close(); } catch ( Exception e ) { e.printStackTrace(); } } }
https://w.atwiki.jp/shuei/pages/240.html
JSP JSPページ マークアップの合間に、動的なコンテンツを作成するためのロジックを表す特殊なJSP要素が含まれる サーブレットに比べて、読みやすく?保守しやすく?単純である?ことから好まれる? 実際にはサーブレットテクノロジの拡張機能であり、JSPページは「JSP実装クラス」と呼ばれるJavaサーブレットに変換される(JSPエンジン) JSPエンジンは、JSP実装クラスが存在しない、或いはJSPページより古い場合に起動する JSPページ内で定義されているマークアップを出力するJavaコードと、ユーザーリクエストを処理する全てのコードを含む _jspService()メソッドが含まれる Javaソースコードへの変換中にJSPページに不完全なJSP構成要素が含まれる場合、サーバーよりParseExceptionが返される コンパイル中にスクリプトレットでの構文エラーが発生すると、サーバよりJasperExceptionが返される その場合実装クラス名とエラーのスタック情報が表示される JSPのライフサイクル JSP実装クラスのインスタンスが存在しない場合、JSPコンテナはクラスの読込み・クラスのインスタンス化・jspInit()にて初期化処理が行われる _jspService()メソッドを呼び出し、リクエストとレスポンスを渡してサービス処理を行う JSP実装クラスの消滅により jspDestroy()にて消滅処理が行われる 指令(jsp directive) 重要な情報をJSPエンジンに渡すために使われる 出力は生成しない include指令以外は、JSPページの先頭に記述しなければならない <%@ 指令 {属性=”値”}* %> page指令 <%@ page [ language="スクリプト言語" ] [ extends="パッケージ名.クラス名" ] [ import="インポートするパッケージ名" ] [ session="true | false" ] [ buffer="none | (size)kb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="版権など" ] [ errorPage="対応しない例外が発生した場合のエラーページ" ] [ isErrorPage="true | false" ] [ contentType="MIMEタイプ" ] [ pageEncoding="peinfo" ] %> errorPageは、JSPファイルのはじめに入れるべき taglib指令 <%@ taglib uri="タグライブラリ" prefix="プレフィックス" %> taglibで登録したカスタムタグを使用できるようになる 宣言(jsp declaration) JSPページ全体でのフィールド・メソッドを定義する Java言語の予約語や暗黙的オブジェクト名をつけることはできない <%! [宣言;]+ %> スクリプトレット(jsp scriptlet) マークアップの間に記述されるコードの断片 将来のJSP仕様ではJava以外の言語も記述できるようになるかもしれない <% コード %> 式(jsp expression) String型かString型に変換できる肩でなければならない <%= 式 %> アクション(jsp ****) <jsp include page="url" flush="true | false" /> JSPページなどほかのファイルを動的にインクルードする <jsp forward page="url" /> 別のJSPやサーブレットにフォアードし、呼出元のJSPページは処理を終了する <jsp plugin type="bean | applet" code="パッケージ名.クラス名" codebase="コードベース" [ align=/archive=/height=/hspace=/jreversion=/name=/vspace=/width=/nspluginurl=/iepluginurl= ] /> JavaアプレットまたはJavaBeansコンポーネントを組み込むことができ、ブラウザに適した<object>タグまたは<embed>タグを生成する <jsp params>を含む場合は、内部にjsp paramを列挙できる <jsp fallback>を含む場合は、pluginが起動できない場合の代替コンテンツを指定できる コンテンツが見つからない場合はClassNotFoundExceptionとなる <jsp param name="name" value="value" /> jsp include/forward/plugin と組み合わせて使用する <jsp useBean id="参照名" [scope="page | request | session | application"] typeSpec /> ボディをもつ場合、<jsp setProperty>または、<%。。%>を含むことができる typeSpecでは、クラス名 | タイプ名 | クラス名+タイプ名 | ビーン名+タイプ名 の組み合わせが許される タイプ名としては、クラス名だけでなくスーパークラスや実装されたインターフェース名でも良い <jsp setProperty name="ビーン名" property="プロパティ名" value="<%=XX%>" />では、ビーンのsetterを呼ぶ <jsp getProperty name="ビーン名" property="プロパティ名" />は、getterを呼ぶがString型として出力される JavaBeans パッケージ化されたpublic指定のシリアライズ可能クラスであり、publicの引数のないコンストラクタとsetter・getterのみをもつ コメント 出力コメントは、レスポンスにて返される <!−− コメント −−> JSP式を含めても良い JSPコメントは、レスポンスにて返されない <%−− コメント −−%> <% /*コメント*/ %>と同義 暗黙的オブジェクト request=HttpServletRequest / response=HttpServletResponse / out=JspWriter / session=HttpSession / config=ServletConfig / application=ServletContext / page=Object(JSP実装クラス) / pageContext=Object(より抽象化された実装クラス) / exception=Throwable(エラーページの場合) カスタムタグ カスタムタグ JSP標準で使用できるアクションとは別に、タグライブラリを参照することによりカスタムアクションを実行するためのタグ カスタムタグの準備 タグハンドラの作成 → TLDファイルの作成 → web.xmlへのTLDファイルの登録 → JSPページ内にtaglib指令を記述 → カスタムタグをJSPページ内に記述 コンパイルは逆順で行われる web.xml内<taglib>タグにて、taglib-uri/taglib-locationを指定する taglib-locationは、TLDファイル(Tag Library Descripter)のコンテキストルートからのパスを指定する /WEB-INF以下の任意のディレクトリに配置するのが望ましい TLDファイル URI・タグ名とそれを処理するタグハンドラクラス・属性がまとめられている <taglib>がルートノードであり、tlib-version/jsp-version/short-name/tagを指定する taglibタグ内<tag>タグは最低2つの要素が必要であり、name/tag-class/body-content/attributeを指定する tagタグ内<body-content>タグには、empty/JSP/tagdependent(本文をもっても動的解釈されない)の3種の文字列を指定する tagタグ内<attribute>タグには、name/required/rtexprvalueを指定し属性の設定を行う rtexprvalueをtrueで指定しないとJSP式を解釈しない タグハンドラクラス カスタムタグに関連付けられた実際のタグ処理を行うクラスファイル /WEB-INF以下classesかlibに配置する javax.servlet.jsp.tagext.Tagインターフェース(doStartTag()/doEndTag())やIterationTagインターフェース(+doAfterBody())が大本であるが、本文をもつタグのためにはBodyTagインターフェース(+doInitBody()/setBodyContent())が使用される 実際には、IterationTagインターフェースを実装したTagSupportクラスとBodyTagインターフェースを実装したBodyTagSupportクラスのどちらかを継承してタグハンドラクラスを作成する TagSupportクラス javax.servlet.jsp.tagext.TagSupportクラスを継承してタグを作成すると、本文をもたないタグや本文を解釈する必要のないタグを作成できる doStartTag()の返り値として、SKIP_BODYまたはEVAL_BODY_INCLUDEを指定する EVAL_BODY_INCLUDEでは本文の評価・表示を行う doEndTag()の返り値として、SKIP_PAGEまたはEVAL_PAGEを指定する SKIP_PAGEを指定するとタグより後の部分を評価しない タグ属性値の扱いは、タグクラスのsetter/getterを作成する doAfterBody()では、EVAL_BODY_AGAINかSKIP_BODYを指定でき、本文部分が再評価される body-contentがJSPであれば、TagSupport.getParent()メソッドで上位タグハンドラクラスの参照を取得できる 下位の参照は取得できないがsetValue/getValueによりObject型の値を相互参照できる 同様にbody-contentがJSPであれば、findAncestorWithClass()メソッドでは、同JSPページに限定して上位タグを取得する getParent()ではさらに外部のJSPページを参照する可能性がある BodyTagSupportクラス TagSupportを継承したクラス doStartTag()の返り値として、EVAL_BODY_BUFFEREDが指定できるようになる この場合、本文の評価のみで表示は行わずにsetBodyContent()/doInitBody()に委ねる メンバ変数bodyContentを利用または、setBodyContent(BodyContent bc)をオーバーライドすると、BodyContentオブジェクトを利用できる clearBody()メソッドでbodyContentをクリアできる doInitBody()は、本文部分が評価される前に呼び出されるメソッドである PageContextクラス タグハンドラクラスにjavax.servlet.jsp.PageContextクラスを利用するためには、TagSupportクラスのメンバ変数であるpageContextを利用するか、setPageContext(PageContext pc)をオーバーライドする pageContext.getOut()により、JspWriterオブジェクトを取得でき、JSPページへの出力を行うことができる pageContext.getAttribute(name, scope)またはpageContext.findAttribute(name)を利用することで、JSPページからJavaBeansを受け取ることができる scopeは4つのスコープ全てが有効 pageContext.getRequest()/getSession()/getServletContext()メソッドにて、それぞれのスコープでのコンテキストを取得できる JSTL JSP Standard Tag Libraryは、一般的に使用される標準的な処理をまとめたタグライブラリであり、core/I18N/sql/xmlがある
https://w.atwiki.jp/kapper1224/pages/95.html
Linuxでも昔のまうじゃん for Javaが動作します。 本家サイトからJava版のZIPファイルをダウンロードして展開 sudo apt default-jre mkdir mujin cd mujin wget http //www.amy.hi-ho.ne.jp/ishihata/maujong/java/mujnj_0.9.1.7.zip unzip mujnj_0.9.1.7.zip java -jar Maujong.jar で動作します。 ZIPを展開する時はサブフォルダを作成した方が良いかもしれません。 2007年製のアプリですがJavaはずっと動きそうです。