ページ

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

2014年11月30日日曜日

UCCドリップコーヒー

たくさん買ってみた^^




















一番右のだけスーパーで購入。
他は楽天ポイントで購入。今の所リッチブレンドが一番美味しい^^

Dockerをさわってみる 3 - Dockerfile -

Dockerfileで環境作り

前回から少ししか経ってないのにもうDocker1.1が出たらしい。。早っ><;
今回はDockerfileを使って環境を作成してみる。

Dockerfileとは
  MakefileのDocker版。#がコメント。{命令}と{引数}でスペース区切りで記述。
  「docker build」する事でDockerfileの上から順に実行される。

※主な命令
{命令}用途
FROM元となるDockerイメージの指定
MAINTAINER作成者の情報
RUNコマンドの実行
ADDファイル/ディレクトリの追加
CMDコンテナーの実行コマンド 1
ENTRYPOINTコンテナーの実行コマンド 2
WORKDIR作業ディレクトリの指定
ENV環境変数の指定
USER実行ユーザーの指定
EXPOSEポートのエクスポート
VOLUMEボリュームのマウント

試しに、前回同様nginxをインストール + index.htmlを追加するDockerfileを作成してみる。
[root@localhost docker]# mkdir nginx1
[root@localhost docker]# cd nginx1/
[root@localhost nginx1]# ls
[root@localhost nginx1]# vi Dockerfile
[root@localhost nginx1]# ls
Dockerfile
[root@localhost nginx1]# echo 'hello docker' > index.html
[root@localhost nginx1]# ls
Dockerfile  index.html
[root@localhost nginx1]# 

いざ、build!!
[root@localhost nginx1]# docker build -t fuji/nginx:1.0 .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
 ---> 1357f421be38
Step 1 : MAINTAINER XXXXXX <xxxx@gmail.com>
 ---> Running in e779846d56f3
 ---> 86560b5fee44
Removing intermediate container e779846d56f3
Step 2 : RUN apt-get update
 ---> Running in a3a46568fd97
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Ign http://archive.ubuntu.com trusty-proposed InRelease

ん〜、ビルドは最後までいったっぽいが、image名が空?
[root@localhost nginx1]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              164fa62b79b6        42 seconds ago      231.5 MB
fuji/nginx          latest              fd64b49b28ca        7 weeks ago         231.2 MB
ubuntu              14.10               b8d67033ed07        7 weeks ago         242.4 MB
ubuntu              utopic              b8d67033ed07        7 weeks ago         242.4 MB
ubuntu              14.04               1357f421be38        7 weeks ago         192.7 MB
ubuntu              14.04.1             1357f421be38        7 weeks ago         192.7 MB
ubuntu              trusty              1357f421be38        7 weeks ago         192.7 MB
ubuntu              latest              1357f421be38        7 weeks ago         192.7 MB
ubuntu              12.04               2bed76595591        7 weeks ago         114.6 MB
ubuntu              12.04.5             2bed76595591        7 weeks ago         114.6 MB
ubuntu              precise             2bed76595591        7 weeks ago         114.6 MB

一旦、IMAGE IDを指定してコンテナ作成&実行してみる。
[root@localhost nginx1]# docker run -d -p 80:80 --name nginx1 164fa62b79b6 /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
44756c2137b2a1fdcf0b3dd06b7a8bb9b4a5b0a41f803cc8da03a5dc6e2d61ac
[root@localhost nginx1]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
44756c2137b2        164fa62b79b6        /usr/sbin/nginx -g '   19 seconds ago      Up 18 seconds       0.0.0.0:80->80/tcp   nginx1              
[root@localhost nginx1]# curl localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@localhost nginx1]# 

実行はできたが、index.htmlがコピーされていないorz
よくみてみたら、Dockerfileでindex.htmlのコピー先が間違っていたorz
[root@localhost nginx1]# cat Dockerfile 
FROM ubuntu
MAINTAINER XXXXXXX <xxxx@gmail.com>
RUN apt-get update
RUN apt-get install -y nginx
ADD index.html /usr/share/nginx/html/

×「/usr/share/nginx/html」⚪︎「/usr/share/nginx/html/」

もう一度ビルドしてみたら、ちゃんとイメージができてるっぽい。
[root@localhost nginx1]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
build_nginx         1.0                 aaf400998859        10 seconds ago      231.5 MB
fuji/nginx          latest              fd64b49b28ca        7 weeks ago         231.2 MB
ubuntu              14.10               b8d67033ed07        7 weeks ago         242.4 MB
ubuntu              utopic              b8d67033ed07        7 weeks ago         242.4 MB
ubuntu              14.04.1             1357f421be38        7 weeks ago         192.7 MB
ubuntu              latest              1357f421be38        7 weeks ago         192.7 MB
ubuntu              14.04               1357f421be38        7 weeks ago         192.7 MB
ubuntu              trusty              1357f421be38        7 weeks ago         192.7 MB
ubuntu              12.04               2bed76595591        7 weeks ago         114.6 MB
ubuntu              12.04.5             2bed76595591        7 weeks ago         114.6 MB
ubuntu              precise             2bed76595591        7 weeks ago         114.6 MB

起動&確認
[root@localhost nginx1]# docker run -d -p 80:80 --name nginx1 build_nginx:1.0 /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
21b37014f9657950c88db17d331d9075d5d8b6a9803b7534303cf32ffc2ee881
[root@localhost nginx1]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
21b37014f965        build_nginx:1.0     /usr/sbin/nginx -g '   4 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   nginx1              
[root@localhost nginx1]# curl localhost:80
hello docker
[root@localhost nginx1]# 

ん〜ちゃんとできている^^
参考URL