struts.xmlで使用できる属性、要素はここのdtdファイルでわかる。

まずはconstant要素

これはsturts2のデフォルトの設定を上書く際に使用する。
デフォルトの設定はstruts2-core-2.1.xxx.jarのorg/apache/struts2/default.propertiesに書かれている。
デフォルトでは以下の値が定義されている


struts.i18n.encoding=UTF-8
struts.objectFactory.spring.autoWire = name
struts.objectFactory.spring.useClassCache = true
struts.objectFactory.spring.autoWire.alwaysRespect = false
struts.multipart.parser=jakarta
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
struts.action.extension=action,,
struts.serve.static=true
struts.serve.static.browserCache=true
struts.enable.DynamicMethodInvocation = true
struts.enable.SlashesInActionNames = false
struts.tag.altSyntax=true
struts.devMode = false
struts.i18n.reload=false
struts.ui.theme=xhtml
struts.ui.templateDir=template
struts.ui.templateSuffix=ftl
struts.configuration.xml.reload=false
struts.velocity.configfile = velocity.properties
struts.velocity.contexts =
struts.velocity.toolboxlocation=
struts.url.http.port = 80
struts.url.https.port = 443
struts.url.includeParams = none
struts.dispatcher.parametersWorkaround = false
struts.freemarker.templatesCache=false
struts.freemarker.beanwrapperCache=false
struts.freemarker.wrapper.altMap=true
struts.freemarker.mru.max.strong.size=100
struts.xslt.nocache=false
struts.mapper.alwaysSelectFullNamespace=false
struts.ognl.allowStaticMethodAccess=false

開発中のみ、値を変更する(false→ture)可能性が大きいパラメーター
  • struts.configuration.xml.reload:リクエストの度にxmlファイルを読み直す
  • struts.i18n.reload:リクエストの度にリソースファイルを読み直す(※と書いてあるけどファイルの内容を変更しても読み直してくれなかった。なぜ??)
  • struts.devMode:上記2つを1度に設定し、ログも詳細に吐き出される。
    また、jsp上に<s:debug></s:debug>タグを記載すると[debug]というリンクが出現し、クリックするとValueStackに積まれている内容を見ることができる。これは自分が想定していた値がjsp上でとれなかった場合に原因を探る際にすごく便利
開発以降、変更する可能性が大きいパラーメーター
struts.action.extension:デフォルトはstruts.action.extension=action,,となっている(カンマ区切りで空文字もあることに注意)これは、例えばstruts.xml内で<action name="hoge" class="HogeHoge">と定義があった場合、
xxx/hoge.actionまたは、xxx/hogeというURLでHogeHogeクラスが呼び出されることを意味する。なので、デフォルトのactionという拡張子や拡張子なしが嫌な場合は、この値を変更すればよい。

constantタグ以外でのパラメーターの変更方法
struts.xml内でconstantタグを使用して変更する以外に、変更したい値をstruts.propertiesに書き、classpathが通っているフォルダの直下に置くことでも変更することができる。もし、struts.xmlとstruts.properties両方で同じパラメータに対し違う値を設定していたら、struts.propertiesで設定した値が有効になる。

例)struts.xmlでは<constant name="struts.action.extension" value="do,," />、struts.propertiesではstruts.action.extension=cgiと設定した場合、<action name="hoge">のhogeにマッピングされてるクラスに対してはxxx/hoge.cgiでのみアクセスでき、xxx/hoge.doやxxx/hogeではアクセスできない。

このやり方よりもMavenを使ったほうが楽だったので変更する。

前提

  • ここの前提の状態が終了していること
  • Mavenがインストール、環境設定への設定済みで、eclipseにM2_REPOが設定してあること。(m2eclipseなどのeclipseからMavenを利用する為のプラグインは入れる必要はなし。)

手順
  1. [Java Project]を新規に作成(プロジェクト名はstruts2-showcaseとして以後説明)
  2. 作成したプロジェクトを右クリック→[import]→[General]→[File System]を選択
  3. [File Directory:]にここでダウンロード、展開したフォルダ内のsrc/apps/showcaseまでを入力し[shoucase]にチェックをいれ[Finish]ボタンをクリック。(pom.xmlにもチェックが入っていること。また、この時点ではコンパイルエラーが出てるが気にしない。)
  4. コンソールにて1.で作成したプロジェクト名まで移動し mvn eclipse:eclipse とコマンドを打つ。「BUILD SUCCESSFUL」 が出力されれば成功。
  5. eclipse上から作成したプロジェクト上でF5を押し、コンパイルエラーがなくなっていることを確認する。
  6. Project Explorer上から作成したプロジェクト上で、右クリック→[Properties]→[Tomcat]→[全般]タブを選択し、以下の処理を行う
    ・[Tomcatプロジェクト]にチェックを入れる
    ・コンテキスト名を入力(ここでは「struts2-showcase」とする。)
    ・Webアプリケーション・ルートとするサブディレクトリーに「/src/main/webapp」を入力。
  7. [開発用クラスローダーのクラスパス]タブで以下の処理を行う
    ・開発用クラスローダーを有効にする」にチェックを入れる。
    ・M2_REPO/javax/servlet/servlet-api/servlet-api-2.4.jar以外のチェックボックスにチェックを入れる
  8. Project Explorerのプロジェクト上で、右クリック→[Tomcat プロジェクト]→[コンテキストの定義を更新]
  9. eclipse上のtomcatアイコンをクリックしてtomcatを起動。
  10. http://localhost:8080/struts2にアクセス(struts2-showcaseは6.の「コンテキスト名」で入力した名前)
