技術情報

GroupSession

ユーザーサポート「Hello World!」プラグインを作成する方法
GroupSession無料版ユーザーの方へ、開発に関する技術情報を公開しています。

「Hello World!」プラグインを作成する方法

前提条件

このドキュメントは、Java、Apache Struts、Jakarta Antについての知識がある事を前提とします。

version5.5.0からjavaの仕様変更に対応しプラグイン構造が変化します。
version5.4.1以前の手順で作成されたプラグインは
本稿で解説する新しいbuild.xmlでコンパイルする必要があります。

作業の手順

サンプルをダウンロード

手順2〜8で作成するファイルとディレクトリ構成のサンプルを、こちらからダウンロードできます。

サンプルをダウンロード


使い方
・zipファイルを解凍後、「plugin_sample」ディレクトリの下に「gsession」ディレクトリができます。
・GroupSessionをインストールしたgsessionディレクトリに、解凍後の「gsession」ディレクトリを上書きします。
・「手順9 ソースコードをコンパイルする」に従ってコンパイルを行います。
・tomcatを再起動すると上記の「Hello World!」プラグインが追加されます。

作成するファイルの一覧

・メニューアイコン用画像(手順2にて作成)
menu_icon_single.gif

・ソースファイル(手順3にて作成)
HelloWorldAction.java
HelloWorldForm.java

・JSPファイル(手順4にて作成)
helloworld.jsp

・struts設定ファイル(手順5にて作成)
struts_config.xml

・プラグイン設定ファイル(手順6にて作成)
plugin.xml

・build設定ファイル(手順7にて作成)
build.xml


手順1 プラグインIDを決める

プラグインIDは、GroupSessionがプラグインを識別するために使用する名前です。
使用する文字は必ず半角英数字、文字数は10文字以内にしてください。
日本語や記号、半角カタカナなどを使用したり、10文字を超えると、追加したプラグインが認識されません。

ここでは例として、プラグインIDを「newplugin」とします。
次に、メニューアイコン用の画像を作成します。


手順2 メニューアイコン用画像を作成、配置する

メニューアイコンには画像が必要です。
アイコン画像のファイル名は必ず「menu_icon_single.gif」とし、画像のサイズはすべて 25px × 25px で作成してください。

サンプルとして「newplugin」用の画像を用意しましたのでご利用ください。
newplugin用画像

次に、サンプル用のアイコン画像を配置します。
作成したメニューアイコンを配置するフォルダを作成してください。
下記ページの手順通りに作成した場合、以下の場所にGroupSessionがインストールされます。

Windows:C:¥Program Files¥Apache Software Foundation¥Tomcat 8.0¥webapps¥gsession
Linux:/usr/local/java/apache-tomcat-x.x.xx/webapps/gsession

GroupSessionインストールガイド:
https://groupsession.jp/support/setup_win.html

以下、GroupSessionのインストールフォルダを「¥gsession」として表記します。

プラグインフォルダの作成
¥gsessionにプラグインフォルダを作成します。
フォルダ名は手順1で決めたプラグインIDと同じにします。
ここでは「newplugin」になります。

画像用フォルダの作成
¥gsession¥newpluginに画像用のフォルダを作成します。
フォルダ名は固定で「images」としてください。

アイコンの配置
¥gsession¥newplugin¥imagesに作成したアイコン用画像をコピーします。

以下のような階層構造となります。
アイコンの配置


手順3 ソースファイルを作成、配置する

ソースファイルを作成します。 最低限必要なファイルは「Actionクラス」と「Formクラス」です。
ここでは例として「HelloWorldAction.java」と「HelloWorldForm.java」を作成します。

Actionクラスを作成する場合は、
必ずjp.groupsession.v2.struts.AbstractGsActionを継承し、
Formクラスを作成する場合は、
必ずjp.groupsession.v2.struts.AbstractGsFormを継承してください。

HelloWorldAction.java
package jp.groupsession.v2.newplugin.helloworld;

