ご注意ください

  • 当ブログのコメントやトラックバックに、アカウントハックサイトや、そのようなサイトへリダイレクト(転送)される可能性が高いサイトへのリンクが時々貼られているようです。
    そのようなサイトへのリンクが貼られたコメント・トラックバックは、見つけ次第削除・禁止ワード登録していますが、今後も危険なサイトへのリンクが貼られる可能性がありますので、安易にリンク先へ飛ばないよう充分ご注意ください。

オンラインゲーム関連

著作権表示

  • 当ブログに記載されている
    会社名・製品名・システム名などは、
    各社の登録商標、もしくは商標です。

    当ブログ上の文章・写真・画像の
    無断転載、無断転用、直リンクなどは
    行わないでください。

    (C) 1998-2016 Vertex.
    (C) 2002-2016 SQUARE ENIX CO., LTD.
    (C) CAPCOM CO., LTD. 2007, 2016

    All Rights Reserved.
無料ブログはココログ

[Java] クライアントでタイムアウト処理

Webアプリケーションを作っていて、何かとお世話になるのがタイムアウト処理。サーバ側でセッション情報から判断してタイムアウトさせたりするのは簡単ですが、もしJavaScriptがサーバ側に値を取りに行ったら・・・。

今作っているシステムでその状況になると、サーバ側ではタイムアウト処理ができず、しかも取りに行った値の情報はなくなっているので、画面にはExceptionエラー画面が表示されてしまいました。これはマズイ。

ということで、JavaScriptでタイムアウトを検知できないか試行錯誤した結果、何とか問題なく動くようになったので備忘録としてメモメモ。

まず、フォーム側にゲッターさんを用意。このゲッターさんがタイムアウト時間とタイムアウト用ページのURLを渡すようにします。こうすることで、サーバ側のタイムアウト時間と合わせることができるのと、システムプロパティでタイムアウト用ページを切り替えられるから。

例:MainPageForm.java
public int getTimeoutMilliSec() {
    HttpServletRequest req = Utility.getRequest();
    HttpSession ses = req.getSession();
    return ses.getMaxInactiveInterval() * 1000;
}
public String getTimeoutUrl() {
    return this.timeoutUrl;
}


次に、JavaScriptでタイムアウト用の関数を作成。

例:mainpage.jsp
var timeoutSec = "<h:outputText value="#{formMainpage.timeoutMilliSec}" />";
var timeoutURL = "<h:outputText value="#{formMainpage.timeoutUrl}" />";
var accessTime = new Date();

function chkTimeout() {
    var diff = new Date() - accessTime;
    if (diff > timeoutSec) {
        location.href = timeoutURL;
        return (true);
    }
    return (false);
}


で、後はonClickイベントでこの関数を呼ぶか、各関数の一番最初にこのタイムアウト用関数を呼んで、戻り値がfalseのときだけ処理をするようにしてあげて、タイムアウト処理ができるようになりました。

もっと楽な方法とか、もっとイイ方法があるかもしれませんが、とりあえずこれでもできました、ということで。

タイムアウト時間やURLをJSPにべた書きしてもいいなら、フォームにゲッターさんを用意する必要もなく、もっとシンプルになります。

[Servret/JSP] よく出るエラー

JSPをいじっていると良く出るHibernateExceptionのエラーメッセージがこれ。

Could not execute JDBC batch update

Not null指定しているカラムにnullをセットしようとして出力されるエラーっぽいのですが、ぱっとエラーメッセージを見ても原因がわからず、いつも悩んでます。進歩がないです・・・(笑)

ちなみに上のエラーはデータを追加しようとしたときに出るみたい。

そして、

Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1

こっちのエラーは、既にあるデータを更新するときに出るみたい。

ということで、メモメモっと。

[Servret/JSP] テキストファイルを読み込んで表示 Part.2

JSPファイルにべたっと貼ったさきほどのソースを書き換えて、Faces管理Beanから呼び出せるようにしてみた。

try {
  StringBuffer bufFileDataLine = new StringBuffer();
  FileReader fileData = new FileReader(this.getLogFileName());
  BufferedReader bufFileData = new BufferedReader(fileData);

  while(bufFileData.ready()){
    bufFileDataLine.append(bufFileData.readLine() + "\n");
  }
  bufFileData.close();

  this.setOutputLogData(bufFileDataLine.toString());

} catch (FileNotFoundException e) {
  this.setMessageOfError("ファイルが見つかりません");
  e.printStackTrace();

} catch (IOException e) {
  this.setMessageOfError("エラーが発生しました");
  e.printStackTrace();
}

[Servret/JSP] テキストファイルを読み込んで表示

テキストファイルの内容を1行ずつ読み込んで、ただベタッと貼り付けていく処理。
これをこのままJSPファイルに貼り付けて、c:¥dummy.txt を用意すればテスト可能。

<%
  BufferedReader bufFileData =
          new BufferedReader(new FileReader("c:¥¥dummy.txt"));
  while(bufFileData.ready()){
    out.println(bufFileData.readLine() + "<BR>");
  }
  bufFileData.close();
%>

あ、もちろん、@page タグに import="java.io.*" を忘れずに。

フォト
2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最近のトラックバック