xworkのソースを別途ダウンロードしなくても、mvnコマンドを打ったときにダウンロードとjarファイルにアタッチしてくれるので楽

ここを参考に導入。

java


public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<include file="example.xml"/>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package>
<!-- Add packages here -->
</struts>


おー、いい感じ。

struts2のサンプルをデバックしながら動かす際に、struts2自体のソースもデバックで追えるようにする。

※Mavenが使用できるのであればここの手順のほうがよい

事前準備

 xworksのソースをここからダウンロードしておく。(struts2.1.6で使用している2.1.2のソースの直リンク)
 ※xworksはstruts2が継承しているフレームワーク。
 

手順

  1. ここで作ったプロジェクトを右クリック→[Properties]
  2. [Java Build Path]→[Libraries]
  3. [Web App Librarie]内の[struts2-core-2.1.6.jar]→[Source attachment]をダブルクリック
  4. [Extarnal Folder]をクリックし、以前ダウンロードし展開したフォルダ内のsrc/core/src/main/javaまでを選択し、OKをクリック
  5. [Web App Librarie]内の[xwork-2.1.2.jar]→[Source attachment]をダブルクリック
  6. [Extarnal Folder]をクリックし、事前準備でダウンロードし展開したフォルダ内の/src/javaまでを選択入力し、OKをクリック

上記手順終了後、Project Explorerで該当プロジェクトの[Java Resources: src]→[libraries]→[Web App Libraries]内のstruts2-core-2.1.6.jarとxwork-2.1.2.jar内の適当なクラスファイルをクリックすれば、ソースが見れるようになり、デバックポイントも張れるようになる。

※Mavenが使用できるのであればここの手順のほうがよい

前提

  • eclipseインストール済み(バージョン3.4)
  • tomcatプラグインインストール済み(まず、eclipseのdropinsフォルダに展開したフォルダをごと配備し、次にtomcatのlibフォルダにDevLoader.zipのみを配備する)


手順
  1. eclipseのProject Explorer上で右クリック→[import > ]→[WAR file]
  2. ダイアログが出るので、「WAR file:」にstruts2-showcase-2.1.6.warが置いてある場所を入力して[Finish]
  3. Project Explorer上にstruts2-showcase-2.1.6ができるので、右クリック→[Properties]で、[Java Compailer]を選択し、JDKのバージョンが1.5以上であることを確認。
  4. [Java Build Path]→[Libraries]→[Add External Jars]でtomcatのlibフォルダにあるservlet-api.jarを追加。
    (JVMAction.javaと言うクラスがコンパイルできないため)
  5. [Tomcat]→[全般]で以下の処理を行う
    ・[Tomcatプロジェクト]にチェックを入れる。
    ・コンテキスト名を入力(ここでは「struts2」とする。)
    ・Webアプリケーション・ルートとするサブディレクトリーに「/WebContent」を入力。 
  6. [Tomcat]→[開発用クラスローダーのクラスパス]で以下の処理を行う
    ・開発用クラスローダーを有効にする」にチェックを入れる。
    ・4.で追加したservlet-api.jar以外のチェックボックスにチェックを入れる
  7. Project Explorerのプロジェクト上で、右クリック→[Tomcat プロジェクト]→[コンテキストの定義を更新]
  8. eclipse上のtomcatアイコンをクリックしてtomcatを起動。
  9. http://localhost:8080/struts2にアクセス(struts2は5.の「コンテキスト名」で入力した名前)
これで、eclipse上からブレークポイントを張ってデバックしながら動作を確認できる。

2009/06/09

struts2

復習もかねて、つらつらと書いていく。

前提

  • javaインストール済み(バージョン6)
  • tomcatインストール済み(バージョン6)

まずは、サンプルを動かしてみる。
ここから全部入りのstruts-2.1.x-all.zipファイルをダウンロード、展開する。
(今の最新バージョンはstruts-2.1.6-all.zip。以後、このバージョンで話をすすめる。)

appsフォルダにあるのがサンプルアプリ。
その中のstruts2-showcase-2.1.6.warをtomcatのwebappsフォルダにコピー。

tomcatを起動し、http://localhost:8080/struts2-showcase-2.1.6 にアクセス。




validationチェック、tokenチェック、ファイルアップロードなど、いろいろなサンプルがある。画面下のView Sourcesをクリックすれば、そのサンプルがどのようなソースコードで作られてるか確認できる。

AmazonからGrails徹底入門が届いたのでGrailsを触ってみる。

以下、Grailsではないが、ちょっとはまったこと。

P.34 手順3 Grailsを使えるように設定するで
export JAVA_HOME=xxxx (未設定の場合)
export GRAILS_HOME=xxxx

とあるが、以下の設定もしないと次の手順4 Grailsを使ってみるで
$ grails xxxx とコマンドとコマンドを打っても
bash: grails: command not found
となってしまうので注意!!!

export PATH=$PATH:$JAVA_HOME/bin (未設定の場合)
export PATH=$PATH:$GRAILS_HOME/bin