プログラミング: 2016年12月アーカイブ

うーむ・・・
Struts2 の Zero Configuration が上手く機能してないような・・・

login.jsp
LoginAction.java

は、存在してます。

LoginAction.java は hello.lolo パッケージの下にいます。

web.xml には、

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>hello.lolo</param-value>
        </init-param>
    </filter>

という記述があります。

つまり、

http://localhost:8080/HelloServlet2/login.jsp

にアクセスした場合、Zero Configuration の機能で、

    1. hello.lolo パッケージの下の hello.lolo.LoginAction クラス(LoginAction.java)を探す。
    2. LoginAction クラスが見つかったら、その中の execute メソッドを実行する。

という動きをするんじゃないかね?

LoginAction クラスには、

    public String execute() throws Exception {
        this.sessionMap.put("userId", null);
        this.userId = "Struts2";
        return "success";
    }

というメソッドがあるんだけど、全然実行されんなあ・・・

struts2-config-browser-plugin-2.3.31 もビルド・パスに存在している。

ちょっと原因とかわかってないんだけど、とりあえずメモ代わりに書いておきます。
とりあえず、2.5 系は情報不足なんで、2.3 系で自習&検証を進めることにした。

なにせ、Struts 2 は初めての経験なので、ググった Web サイトなど参考にしつつテスト用にプロジェクトを作ってみてるんだけど、Struts 2 、マイナーバージョンどころかリビジョン違いですら互換性なさすぎやろ(^^;

たとえば、2.3.16 環境で動いてた Web システムが 2.3.31 環境で動かんとか・・・ありえんよね(^^;
まあ、Java や Tomcat のバージョンも絡んでくるから仕方ない面もあるんだろうけど。

今回、一番参考にした「CYOKODOG  JS DEVELOPER BLOG」の中の「2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門」というページでも、

Googleで「Struts2 入門」で検索すると以下のようなさまざまな入門サイトがひっかかりますが、バージョンアップ毎の仕様変更が活発なせいなのか現時点の最新版 2.3.16 の Struts2 で動かそうとするうまくいきません。

@いう間にWebアプリを作れる「Struts 2」入門 - @IT
Struts2入門~基本形で理解する仕組みと構造~ - CodeZine
Struts2を使ってみる

なんて書かれてます。そうそう。"@いう間にWebアプリを作れる「Struts 2」入門 - @IT"サイトのとおりにやっても全然動かんかった(^^;

でも、「CYOKODOG  JS DEVELOPER BLOG」の記述どおりにやってもうちの環境ではうまくいかなくて、

struts2-convention-plugin-2.3.31.jar

を WebContent/WEB-INF/lib にコピーし、ビルド・パスに追加した上で、LoginAction.java を、

import org.apache.struts2.config.Result; 
 ↓
import org.apache.struts2.convention.annotation.Result;

@Result(name = "main", value = "main.action", type = ServletRedirectResult.class)
 ↓
@Result(name = "main", location = "main.action", type = "ServletRedirectResult")

と修正する・・・っていう対応が必要だった。
それと、

import org.apache.struts2.dispatcher.*;

は参照されていないので削除。まあ、これは警告レベルの問題なので、必須じゃないけど。

これで、うちの環境でも、

20161214_struts2.jpg

最初の表示まではとりあえずうまくいった。続きをやりますかね。
Struts セットアップのメモ。

検証用(&ちょっとお勉強用)に、MacBook Pro + VMware Fusion 上で動いている Windows 7 32bit に Struts 2 開発環境を作っているので・・・

Struts 2 のセットアップだけど、最初、@IT の "@いう間にWebアプリを作れる「Struts 2」入門" というところを参照しようと思ったんだけど、記事で扱われている Struts 2 のバージョンが 2.1。今回実際にセットアップしているのが 2.5.5 で、随分開きがあるので、本家サイトの「Simple Setup」のページと併せて見ていくことにした。

ダウンロードをして展開した Struts 2 配布物の、lib ディレクトリ以下のファイルを WEB-INF/lib(@IT では TOMCAT/lib)フォルダ以下にコピーするのだが、@IT では、

commons-logging-1.0.4.jar
freemarker-2.3.12.jar
commons-fileupload-1.2.1.jar
ognl-2.6.11.jar
struts2-codebehind-plugin-2.1.2.jar
struts2-core-2.1.2.jar
xwork-2.1.1.jar

上記のファイルを・・・となっている。しかし、本家サイトでは、

commons-logging.jar
freemarker.jar
commons-fileupload.jar
ognl.jar
struts2-core.jar
xwork.jar
javassist.jar
commons-io.jar
commons-lang3.jar
※比較しやすいように並び替えている。

このように、@IT の記事より、

javassist.jar
commons-io.jar
commons-lang3.jar

これらの 3ファイルが多いな。

ちなみに、これは Minimum Set の場合で、別に lib 以下をまるごとコピーしてもいいようだが。
このファイルの違いはバージョンによる違いなのかわからないが、とりあえず「多い方に合わせて」セットアップしておくことにしよう。

と思ったら、配布物の中に xwork.jar が無いじゃないか?
ググってみると、xwork-core.jar だ・・・ということだが、それも無い。
2.5 系って、xwork.jar 含まれてないんかね?docs には、

struts-2.5.5\docs\struts2-core-apidocs\com\opensymphony\xwork2

ってドキュメントが存在してるけど。

試しに、Struts 2 の 2.3.31 を落としてみると、ちゃんと xwork-core-2.3.31.jar が含まれてるな。

2.5-BETA3 を落としてみると、こっちには xwork はやはり含まれていない。2.5以降、含まれなくなったんかなあ???

個別に、ダウンロードは出来るみたいだけど、http://www.opensymphony.com/xwork/ にもアクセスできんしなあ。

なぞ???
POI ライブラリを最新版に入れ替える」に書いたのは間違い。てか、不十分。

poi-3.15.jar だけインポートしたんじゃ駄目やがな。

1.該当プロジェクト上で
 右クリックメニュー→[インポート]

2.[一般]→[ファイル・システム]を選択。
 「次のディレクトリーから」で、展開した poi-3.15 を指定。(全部チェック)
 宛先フォルダーが該当プロジェクトになっていることを確認。

3.「完了」ボタン押下
 これで、フォルダごとインポートされる。

4.インポートされた jar ファイルを全て選択して、
 右クリックメニュー→[ビルド・パス]→[ビルド・パスに追加]

5.lib の下の jar ファイルも全て選択し、
 右クリックメニュー→[ビルド・パス]→[ビルド・パスに追加]

これでいいかな?

まあ、ちゃんとサンプルのプログラムが実行出来て、

20161211_excel.jpg

こういう画像を貼った Excel シートが作成されたので、バッチリであろう。

ちなみに、テスト用に作ったソースは以下のとおり。

package poiTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.log4j.net.JMSSink;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.util.IOUtils;

public class poiTest {

    private static final String IMAGE_FILE = "C:\\Users\\hogehoge\\img\\kao.jpg";
    private static final String OUTPUT_FILE = "InsertImage.xls";

    public static void main(String[] args) throws Exception {
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");

        FileInputStream inputImage = new FileInputStream(IMAGE_FILE);
        byte[] bytes = IOUtils.toByteArray(inputImage);
        int pictureIndex = wb.addPicture(bytes,   HSSFWorkbook.PICTURE_TYPE_JPEG);
        inputImage.close();

        HSSFCreationHelper helper = (HSSFCreationHelper) wb.getCreationHelper();
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = helper.createClientAnchor();
        anchor.setCol1((short) 1);
        anchor.setRow1(1);

        HSSFPicture picture = patriarch.createPicture(anchor, pictureIndex);
        picture.resize();
        FileOutputStream fileOut = new FileOutputStream(OUTPUT_FILE);
        wb.write(fileOut);
        fileOut.close();
    }

}

ご参考まで。
ありゃりゃ。

poi-3.0-rc4-20070503.jar

だと、

import org.apache.poi.hssf.usermodel.HSSFCreationHelper;

でエラーになるな。
なんで、こんな古い POI ライブラリを使ってるのか記憶に無いけど・・・(^^;

なので、新しいのに入れ替える。



を、ダウンロード。

ダウンロードした poi-bin-3.15-20160924.zip を展開。

1.poi-3.0-rc4-20070503.jar 関連ファイルをプロジェクトから削除。

2.パッケージ・エクスプローラーの上で、
 右クリックメニュー→[新規]→[フォルダ]で、該当プロジェクトに lib フォルダを追加。

3.poi-bin-3.15-20160924.zip を展開した中から poi-3.15.jar を選択し、2 で作成した lib の下にコピー。(Eclipse で操作)

4.lib の下の poi-3.15.jar を選択し、
 右クリックメニュー→[ビルド・パス]→[ビルド・パスに追加]

これで、「参照ライブラリー」に poi-3.15.jar(への参照?)が登録され、import 可能となる。

HSSFCreationHelper クラスがねえぞというエラーは解消した。

<追記>
これでは駄目。実際にはこちらのページを参照のこと。
Git リポジトリーの下に Eclipse のプロジェクト作るのって、ホンマにこんな手順なんかな?
もっとスマートな方法があるような気がするのだが、ググってみた結果を参考に、こんな風にやってみた。

ええと、条件として、「既に Git リポジトリーの複製」は作成済です。

1.Eclipse にプロジェクトを作成する(今回は、動的 Web プロジェクト)
 [ファイル]→[新規]→[プロジェクト]

2.Workspace 内のプロジェクトのディレクトリを、まるごとコピーして Git リポジトリーの下に。

3.リポジトリーに追加。
 俺の環境では TortoiseGit を使っているので、コマンドではなく、ディレクトリ上で右クリックメニューを開き、[TortoiseGit]→[追加]を選択

20161208_git01.jpg

4.追加対象のファイル一覧が出て来るので、全てチェックして「OK」押下。

20161208_git02.jpg

5.Eclipse 上で、最初に作成したプロジェクトの削除。
 「ディスク上からプロジェクト・コンテンツを削除」にチェック。

6.Git リポジトリー下にコピーしたフォルダをプロジェクトとしてインポート。
 Java パースペクティブ(パッケージエクスプローラー上で右クリックメニュー→[インポート]
 選択画面で[一般]→[既存プロジェクトをワークスペースへ]し、ルートディレクトリに Git リポジトリー下にコピーしたディレクトリを指定する。

以上。

なんか、Eclipse 上で一旦作ったプロジェクトをコピーしたり削除したりとバタバタしてて格好悪い。

(既に既存の Git リポジトリーがあるので)Workspace をリポジトリーの下に作るのではなく、もっとすぱっと Git リポジトリーの下に、関連付というか、インポートというか、要は Eclipse プロジェクトを作る方法は無いものか・・・

このアーカイブについて

このページには、2016年12月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2016年10月です。

次のアーカイブはプログラミング: 2017年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら