マエカワの備忘録的な何か

思い立ったが吉日

マエカワの開発日記~2017年 夏~ 前編

はじめに

 ここでは、マエカワが2017/8/15くらいから2017/10/1までの電気で通信できない大学夏季休業期間に技術面で勉強したことをつらつら書いていこうと思います。あくまで自分の備忘録として。開発に夢中になってて、ブログの更新を忘れていたとか何とかではないです。
 今年の夏は、iCC-D1を受講していた関係もあり、ディスプレイとにらめっこ状態が続いていました。成果発表も無事終わり、ひと段落したのでここに書いていこうと思ったわけです。その関連事項ばかりになってしまいますが、なにとぞご容赦を。

webアプリケーション

jspを用いたwebアプリケーション

 この夏やったことのほとんどはwebアプリケーション関連についてでした。JAVAのほうが自分になじんでるし書きやすいかなぁということでこちらの書籍を購入。

 webブラウザとサーバ間のやり取りすらわからなかった自分にとっては非常にためになる本だったと感じます。なんといっても、最初はJAVAで簡単なサーバを書き、最終的にTomcatの簡易版を1000行程度のプログラムで実現するという構成がよかったのかと。…人にもよりますが。まぁ実際のところ、プログラムの内容自体はわからなくてもブラウザとサーバがどんなやり取りをしてるのかなぁなんてのが実際にテキストファイルに書き出して見れるということ自体、かなりの収穫になります。GET、POSTわからなかったころと比べたら、それだけで進歩ありといったところでしょうか。
 この書籍で紹介されているwebアプリケーションの構築方法としましては、jspファイルを起点にして、POST時にdoPOSTを実行するようなjavaプログラムにjavaサーブレットを用いてアクセス。処理完了後、sendRedirect()で元のjspファイルに戻すといったものでした。若干Ajaxみたいなことをしていたということになります(xmlファイルもここで初めて扱ったりしました)。やっていたことがAjaxみたいなことだと知ったのはつい最近です。それまで、こんな技術があるんだなぁ。ふーん。なるほどなぁ。と考えていたので…。
 ほとんどが初めてのことだったので、ファイルの置き場所やパッケージに入っていたら少し書き方が変わるなど、結構ややこしかったので書いておきます。

つまづいたところ

 サーブレットに登録する際のweb.xmlについてです。servletタグとsevlet-mappingタグでサーブレットの登録をするのですが、登録するclassファイルがパッケージに入っている場合、そうでない時と比べて書き方が若干異なります。ここでは、testパッケージに入っているページ更新のためのUpdate.classをサーブレットに登録する際のweb.xmlの一部を書いていきます。

<servlet>
 <servlet-name>Update</servlet-name>
 <servlet-class>test.Update</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>Update</servlet-name>
 <url-pattern>/Update</url-pattern>
</servlet-mapping>

こんな感じ。classファイルをjavaコマンドで実行している人ならお茶の子さいさいなことですが、自分はeclipseで楽にやってしまっていたもので…。デフォルトパッケージに入っている場合はservlet-classタグの中身は"Update"だけでOKです。
 あと、eclipseで開発を進めていくにあたって、Tomcatのlibディレクトリに格納されているservlet-api.jarを外部APIとしてパスを通さないと動いてくれません。ここでもつまづきました。

doPostメソッドの書き出しについて

 ページ更新のためのJAVAプログラムですが、POSTを受けた際に動かすためにHttpServletクラスをextedsしてその中のdoPostメソッドをオーバーライドする必要があります。その際のある程度のひな型をここに書いておこうと思います。JAVAプログラム名はUpdate.javaとしています。

import javax.servlet.*;

public class Update extends HttpServlet{
  @Override
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
                       throws IOException,UnsupportedEncodingException{
    request.setCharacterEncoding("UTF-8");
    /*処理したいプログラム*/
    response.sendRedirect("/アプリケーション名/遷移先ページ名");
  }
}

後で出てきますが、コメントの「処理したいプログラム」のところに自分はOpenCVを用いて画像処理プログラムを書きました。写真をカメラから取得して~なんてこともできるのでこの形で書くことができるのはとても楽でした。

問題点

 ここで、jsp、およびjavaサーブレットを用いたwebアプリケーションの問題点を挙げていこうと思います。
 書きやすさに関してだけ言えば、自分的には◎です。とても書きやすかったし、最強エディタであるeclipse様と一緒に開発できたので心強かったです。ただ、ただですね…。

レンタルサーバのほとんどがjsp形式に対応していない!!!!

 ここ重要です。テストに出ます(出ない)。
 冗談はさておき、なんとここまで頑張って作ってきたindex.jspちゃんやUpdate.java君が全く使えないということになります(いろいろ調べてみたところ、ごく少数の有料サーバで対応しているとのことでした)。これまで大切に育ててきたのに…。本まで買って頑張ってきたのにっ…。気づいた時には後の祭り。webアプリケーションやレンタルサーバについての知識が皆無だったマエカワにはそんなことを確認している余裕すらなかったのです。ひたすら、がむしゃらに突っ走って勉強してきたjspファイルやらサーブレットをあっけなくPHPにとって代えなければならない状況になってしまいました。
 ということで、次のセクションではPHPを…と言いたいところですが、まだまださわりの部分しかできていません。ですので、次はOpenCVを用いた開発について書いていこうと思います。

 眠くなったので、更新はここまで。この後の内容は後日、後半という形で書いていこうと思いますので、興味を持ってくださったら次回もお楽しみに☆
 リンクは下に貼っておきます。
maekawa-yoshimiki-1119.hatenablog.com


 マエカワでした。