import java.sql.Connection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jp.groupsession.v2.struts.AbstractGsAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
* <br>[機 能] HelloWorldのアクションクラス
* <br>[解 説]
* <br>[備 考]
*
* @author JTS
*/
public class HelloWorldAction extends AbstractGsAction {

/**
* <br>[機 能] アクションを実行する
* <br>[解 説]
* <br>[備 考]
* @param map ActionMapping
* @param form ActionForm
* @param req HttpServletRequest
* @param res HttpServletResponse
* @param con DB Connection
* @return ActionForward
* @throws Exception 実行時例外
*/
public ActionForward executeAction(ActionMapping map,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res,
Connection con)
throws Exception {

return map.getInputForward();
}
}

HelloWorldForm.java
import jp.groupsession.v2.struts.AbstractGsForm;

/**
* <br>[機 能] HelloWorldのフォームクラス
* <br>[解 説]
* <br>[備 考]
*
* @author JTS
*/
public class HelloWorldForm extends AbstractGsForm {
}

次に作成したソースファイルを配置します。

プラグインフォルダの作成
¥gsession¥WEB-INF¥plugin以下にプラグインフォルダを作成します。
フォルダ名は手順1で決めたプラグインIDと同じにします。
ここでは「newplugin」となります。

ソースフォルダの作成
¥gsession¥WEB-INF¥plugin¥newpluginにソースフォルダを作成します。
フォルダ名は「src」で固定してください。

パッケージに対応するディレクトリの作成
¥gsession¥WEB-INF¥plugin¥newplugin¥srcに「パッケージ階層に合わせて」フォルダ階層を作成します。
ここでは「¥jp¥groupsession¥v2¥newplugin¥helloworld」となります。

¥gsession¥WEB-INF¥plugin¥newplugin¥src¥jp¥groupsession¥v2¥newplugin¥helloworld
に作成したソースファイルをコピーします。

以下のような階層構造となります。
手順4階層構造


手順4 JSPファイルの作成

画面への表示に使用するJSPファイルを作成します。
ファイル名は「helloworld.jsp」とします。

helloworld.jsp
<%@ page pageEncoding="Windows-31J"
contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>

<html:html>
<head>
<title>[GroupSession] HelloWorld</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href='../common/css/bootstrap-reboot.css?' type='text/css'>
<link rel=stylesheet href='../common/css/layout.css?' type='text/css'>
<link rel=stylesheet href='../common/css/all.css?' type='text/css'>
</head>

<body class="body_03">
<html:form action="/newplugin/helloworld">

<%@ include file="/WEB-INF/plugin/common/jsp/header001.jsp" %>

<table width="100%">
<tr>
<td width="100%" align="center">
<p>Hello World!</p>
</td>
</tr>
</table>

<%@ include file="/WEB-INF/plugin/common/jsp/footer001.jsp" %>

</html:form>
</body>
</html:html>

赤字で記載されている1行目の記述、HTMLヘッダに記述する文字コードの設定はUTF-8にしてください。


次に、作成したJSPファイルを配置します。

JSPフォルダの作成
¥gsession¥WEB-INF¥plugin¥newpluginにJSPフォルダを作成します。
フォルダ名は「jsp」としてください。

JSPファイルの配置
作成したJSPフォルダにJSPファイルをコピーします。

以下のような階層構造となります。
アイコンの配置


手順5 struts設定ファイルを作成、配置する。

struts設定ファイルを作成します。
内容は下記のように記述し、ファイル名は固定で「struts_config.xml」としてください。
下記内容の赤字の部分を作成したソースやプラグイン情報に合わせて書き換えます。

struts_config.xml
<?xml version="1.0" encoding="shift_jis" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>

<!-- ========== Form Bean Definitions =============== -->
<form-beans>

<!-- typeには作成したFormクラスをパッケージ名から記述します -->
<form-bean
name="helloworldForm"
type="jp.groupsession.v2.newplugin.helloworld.HelloWorldForm" />

</form-beans>

<!-- ========== Action Mapping Definitions ============= -->
<action-mappings>

