ページ

2014年12月30日火曜日

GAEと戯れる 12 - Slim3 ControllerとJSP -

ControllerとJSPを見てみる

前回Antで作成したControllerとJSPがどんな風になっているのか確認。

・IndexController.java
public class IndexController extends Controller {

    @Override
    public Navigation run() throws Exception {
        return forward("index.jsp");
    }

}

・index.jsp
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Index</title>
</head>
<body>
<p>Hello Index !!!</p>
</body>

</html>

ControllerはSAStrutsでいう所のActionクラスっぽい。戻り値としてパスを含んだ
Navigationクラスを返却している。
JSP側はいつも通りっぽい。ただ至ってシンプルなのでデフォルトで配置されている
CSSを読み込む。

war/css/global.cssを読み込むようにjspを修正。
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="/css/global.css" />
<title>Index</title>
</head>
<body>
<h1>Hello Index !!!</h1>
<p>page sample.</p>
</body>

</html>

↓実行結果







変わった変わった^^
次にControllerとViewの連携をやってみる。それぞれ以下に修正。

・IndexController.java
public class IndexController extends Controller {

    @Override
    public Navigation run() throws Exception {
        request.setAttribute("msg", "this is write in run function!!");
        return forward("index.jsp");
    }

}

・index.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="/css/global.css" />
<title>Index</title>
</head>
<body>
<h1>Hello Index !!!</h1>
<p>${msg}</p>
</body>

</html>

継承元のControllerにHttpServletRequest requestが定義されている為使用できる。
index.jspではEL式でmsgを表示している。

↓実行結果





連携できている^^

ここまでをGAE側へデプロイしてみる

1. まずはGAE側でアプリケーションの登録を行う。
     以下へアクセス
     https://appengine.google.com









2. 「Create Application」を選択し作成画面へ遷移

















3. Application IdentifierとApplication Titleを入力し作成。

     ・Application Identifier ・・・GAE内でユニークとなるもの、サブドメインになる。
                                                         ※右となりのチェックボタンで一意かチェックできる

     ・Application Title        ・・・好きなタイトルを付けれる

















↓作成完了












4. 「appengine-web.xml」の編集
<application></application>タグにGAE側で作成したプロジェクトの「Application Identifier」を設定する












5. プロジェクトをデプロイ
「GDT pulldown」メニューから「Deploy to  App Engine...」を選択
























実行!!






























↓コンソールのログ
------------ Deploying frontend ------------

Preparing to deploy:
Created staging directory at: '/var/folders/6b/7v871n_x0273ts_v950blc8m0000gn/T/appcfg3099164888655695181.tmp'
Scanning for jsp files.
Compiling jsp files.
Scanning files on local disk.
Initiating update.
Cloning 34 static files.
Cloning 60 application files.

Deploying:
Uploading 7 files.
Uploaded 1 files.
Uploaded 2 files.
Uploaded 3 files.
Uploaded 4 files.
Uploaded 5 files.
Uploaded 6 files.
Uploaded 7 files.
Initializing precompilation...
Sending batch containing 7 file(s) totaling 16KB.
Deploying new version.
Closing update: new version is ready to start serving.
Uploading index definitions.
Uploading task queues.


Deployment completed successfully

↓ちゃんとデプロイできました^^














GAEと戯れる 11 - Slim3 -

GAE/JでのSeasarプロジェクトSlim3を試してみる

業務でSAStruts + JBossという普段使う事はなかったであろう技術と出会ったので、
その経験を活かし?GAE/Jでのフレームワーク「Slim3」を試してみる

↓参考サイト
https://sites.google.com/site/slim3documentja/


・まずは環境構築

以下サイトを参考に環境構築&プロジェクトの作成。
http://libro.tuyano.com/index2?id=1796003

プラグインをインストールしたら、「新規プロジェクト」>「Slim3 Project」を選択
























プロジェクト名とパッケージを入力し、「Use MVC of Slim3」を選択しプロジェクト作成

















↓こんな感じで作成される

























・コントローラーとビューの作成

Slim3ではMVC関連の作成をAntで作成するらしい。build.xmlで色々定義されている。
build.xmlで右クリック > 「Ant Build...」を選択
























Targetに「gen-controller」を選択し実行























コントローラーのパス入力画面が表示されるので今回は「/」を入力





↓これでIndexControllerとindex.jspが作成される。
























※作成直後にツリーに反映されていない場合はリフレッシュする

実際に実行して確認。プロジェクト右クリック > 「Run As」>「Web Application」を選択
