<!-- nameにはform-beanに記述したnameと同じ値を記述します -->
<!-- inputには作成したJSPファイルへのパスを記述します -->
<!-- typeには作成したActionクラスをパッケージ名から記述します -->
<action
name="helloworldForm"
path="/newplugin/helloworld"
scope="request"
input="/WEB-INF/plugin/newplugin/jsp/helloworld.jsp"
validate="false"
type="jp.groupsession.v2.newplugin.helloworld.HelloWorldAction">
</action>

</action-mappings>

</struts-config>

※ 設定ファイルを保存する際は、設定ファイル内の文字コード設定(1行目)と同じ文字コードを使用して、ファイルを保存してください。
設定ファイル1行目に記述した文字コードと、ファイル自体の文字コードが異なる場合、追加したプラグインが正常に動作しない場合があります。

次に、struts設定ファイルを配置します。
¥gsession¥WEB-INF¥plugin¥newpluginに作成したstruts設定ファイルをコピーします。

以下のような階層構造になります。
struts設定ファイル階層構造


手順6 プラグイン設定ファイルを作成、配置する

プラグイン設定ファイルを作成します。
内容は下記の様に記述し、ファイル名は固定で「plugin.xml」としてください。
下記内容の赤字の部分をプラグイン情報に合わせて書き換えます。

plugin.xml
<?xml version="1.0" encoding="Shift_jis" ?>

<plugin>

<!-- プラグインID -->
<!-- 手順1で決めたプラグインIDを記述します -->
<id>newplugin</id>

<!-- 名称 -->
<!-- プラグインの名称を記述します -->
<name>ニュープラグイン</name>

<!-- 説明 -->
<!-- プラグインの説明を記述します -->
<description>新しいプラグインです。</description>

<!-- トップメニューの情報を記述する 記述しない場合はメニューに表示しない -->
<topmenu-info>
<!-- メニューへの表示/非表示 -->
<!-- プラグインをメニューへ表示する場合は「true」と記述します -->
<view>true</view>
<!-- メニューアイコンクリック時にフレーム内に表示するURLを記述します -->
<!-- struts_config.xmlのactionのpathの値を元に、下記の様に記述 -->
<url>../newplugin/helloworld.do</url>
<!-- メニューアイコン画像のパスを記述します -->
<icon>../newplugin/images/menu_icon_single.gif</icon>
<iconClassic>../newplugin/images/menu_icon_single.gif</iconClassic>
</topmenu-info>

<!-- ヘルプ情報を設定する。 -->
<help-info>
<!-- ヘルプの表示/非表示 -->
<view>false</view>
</help-info>

</plugin>

※ 設定ファイルを保存する際は、設定ファイル内の文字コード設定(1行目)と同じ文字コードを使用して、ファイルを保存してください。
設定ファイル1行目に記述した文字コードと、ファイル自体の文字コードが異なる場合、追加したプラグインが正常に動作しない場合があります。

次に作成したプラグイン設定ファイルを配置します。
¥gsession¥WEB-INF¥plugin¥newpluginに作成したプラグイン設定ファイルをコピーします。

以下のような階層構造になります。
プラグイン設定ファイル階層構造


手順7 build設定ファイルを作成する

GroupSessionでは、ソースのコンパイルにJakarta Antを使用します。
build設定ファイルとは、その際の設定を記述するファイルです。
ここでは、コンパイルおよび、コンパイル時に作成されたファイル・ディレクトリの削除が行えるように設定します。

内容は下記の様に記述し、ファイル名は固定で「build.xml」としてください。

build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
====================================================
GroupSession newplugin
共通クラスのビルドが完了していること
create JTS
====================================================
-->

<project name="GroupSession newplugin" default="build" basedir=".">
<!--
====================================================
Properties: 変数の定義
====================================================
-->

<!-- ディレクトリ名の定義 -->
<property name="SRC.DIR" value="./src" />
<property name="PLGIN_CLS.DIR" value="../../classes" />

<!-- プラグインパッケージパス -->
<property name="PLGIN_PKG.DIR" value="jp/groupsession/v2/newplugin" />

<!-- Compile Options -->
<property name="BLD.TARGET" value="1.6" />
<property name="DEBUG" value="yes" />
<property name="DEPRECATION" value="true" />
<property name="SRC.ENC" value="Windows-31J" />