GAEのSDK内に同封されているローカルサーバ「Jetty」が起動されるらしい。
http://localhost:8888/にアクセスしてみる。







起動しているっぽい^^

2014年12月29日月曜日

Atomまとめ 3 - Atom Runner導入 -

その場でスクリプトを実行してくれる「Atom Runner」パッケージを入れてみる

普段使うRubyも対応しているのでよさげ^^


















Ctrl + Rでスクリプトを実行できる。
ただ、ファイルを保存して何のスクリプトかわかるようにしてやらないと実行できない。
選択した箇所だけ実行できるようだが、自分の環境ではできないorz


次に、直接ターミナルを使えるAtom Term2を入れてみる


$ apm --version
apm  0.116.0
npm  1.4.4
node 0.10.33
python 2.7.6
git 1.9.3
$ apm install term2
Installing term2 to /Users/{ユーザ名}/.atom/packages

> pty.js@0.2.4 install /private/var/folders/6b/7v871n_x0273ts_v950blc8m0000gn/T/apm-install-dir-1141129-20445-xi9xij/node_modules/term2/node_modules/pty.js
> node-gyp rebuild

  CXX(target) Release/obj.target/pty/src/unix/pty.o

・・・いきなりエラーがっ><
↑を参考に再インストール

$ apm install term2
Installing term2 to /Users/{ユーザ名}/.atom/packages
無事にインストールでけました。


















Ctrl + Alt + t で新規タブにカレントディレクトリのターミナルを表示
Ctrl + Alt + → で分割ウィンドウにターミナル表示

ん〜いい感じ^^ これはRailsの時なんかに使えそう^^

2014年12月23日火曜日

Seasarしてみるさー 7 - htmlタグ -

色々なHTMLフォーム部品(Strutsのhtmlタグ)


・チェックボックス

    単一のチェックボックス     html:checkbox
    複数のチェックボックス     html:multibox

↓前回のログイン画面に追加
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ログイン画面</title>
</head>
<body>
<h1>ログイン画面</h1>
<html:errors/>
<s:form>
ユーザ名 : <html:text property="name" /><br>
パスワード : <html:password property="password" /><br>
<br>
<html:checkbox styleId="checkbox" property="checkbox" value="1" />
<label for="checkbox">チェックボックス</label>
<br>
<html:multibox styleId="multibox1" property="multibox" value="1">マルチボックス1</html:multibox>
<label for="multibox1">multibox1</label>
<html:multibox styleId="multibox2" property="multibox" value="2">マルチボックス2</html:multibox>
<label for="multibox2">multibox2</label>
<html:multibox styleId="multibox3" property="multibox" value="3">マルチボックス3</html:multibox>
<label for="multibox3">multibox3</label>
<br>
<s:submit value="ログイン" property="login" />
</s:form>
</body>

</html>

↓ActionForm側
/**
 * ログインフォームクラス
 */
public class LoginForm {

@Required
public String name;
@Required
public String password;
public boolean checkbox;
public String[] multibox;

}

※どうやらmultiboxはString[]でアクションフォームを作らないとエラーになる

・セレクトボックス

     セレクトボックスはhtml:selectタグで出力する
     複数項目の中から1つもしくわ複数選択する場合に使用する。

↓またまたログイン画面に追加
<html:select property="select">
  <html:option value="1">Java</html:option>
  <html:option value="2">C#</html:option>
  <html:option value="3">Ruby</html:option>
</html:select>

<br>

↓ActionForm
/**
 * ログインフォームクラス
 */
public class LoginForm {

@Required
public String name;
@Required
public String password;
public boolean checkbox;
public String[] multibox;
public String select;

}

※またhtml:selectにmultiple属性やsize属性を追加する事もできる

チェックボックスとセレクトボックスの実行画面

















2014年12月20日土曜日

Seasarしてみるさー 6 - ログイン画面実装 -

簡単なログイン画面の実装

いたってシンプルなログイン画面を作ってみる。

・LoginAction
/**
 * ログインアクションクラス
 */
public class LoginAction {

@ActionForm
@Resource
protected LoginForm loginForm;
/**
* メインページ
* @return JSP
* @throws Exception 発生した例外
*/
@Execute(validator=false)
public String index() throws Exception {
return "index.jsp";
}
/**
* ログイン
* @return リダイレクトページ
* @throws Exception 発生した例外
*/
@Execute(validator=true, input="index.jsp")
public String login() throws Exception {
// ログイン処理
return "/register/input?redirect=true";
}

}