<!-- ClassPath -->
<path id="app_classpath">

<!-- OSのクラスパス -->
<pathelement path="${classpath}" />

<!-- LIBディレクトリ -->
<!-- アプリケーション共通lib -->
<fileset dir="../../../../../lib">
<include name="**/*.jar"/>
<include name="**/*.zip"/>
</fileset>
<fileset dir="../../../WEB-INF/lib">
<include name="**/*.jar"/>
<include name="**/*.zip"/>
</fileset>
<!-- アプリケーション 共通クラス -->
<pathelement location="../../../WEB-INF/classes" />
</path>

<!--
====================================================
INIT: 初期化
====================================================
-->

<target name="init"
description="init"
>

<tstamp>
<format property="YMDHMS"
pattern="yyyy.MM.dd hh:mm:ss"
/>
</tstamp>
<echo message="Project Name = ${ant.project.name}" />
<echo message="Project Root = ${basedir}" />
<echo message="JDK Version = ${ant.java.version}" />
<echo message="Building Time = ${YMDHMS}" />
<echo message="" />
</target>

<!--
====================================================
BUILD: Classファイルの作成(コンパイル)
====================================================
-->
<target name="build">
<mkdir dir="${PLGIN_CLS.DIR}" />

<javac
classpathref = "app_classpath"
destdir = "${PLGIN_CLS.DIR}"
source = "${BLD.TARGET}"
target = "${BLD.TARGET}"
debug = "${DEBUG}"
deprecation = "${DEPRECATION}" encoding = "${SRC.ENC}">
<src path="${SRC.DIR}" />
<compilerarg value="-Xlint:unchecked" />
<include name="**/*.java"/>
</javac>

</target>

<!--
====================================================
CLEAN:作成したClassファイルをディレクトリごと削除
====================================================
-->

<target name="clean">
<antcall target="init" />
<delete dir="${PLGIN_CLS.DIR}/${PLGIN_PKG.DIR}" />
</target>
</project>

※ 設定ファイルを保存する際は、設定ファイル内の文字コード設定(1行目)と同じ文字コードを使用して、ファイルを保存してください。
設定ファイル1行目に記述した文字コードと、ファイル自体の文字コードが異なる場合、手順9で行うコンパイルが正常に動作しない場合があります。

※ プラグインパッケージパスにはsrcに作成した「パッケージ階層に合わせた」フォルダ階層を指定してください。
プラグインに含まれるjavaファイルがすべて入るようにしてください。
ここでは「¥jp¥groupsession¥v2¥newplugin」

※ アプリケーション共通libにはTomcatのlibディレクトリを指定してください。
例: Tomcatインストールディレクトリ: C:¥Tomcat
<fileset dir="C:/Tomcat/lib">

次に作成したbuild設定ファイルを配置します。
¥gsession¥WEB-INF¥plugin¥newpluginに作成したbuild設定ファイルをコピーします。

以下のような階層構造になります。
build設定ファイル階層構造


手順8 各ファイルのフォルダ階層を確認する

以上の全てのファイルを配置すると、このような階層構造になります。
全ファイル階層構造


手順9 ソースコードをコンパイルする

作成したソースコードをコンパイルします。
コマンドライン上で、build.xmlを配置したフォルダへ移動します。
この例では下記のディレクトリになります。

¥gsession¥WEB-INF¥plugin¥newplugin
※「¥gsession」はGroupSessionのインストールフォルダとします。

コマンドライン上で以下を実行してください。
$ cd ¥gsession¥WEB-INF¥plugin¥newplugin
$ ant build

コマンドラインに次のような実行結果が表示されればコンパイルは成功です。
BUILD SUCCESSFUL
Total Time: 6 seconds


手順10 tomcatを再起動して動作を確認する

tomcatを再起動することで設定が反映されます。
手順2で作成したプラグインアイコンがメニューに追加されます。
プラグインメニュー

プラグインアイコンをクリックすると、「Hello World!」のページがフレーム内に表示されます。
フレーム

メイン > 個人設定 > メニュー項目の設定にもプラグインが追加されるので、表示順の設定も可能です。
メニュー表示順設定


TOP