・index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ログイン画面</title>
</head>
<body>
<h1>ログイン画面</h1>
<html:errors/>
<s:form>
ユーザ名 : <html:text property="name" /><br>
パスワード : <html:password property="password" /><br>
<s:submit value="ログイン" property="login" />
</s:form>
</body>


</html>

・LoginForm
/**
 * ログインフォームクラス
 */
public class LoginForm {

@Required
public String name;
@Required
public String password;

}

※LoginActionでLoginFormをDIする際に@ActionFormを付け忘れるとnameプロパティの
   セッターゲッターが見つかりません〜のエラーが発生する!!

・画面















すっごいシンプル^^;

2014年12月13日土曜日

Windows8でADBドライバーインストール

Windows8でデジタル署名の無いADBドライバーを入れようとすると。。

デバイスのドライバーソフトウェアのインストールに関する問題が発生しました。
デバイス用のドライバーソフトウェアが見つかりましたが、このドライバーのインストール時にエラーが発生しました。
Android Composite ADB Interface
指定されたカタログファイルにファイルのハッシュがありません。ファイルが壊れているか、改ざんされた可能性があります。


こんな感じで怒られるorz
これを回避するには、Windows8をテストモードで起動して、ドライバー署名の矯正を無効化する必要があるらしい。

1. テストモードへ変更
 コマンドラインからテストモードへ変更する
   「bcdedit /set TESTSIGNING ON」を実行しても、以下内容で怒られる。
    『要素データを設定中にエラーが発生しました。この値はセキュアブートポリシーに
      よって保護されているため、変更または削除できません』
  のでセキュアブートの設定を変える必要がある。

  「チャーム」→「設定」→「PC設定の変更」→「保守と管理」
 「回復」→「今すぐ再起動」を選択。



















オプションの選択から、「トラベルシューティング」→「詳細オプション」を選択。





















詳細オプションから「UEFIファームウェアの設定」を選択。



















「再起動」。



















「BIOS設定を起動」を選択。



















BIOSメニューからセキュアブーストをdisableにする



















再起動後、コマンドプロンプトから「bcdedit /set TESTSIGNING ON」を実行


2. ドライバー署名の強制の無効化

詳細オプションから「スタートアップ設定」を選択。

再起動 → ドライバー署名の強制を無効にする
で、再起動完了後デスクトップにテストモードと表示されればオK










これで、デジタル署名が無いドライバもインストールできる^^ 参

考サイト
http://blog.livedoor.jp/frbsd/archives/25566476.html
http://hep.eiz.jp/201303/windows-8-android-adb-usb-driver-install/
http://d.hatena.ne.jp/masataro1/20110802/1312255770

2014年12月7日日曜日

Seasarしてみるさー 5 - JSP復習 -

JSPの基礎知識


以前も、GAEの時に少しやったが、今回は復習もかねて。

1. スクリプトレット

    <% %>でJavaコードを記述
    <%= %>で値を表示する

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>スクリプトレット練習</title>
</head>
<body>
<% for(int i = 1; i <= 10; i++) { %>
  <%= i %>回目<br>
<% } %>
</body>

</html>

↓こんな感じで表示される



















2. タグライブラリ
JSPで任意の機能を持ったタグを利用できるようにしたもの。
上のfor文をタグを使って記述。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>タグライブラリ練習</title>
</head>
<body>
<c:forEach begin="1" end="10" var="i">
  ${i}回目<br>
</c:forEach>
</body>

</html>

↓同じように表示される
















3. JSP-EL
JavaBeanの値を参照するためのEL(Expression Language)を使用する事ができる。

例)
アクション
public String message;
/**
* 入力画面表示
* @return 遷移画面
*/
    @Execute(validator = false)
public String input() {
    message = "Hello SAStruts!!";
        return "input.jsp";

}

JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP-EL練習</title>
</head>
<body>
${message}
</body>

</html>

↓表示画面








この時、ELはオブジェクトをpageContext、request、session、applicationの順で検索し、
最初に見つかったものを参照。
特殊なものに、empty演算子というのがあるらしい。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>結果表示</title>
</head>
<body>
<h1>結果表示</h1>
${result}<br>
<c:if test="${check == false}">
 未チェック
</c:if>
<c:if test="${check == true}">
 チェックあり
</c:if>
</body>

</html>

<c:if>タグのtest属性で == が使える。
アクションのchekcプロパティに応じて画面表示が可能。






























ELの暗黙オブジェクトなるものもあるらしい。
http://struts.wasureppoi.com/jsp/03_el_implicit_object.html